diff --git a/.tx/config b/.tx/config
new file mode 100644
index 0000000000000000000000000000000000000000..df6c48375189c0edced4c0b21755ea9963defd1e
--- /dev/null
+++ b/.tx/config
@@ -0,0 +1,9 @@
+[main]
+host = https://www.transifex.com
+
+[ring.resourcesuwpclientresw]
+file_filter = localization/<lang>/Resources.resw
+source_file = localization/en-US/Resources.resw
+source_lang = en
+type = RESX
+lang_map = cs_CZ: cs-CZ, da_DK: da-DK, de_DE: de-DE, fa_IR: fa-IR, fr_CA: fr-CA, fr_FR: fr-FR, hi_IN: hi-IN, it_IT: it-IT, nl_NL: nl-NL, pt_BR: pt-BR, ru_RU: ru-RU, sk_SK: sk-SK, sq_AL: sq-AL, zh_CN: zh-CN, zh_TW: zh-TW
diff --git a/AboutPage.xaml b/AboutPage.xaml
index 9d2188993cec6adeb79cd491e5e757c06aa63c93..c8c1661b92969684e9201e34d02552afd4b6dbdc 100644
--- a/AboutPage.xaml
+++ b/AboutPage.xaml
@@ -33,35 +33,30 @@
                     Margin="24">
             <StackPanel Orientation="Horizontal"
                         HorizontalAlignment="Center">
-                <Button x:Name="_aboutBasicButton_"
-                    Content="About"
-                    Margin="0,0,6,0"
-                    BorderThickness="0"
-                    FontSize="12"
-                    Click="_aboutBasicButton__Click"
+                <Button x:Uid="_aboutBasicButton_"
+                        Margin="0,0,6,0"
+                        BorderThickness="0"
+                        FontSize="12"
+                        Click="_aboutBasicButton__Click"
                     />
-                <Button x:Name="_aboutCreditsButton_"
-                    Content="Credits"
-                    Margin="0,0,6,0"
-                    BorderThickness="0"
-                    FontSize="12"
-                    Click="_aboutCreditsButton__Click"
+                <Button x:Uid="_aboutCreditsButton_"
+                        Margin="0,0,6,0"
+                        BorderThickness="0"
+                        FontSize="12"
+                        Click="_aboutCreditsButton__Click"
                     />
-                <Button x:Name="_aboutCloseButton_"
-                    Content="Close"
-                    Margin="0,0,6,0"
-                    BorderThickness="0"
-                    FontSize="12"
-                    Click="_aboutCloseButton__Click"
+                <Button x:Uid="_aboutCloseButton_"
+                        Margin="0,0,6,0"
+                        BorderThickness="0"
+                        FontSize="12"
+                        Click="_aboutCloseButton__Click"
                     />
             </StackPanel>
             <Image x:Name="_welcomeImage_"
-
-                       Source="Assets\Wide310x150Logo.scale-200.png"
-                       Width="310"
-                       HorizontalAlignment="Center"
-                       Margin="0 10 0 30"
-                       Height="150"/>
+                   Source="Assets\Wide310x150Logo.scale-200.png"
+                   Width="310"
+                   HorizontalAlignment="Center"
+                   Height="150"/>
             <Grid x:Name="_aboutNavGrid_">
                 <Grid.RowDefinitions>
                     <RowDefinition Height="0"/>
@@ -72,24 +67,24 @@
                                 VerticalScrollBarVisibility="Hidden">
                     <StackPanel MaxWidth="500"
                                 Width="310">
-                        <TextBlock  Text="Ring version: 2017/2/13"
+                        <TextBlock  x:Name="_aboutVersionString_"
                                     TextWrapping="Wrap"
                                     TextAlignment="Justify"
-                                     Margin="0,0,0,24"
+                                    Margin="0,0,0,24"
                                     FontSize="12"
                                     FontWeight="Bold"
                                     HorizontalAlignment="Center"/>
-                        <TextBlock  Text="Release: Beta 2 - Gaston Miron"
+                        <TextBlock  x:Uid="_aboutReleaseTitle_"
                                     TextWrapping="Wrap"
                                     TextAlignment="Justify"
                                     FontSize="12"
                                     HorizontalAlignment="Center"/>
-                        <TextBlock  Text="The Microsoft Windows Runtime client for Ring."
+                        <TextBlock  x:Uid="_aboutReleasePlatform_"
                                     TextWrapping="Wrap"
                                     TextAlignment="Justify"
                                     FontSize="12"
                                     HorizontalAlignment="Center"/>
-                        <TextBlock  Text="Ring is a secured and distributed communication software."
+                        <TextBlock  x:Uid="_aboutReleaseDescription_"
                                     TextWrapping="Wrap"
                                     TextAlignment="Justify"
                                     FontSize="12"
@@ -104,29 +99,28 @@
                                     TextAlignment="Justify"
                                     FontSize="10"
                                     HorizontalAlignment="Center"/>
-                        <TextBlock  Text="This program comes with absolutely no warranty"
+                        <TextBlock  x:Uid="_aboutDisclaimer_"
                                     TextWrapping="Wrap"
                                     TextAlignment="Justify"
                                     FontSize="10"
                                     HorizontalAlignment="Center"/>
                         <StackPanel Orientation="Horizontal"
                                     HorizontalAlignment="Center">
-                            <TextBlock  Text="See the "
+                            <TextBlock  x:Uid="_aboutGPL_0_"
                                         Margin="0,0,4,0"
-                                    TextWrapping="Wrap"
-                                    TextAlignment="Justify"
-                                    FontSize="10"/>
-                            <HyperlinkButton    Content="GNU General Public License, version 3 or later"
-                                                FontSize="10"
-                                                NavigateUri="https://www.gnu.org/licenses/gpl-3.0.en.html">
+                                        TextWrapping="Wrap"
+                                        TextAlignment="Justify"
+                                        FontSize="10"/>
+                            <HyperlinkButton    x:Uid="_aboutGPL_1_"
+                                                FontSize="10">
                                 <HyperlinkButton.RenderTransform>
                                     <TranslateTransform Y="-6"/>
                                 </HyperlinkButton.RenderTransform>
                             </HyperlinkButton>
-                            <TextBlock  Text=" for details."
-                                    TextWrapping="Wrap"
-                                    TextAlignment="Justify"
-                                    FontSize="10"/>
+                            <TextBlock  x:Uid="_aboutGPL_2_"
+                                        TextWrapping="Wrap"
+                                        TextAlignment="Justify"
+                                        FontSize="10"/>
                         </StackPanel>
                     </StackPanel>
                 </ScrollViewer>
@@ -139,7 +133,7 @@
                                 BorderBrush="Black"
                                 BorderThickness="1">
                     <StackPanel>
-                        <TextBlock  Text="Created by:"
+                        <TextBlock  x:Uid="_c_created_by_"
                                     Margin="0,0,0,0"
                                     TextWrapping="Wrap"
                                     TextAlignment="Center"
@@ -151,7 +145,6 @@
                                 TextAlignment="Center"
                                 FontSize="12"
                                 HorizontalAlignment="Center">
-                            <LineBreak/>    Created by:
                             <LineBreak/>    Adrien Béraud
                             <LineBreak/>    Alexandr Sergheev
                             <LineBreak/>    Alexandre Lision
@@ -166,7 +159,9 @@
                             <LineBreak/>    Emmanuel Lepage-Vallée
                             <LineBreak/>    Frédéric Guimont
                             <LineBreak/>    Guillaume Roguez
+                            <LineBreak/>    Hadrien De Sousa
                             <LineBreak/>    Julien Grossholtz
+                            <LineBreak/>    Kateryna Kostiuk
                             <LineBreak/>    Loïc Siret
                             <LineBreak/>    Nicolas Jäger
                             <LineBreak/>    Nicolas Reynaud
@@ -175,13 +170,16 @@
                             <LineBreak/>    Patrick Keroulas
                             <LineBreak/>    Philippe Gorley
                             <LineBreak/>    Romain Bertozzi
+                            <LineBreak/>    Sébastien Blin
                             <LineBreak/>    Seva Ivanov
+                            <LineBreak/>    Silbino Gonçalves Matado
                             <LineBreak/>    Simon Désaulniers
                             <LineBreak/>    Stepan Salenikovich
                             <LineBreak/>    Simon Zeni
                             <LineBreak/>    Thibault Wittemberg
+                            <LineBreak/>
                         </TextBlock>
-                        <TextBlock  Text="Artwork by:"
+                        <TextBlock  x:Uid="_c_artwork_by_"
                                     Margin="0,0,0,0"
                                     TextWrapping="Wrap"
                                     TextAlignment="Center"
diff --git a/AboutPage.xaml.cpp b/AboutPage.xaml.cpp
index 32854ab08800528a92bb30f56fc0b5ed520b0c41..89b957c4deffdb970d4169846102f3c7584c8931 100644
--- a/AboutPage.xaml.cpp
+++ b/AboutPage.xaml.cpp
@@ -1,6 +1,5 @@
 /**************************************************************************
 * Copyright (C) 2016 by Savoir-faire Linux                                *
-* Author: J�ger Nicolas <nicolas.jager@savoirfairelinux.com>              *
 * Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com>          *
 *                                                                         *
 * This program is free software; you can redistribute it and/or modify    *
@@ -27,9 +26,64 @@ using namespace Windows::UI::ViewManagement;
 using namespace Windows::UI::Core;
 using namespace Windows::UI::Xaml::Controls;
 
+#define BUILD_YEAR_CH0 (__DATE__[ 7])
+#define BUILD_YEAR_CH1 (__DATE__[ 8])
+#define BUILD_YEAR_CH2 (__DATE__[ 9])
+#define BUILD_YEAR_CH3 (__DATE__[10])
+
+#define BUILD_MONTH_IS_JAN (__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n')
+#define BUILD_MONTH_IS_FEB (__DATE__[0] == 'F')
+#define BUILD_MONTH_IS_MAR (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r')
+#define BUILD_MONTH_IS_APR (__DATE__[0] == 'A' && __DATE__[1] == 'p')
+#define BUILD_MONTH_IS_MAY (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y')
+#define BUILD_MONTH_IS_JUN (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n')
+#define BUILD_MONTH_IS_JUL (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l')
+#define BUILD_MONTH_IS_AUG (__DATE__[0] == 'A' && __DATE__[1] == 'u')
+#define BUILD_MONTH_IS_SEP (__DATE__[0] == 'S')
+#define BUILD_MONTH_IS_OCT (__DATE__[0] == 'O')
+#define BUILD_MONTH_IS_NOV (__DATE__[0] == 'N')
+#define BUILD_MONTH_IS_DEC (__DATE__[0] == 'D')
+
+#define BUILD_MONTH_CH0 \
+    ((BUILD_MONTH_IS_OCT || BUILD_MONTH_IS_NOV || BUILD_MONTH_IS_DEC) ? '1' : '0')
+
+#define BUILD_MONTH_CH1 \
+    ( \
+        (BUILD_MONTH_IS_JAN) ? '1' : \
+        (BUILD_MONTH_IS_FEB) ? '2' : \
+        (BUILD_MONTH_IS_MAR) ? '3' : \
+        (BUILD_MONTH_IS_APR) ? '4' : \
+        (BUILD_MONTH_IS_MAY) ? '5' : \
+        (BUILD_MONTH_IS_JUN) ? '6' : \
+        (BUILD_MONTH_IS_JUL) ? '7' : \
+        (BUILD_MONTH_IS_AUG) ? '8' : \
+        (BUILD_MONTH_IS_SEP) ? '9' : \
+        (BUILD_MONTH_IS_OCT) ? '0' : \
+        (BUILD_MONTH_IS_NOV) ? '1' : \
+        (BUILD_MONTH_IS_DEC) ? '2' : \
+        /* error default */    '?' \
+    )
+
+#define BUILD_DAY_CH0 ((__DATE__[4] >= '0') ? (__DATE__[4]) : '0')
+#define BUILD_DAY_CH1 (__DATE__[ 5])
+
 AboutPage::AboutPage()
 {
     InitializeComponent();
+
+    const char completeVersion[] =
+    {
+        BUILD_YEAR_CH0, BUILD_YEAR_CH1, BUILD_YEAR_CH2, BUILD_YEAR_CH3,
+        '/',
+        BUILD_MONTH_CH0, BUILD_MONTH_CH1,
+        '/',
+        BUILD_DAY_CH0, BUILD_DAY_CH1,
+        '\0'
+    };
+    auto buildDate = std::string(reinterpret_cast<const char*>(completeVersion));
+    PackageVersion version = Package::Current->Id->Version;
+    auto buildVersion = version.Major.ToString() + "." + version.Minor.ToString() + "." + version.Build.ToString();
+    _aboutVersionString_->Text = "Ring version: " + Utils::toPlatformString(buildDate) + "  build: " + buildVersion;
 };
 
 void RingClientUWP::Views::AboutPage::_aboutBasicButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
@@ -50,4 +104,4 @@ void RingClientUWP::Views::AboutPage::_aboutCloseButton__Click(Platform::Object^
 {
     auto rootFrame = dynamic_cast<Windows::UI::Xaml::Controls::Frame^>(Window::Current->Content);
     rootFrame->Navigate(Windows::UI::Xaml::Interop::TypeName(MainPage::typeid), true);
-}
+}
\ No newline at end of file
diff --git a/Account.cpp b/Account.cpp
index 8f1df1e0b9ada345eeb67d46d2e4e92eefd93174..14268af2ace8eb576a2761e509bd9d126618562c 100644
--- a/Account.cpp
+++ b/Account.cpp
@@ -32,7 +32,13 @@ Account::Account(String^ name,
                  String^ accountType,
                  String^ accountID,
                  String^ deviceId,
+                 String^ deviceName,
+                 bool active,
                  bool upnpState,
+                 bool autoAnswer,
+                 bool dhtPublicInCalls,
+                 bool turnEnabled,
+                 String^ turnAddress,
                  String^ sipHostname,
                  String^ sipUsername,
                  String^ sipPassword)
@@ -42,11 +48,19 @@ Account::Account(String^ name,
     accountType_ = accountType;
     accountID_ = accountID;
     _deviceId = deviceId;
+    _deviceName = deviceName;
+    _active = active;
     _upnpState = upnpState;
+    _autoAnswer = autoAnswer;
+    _dhtPublicInCalls = dhtPublicInCalls;
+    _turnEnabled = turnEnabled;
+    _turnAddress = turnAddress;
     _sipHostname = sipHostname;
     _sipUsername = sipUsername;
     _sipPassword = sipPassword;
     _unreadMessages = 0;
+    _registrationState = RegistrationState::UNKNOWN;
+    _username = "";
 }
 
 void
@@ -59,4 +73,10 @@ Account::NotifyPropertyChanged(String^ propertyName)
     {
         PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName));
     }));
-}
\ No newline at end of file
+}
+
+void
+Account::raiseNotifyPropertyChanged(String^ propertyName)
+{
+    NotifyPropertyChanged(propertyName);
+}
diff --git a/Account.h b/Account.h
index 1c6f7798577921a08b184e2270d2e7aa680db3e5..3a905b96f3f3e9a3cd9b2cd83bf416115c144bcc 100644
--- a/Account.h
+++ b/Account.h
@@ -30,9 +30,23 @@ ref class Contact;
 public ref class Account sealed : public INotifyPropertyChanged
 {
 public:
-    Account(String^ name, String^ ringID, String^ accountType, String^ accountID, String^ deviceId, bool upnpState
-            , String^ sipHostname, String^ sipUsername, String^ sipPassword);
+    Account(String^ name,
+            String^ ringID,
+            String^ accountType,
+            String^ accountID,
+            String^ deviceId,
+            String^ deviceName,
+            bool active,
+            bool upnpState,
+            bool autoAnswer,
+            bool dhtPublicInCalls,
+            bool turnEnabled,
+            String^ turnAddress,
+            String^ sipHostname,
+            String^ sipUsername,
+            String^ sipPassword);
 
+    void raiseNotifyPropertyChanged(String^ propertyName);
     virtual event PropertyChangedEventHandler^ PropertyChanged;
 
     property String^ name_
@@ -43,8 +57,51 @@ public:
         void set(String^ value) {
             alias_ = value;
             NotifyPropertyChanged("name_");
+            NotifyPropertyChanged("_bestName");
         }
     }
+
+    property String^ _username
+    {
+        String^ get() {
+            return username_;
+        }
+        void set(String^ value) {
+            username_ = value;
+            NotifyPropertyChanged("_username");
+            NotifyPropertyChanged("_bestName");
+        }
+    }
+
+    property String^ _bestName {
+        String^ get() {
+            String^ bestName;
+            if (alias_)
+                bestName = alias_;
+            return bestName;
+        }
+    }
+
+    property String^ _bestName2 {
+        String^ get() {
+            String^ bestName;
+            if (accountType_ == "RING" && username_)
+                bestName += username_;
+            return bestName;
+        }
+    }
+
+    property String^ _bestName3 {
+        String^ get() {
+            String^ bestName;
+            if (alias_)
+                bestName += alias_;
+            if (accountType_ == "RING" && username_)
+                bestName += " (" + username_ + ")";
+            return bestName;
+        }
+    }
+
     property String^ ringID_ {
         String^ get() {
             return ringID__;
@@ -57,15 +114,16 @@ public:
     property String^ accountType_; // refacto : create a enum accountType
     property String^ accountID_;
     property String^ _deviceId;
-    property IVector<String^>^ _devicesIdList {
-        IVector<String^>^ get() {
-            return devicesIdList_;
-        }
-        void set(IVector<String^>^ value) {
-            devicesIdList_ = value;
-        }
-    };
+    property String^ _deviceName;
+
+    property RegistrationState _registrationState;
+
+    property bool _active;
     property bool _upnpState;
+    property bool _autoAnswer;
+    property bool _dhtPublicInCalls;
+    property bool _turnEnabled;
+    property String^ _turnAddress;
     property String^ _sipHostname;
     property String^ _sipUsername
     {
@@ -75,17 +133,35 @@ public:
         void set(String^ value) {
             sipUsername_ = value;
             NotifyPropertyChanged("_sipUsername");
+            NotifyPropertyChanged("_bestName");
         }
     }
 
-    property unsigned _unreadMessages
-    {
+    property unsigned _unreadMessages {
         unsigned get() {
             return unreadMessages_;
         }
         void set(unsigned value) {
             unreadMessages_ = value;
             NotifyPropertyChanged("_unreadMessages");
+            NotifyPropertyChanged("_allUnread");
+        }
+    }
+
+    property unsigned _unreadContactRequests {
+        unsigned get() {
+            return unreadContactRequests_;
+        }
+        void set(unsigned value) {
+            unreadContactRequests_ = value;
+            NotifyPropertyChanged("_unreadContactRequests");
+            NotifyPropertyChanged("_allUnread");
+        }
+    }
+
+    property unsigned _allUnread {
+        unsigned get() {
+            return unreadContactRequests_ + unreadMessages_;
         }
     }
 
@@ -104,13 +180,14 @@ protected:
     void NotifyPropertyChanged(String^ propertyName);
 
 private:
-    IVector<String^>^ devicesIdList_;
     IVector<Contact^>^ contactsList_;
 
     String^ alias_;
+    String^ username_;
     String^ ringID__;
     String^ sipUsername_;
     unsigned unreadMessages_;
+    unsigned unreadContactRequests_;
 };
 }
 
diff --git a/AccountListItem.cpp b/AccountListItem.cpp
index 2d20a89548cf1aafd91521282e79e323ebf6b1ae..3dfc21e3331abc9fb4a25af9e3ff09d2fccd51d8 100644
--- a/AccountListItem.cpp
+++ b/AccountListItem.cpp
@@ -33,7 +33,6 @@ AccountListItem::AccountListItem(Account^ a)
 {
     _account = a;
     _editionMode = false;
-
 }
 
 void
@@ -44,6 +43,13 @@ AccountListItem::NotifyPropertyChanged(String^ propertyName)
         CoreDispatcherPriority::High,
         ref new DispatchedHandler([this, propertyName]()
     {
+        //MSG_("AccountListItem::NotifyPropertyChanged: " + propertyName);
         PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName));
     }));
-}
\ No newline at end of file
+}
+
+void
+AccountListItem::raiseNotifyPropertyChanged(String^ propertyName)
+{
+    NotifyPropertyChanged(propertyName);
+}
diff --git a/AccountListItem.h b/AccountListItem.h
index b8a46da8b0a8e6ebe5beb368e9a43c0c32ed40fe..7f4e920eea377f0441dbea827ef07149fc12a1f9 100644
--- a/AccountListItem.h
+++ b/AccountListItem.h
@@ -1,4 +1,3 @@
-#pragma once
 /**************************************************************************
 * Copyright (C) 2016 by Savoir-faire Linux                                *
 * Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com>              *
@@ -17,6 +16,9 @@
 * 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
+
 using namespace Platform;
 using namespace Windows::Data::Json;
 using namespace Windows::UI::Xaml;
@@ -26,26 +28,32 @@ using namespace Windows::UI::Xaml::Data;
 
 namespace RingClientUWP
 {
-namespace Controls {
+namespace Controls
+{
+
 public ref class AccountListItem sealed : public INotifyPropertyChanged
 {
 public:
     AccountListItem(Account^ a);
 
+    void raiseNotifyPropertyChanged(String^ propertyName);
     virtual event PropertyChangedEventHandler^ PropertyChanged;
+
     property Account^ _account;
+
+    property bool _editionMode;
+    property bool _disconnected;
+
     property bool _isSelected {
+        bool get() {
+            return isSelected_;
+        }
         void set(bool value) {
             isSelected_ = value;
             if (!_disconnected)
                 NotifyPropertyChanged("_isSelected");
         }
-        bool get() {
-            return isSelected_;
-        }
     }
-    property bool _editionMode;
-    property bool _disconnected;
 
 protected:
     void NotifyPropertyChanged(String^ propertyName);
diff --git a/AccountListItemsViewModel.cpp b/AccountListItemsViewModel.cpp
index dc9a2b9e8f09d4d42d3e8555e8bbe502419a5459..89240067dc3f65ed95ad09cffc7277bc8f8715b3 100644
--- a/AccountListItemsViewModel.cpp
+++ b/AccountListItemsViewModel.cpp
@@ -42,7 +42,7 @@ AccountListItemsViewModel::AccountListItemsViewModel()
 void RingClientUWP::ViewModel::AccountListItemsViewModel::OnaccountAdded(RingClientUWP::Account ^account)
 {
     auto item = ref new AccountListItem(account);
-    itemsList_->Append(item);
+    itemsList_->InsertAt(0, item);
 }
 
 
@@ -54,7 +54,8 @@ void RingClientUWP::ViewModel::AccountListItemsViewModel::OnclearAccountsList()
 void
 AccountListItemsViewModel::updateContactsViewModel()
 {
-    SmartPanelItemsViewModel::instance->update();
+    SmartPanelItemsViewModel::instance->refreshFilteredItemsList();
+    SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem);
 }
 
 AccountListItem^
@@ -67,6 +68,17 @@ RingClientUWP::ViewModel::AccountListItemsViewModel::findItem(String^ accountId)
     return nullptr;
 }
 
+int
+AccountListItemsViewModel::getIndex(String^ accountId)
+{
+    int i;
+    for (i = 0; i < itemsList_->Size; i++) {
+        if (itemsList_->GetAt(i)->_account->accountID_ == accountId)
+            break;
+    }
+    return i;
+}
+
 void RingClientUWP::ViewModel::AccountListItemsViewModel::removeItem(AccountListItem ^ item)
 {
     unsigned int index;
@@ -96,3 +108,25 @@ AccountListItemsViewModel::unreadMessages()
     }
     return messageCount;
 }
+
+int
+AccountListItemsViewModel::unreadContactRequests()
+{
+    int unreadContactRequestCount = 0;
+    for each (auto account in AccountsViewModel::instance->accountsList) {
+        account->_unreadContactRequests = AccountsViewModel::instance->unreadContactRequests(account->accountID_);
+        unreadContactRequestCount += account->_unreadContactRequests;
+    }
+    return unreadContactRequestCount;
+}
+
+void
+AccountListItemsViewModel::update(const std::vector<std::string>& properties)
+{
+    for each (AccountListItem^ item in itemsList) {
+        item->raiseNotifyPropertyChanged("");
+        for each (std::string prop in properties) {
+            item->_account->raiseNotifyPropertyChanged(Utils::toPlatformString(prop));
+        }
+    }
+}
\ No newline at end of file
diff --git a/AccountListItemsViewModel.h b/AccountListItemsViewModel.h
index e6fa3ce93a9c11cd7f51e11d0ed53c0c5135f32f..48bdc3d53d8e94f275dbac79b715876e8e3565f8 100644
--- a/AccountListItemsViewModel.h
+++ b/AccountListItemsViewModel.h
@@ -34,6 +34,7 @@ public ref class AccountListItemsViewModel sealed
 public:
     String^ getSelectedAccountId();
     int unreadMessages();
+    int unreadContactRequests();
 
 internal:
     /* singleton */
@@ -47,26 +48,25 @@ internal:
     }
 
     /* functions */
+    void update(const std::vector<std::string>& properties);
     AccountListItem^ findItem(String^ accountId);
+    int getIndex(String^ accountId);
     void removeItem(AccountListItem^ item);
 
     /* properties */
     property Vector<AccountListItem^>^ itemsList
     {
-        Vector<AccountListItem^>^ get()
-        {
+        Vector<AccountListItem^>^ get() {
             return itemsList_;
         }
     }
 
     property AccountListItem^ _selectedItem
     {
-        AccountListItem^ get()
-        {
+        AccountListItem^ get() {
             return currentItem_;
         }
-        void set(AccountListItem^ value)
-        {
+        void set(AccountListItem^ value) {
             if (currentItem_)
                 currentItem_->_isSelected = false;
             currentItem_ = value;
diff --git a/AccountsViewModel.cpp b/AccountsViewModel.cpp
index e67dc28c9f9045b8522df0ec9c6f3926065907e0..f2be71fd0211d558c8f791a0cb16fbec0ddecd9f 100644
--- a/AccountsViewModel.cpp
+++ b/AccountsViewModel.cpp
@@ -37,61 +37,89 @@ AccountsViewModel::AccountsViewModel()
 }
 
 void
-AccountsViewModel::raiseContactAdded(String^ accountId, Contact ^ name)
+AccountsViewModel::raiseContactAdded(String^ accountId, Contact ^ contact)
 {
-    contactAdded(accountId, name);
+    contactAdded(accountId, contact);
 }
 
 void
-AccountsViewModel::raiseContactDeleted(String^ accountId, Contact ^ name)
+AccountsViewModel::raiseContactDeleted(String^ accountId, Contact ^ contact)
 {
-    contactDeleted(accountId, name);
+    contactDeleted(accountId, contact);
 }
 
 void
-AccountsViewModel::raiseContactDataModified(String^ accountId, Contact ^ name)
+AccountsViewModel::raiseContactDataModified(String^ accountId, Contact ^ contact)
 {
-    contactDataModified(accountId, name);
+    contactDataModified(accountId, contact);
 }
 
 void
-AccountsViewModel::addRingAccount(std::string& alias, std::string& ringID, std::string& accountID, std::string& deviceId, bool upnpState)
-{
-    auto account = ref new Account(
-                       Utils::toPlatformString(alias),
-                       Utils::toPlatformString(ringID),
-                       "RING",
-                       Utils::toPlatformString(accountID),
-                       Utils::toPlatformString(deviceId),
-                       upnpState,
-                       "" /* sip hostame not used woth ring account */,
-                       "" /* sip username not used with ring account */,
-                       "" /* sip password not used with ring */ );
-
-    accountsList_->Append(account);
+AccountsViewModel::raiseUnreadContactRequest()
+{
+    newUnreadContactRequest();
+}
+
+void
+AccountsViewModel::addRingAccount(  std::string& alias,
+                                    std::string& ringID,
+                                    std::string& accountID,
+                                    std::string& deviceId,
+                                    std::string& deviceName,
+                                    bool active,
+                                    bool upnpState,
+                                    bool autoAnswer,
+                                    bool dhtPublicInCalls,
+                                    bool turnEnabled,
+                                    std::string& turnAddress)
+{
+    auto account = ref new Account( Utils::toPlatformString(alias),
+                                    Utils::toPlatformString(ringID),
+                                    "RING",
+                                    Utils::toPlatformString(accountID),
+                                    Utils::toPlatformString(deviceId),
+                                    Utils::toPlatformString(deviceName),
+                                    active,
+                                    upnpState,
+                                    autoAnswer,
+                                    dhtPublicInCalls,
+                                    turnEnabled,
+                                    Utils::toPlatformString(turnAddress),
+                                    "" /* sip hostame not used with ring account */,
+                                    "" /* sip username not used with ring account */,
+                                    "" /* sip password not used with ring */ );
+    RingD::instance->lookUpAddress(accountID, Utils::toPlatformString(ringID));
+    accountsList_->InsertAt(0, account);
     contactListModels_->Insert(account->accountID_, ref new ContactListModel(account->accountID_));
-    updateScrollView();
     accountAdded(account);
 }
 
 void
-AccountsViewModel::addSipAccount(std::string& alias, std::string& accountID, std::string& sipHostname, std::string& sipUsername, std::string& sipPassword)
-{
-    auto account = ref new Account(
-                       Utils::toPlatformString(alias),
-                       "" /* ring Id not used with sip */ ,
-                       "SIP",
-                       Utils::toPlatformString(accountID),
-                       "" /* device id not used with sip */,
-                       false /* upnpn not used with sip */,
-                       Utils::toPlatformString(sipHostname),
-                       Utils::toPlatformString(sipUsername),
-                       Utils::toPlatformString(sipPassword)
-                   );
-
-    accountsList_->Append(account);
+AccountsViewModel::addSipAccount(   std::string& alias,
+                                    std::string& accountID,
+                                    bool active,
+                                    std::string& sipHostname,
+                                    std::string& sipUsername,
+                                    std::string& sipPassword)
+{
+    auto account = ref new Account( Utils::toPlatformString(alias),
+                                    "" /* ring Id not used with sip */ ,
+                                    "SIP",
+                                    Utils::toPlatformString(accountID),
+                                    "" /* device id not used with sip */,
+                                    "" /* device name not used with sip */,
+                                    active,
+                                    false /* upnpn not used with sip */,
+                                    false,
+                                    true,
+                                    false,
+                                    "",
+                                    Utils::toPlatformString(sipHostname),
+                                    Utils::toPlatformString(sipUsername),
+                                    Utils::toPlatformString(sipPassword));
+
+    accountsList_->InsertAt(0, account);
     contactListModels_->Insert(account->accountID_, ref new ContactListModel(account->accountID_));
-    updateScrollView();
     accountAdded(account);
 }
 
@@ -111,30 +139,77 @@ Account ^ RingClientUWP::ViewModel::AccountsViewModel::findItem(String ^ account
     return nullptr;
 }
 
+Account^
+AccountsViewModel::findAccountByRingID(String ^ ringId)
+{
+    for each (Account^ item in accountsList_)
+        if (item->ringID_ == ringId)
+            return item;
+
+    return nullptr;
+}
+
 ContactListModel^
 AccountsViewModel::getContactListModel(std::string& accountId)
 {
-    try {
+    if (contactListModels_->Size)
         return contactListModels_->Lookup(Utils::toPlatformString(accountId));
-    }
-    catch (Platform::OutOfBoundsException^ e) {
-        EXC_(e);
-        return nullptr;
-    }
+    return nullptr;
 }
 
 int
 AccountsViewModel::unreadMessages(String ^ accountId)
 {
     int messageCount = 0;
+    auto acceptIncognitoMessages = findItem(accountId)->_dhtPublicInCalls;
     if (auto contactListModel = getContactListModel(Utils::toString(accountId))) {
         for each (auto contact in contactListModel->_contactsList) {
-            messageCount += contact->_unreadMessages;
+            if (acceptIncognitoMessages || contact->_trustStatus == TrustStatus::TRUSTED)
+                messageCount += contact->_unreadMessages;
         }
     }
     return messageCount;
 }
 
+int
+AccountsViewModel::unreadContactRequests(String ^ accountId)
+{
+    int contactRequestCount = 0;
+    if (auto contactListModel = getContactListModel(Utils::toString(accountId))) {
+        for each (auto contact in contactListModel->_contactsList) {
+            if (contact->_trustStatus == TrustStatus::INCOMING_CONTACT_REQUEST) {
+                contactRequestCount += contact->_unreadContactRequest ? 1 : 0;
+            }
+        }
+    }
+    return contactRequestCount;
+}
+
+int
+AccountsViewModel::bannedContacts(String^ accountId)
+{
+    int bannedContacts = 0;
+    if (auto contactListModel = getContactListModel(Utils::toString(accountId))) {
+        for each (auto contact in contactListModel->_contactsList) {
+            if (contact->_trustStatus == TrustStatus::BLOCKED) {
+                bannedContacts++;
+            }
+        }
+    }
+    return bannedContacts;
+}
+
+int
+AccountsViewModel::activeAccounts()
+{
+    int totalActiveAccounts = 0;
+    for (auto account : accountsList_) {
+        if (account->_active)
+            totalActiveAccounts++;
+    }
+    return totalActiveAccounts;
+}
+
 void
 AccountsViewModel::OnincomingAccountMessage(String ^ accountId, String ^ fromRingId, String ^ payload)
 {
@@ -142,31 +217,37 @@ AccountsViewModel::OnincomingAccountMessage(String ^ accountId, String ^ fromRin
 
     auto contact = contactListModel->findContactByRingId(fromRingId);
 
-    if (contact == nullptr)
-        contact = contactListModel->addNewContact(fromRingId, fromRingId);
-
-    auto item = SmartPanelItemsViewModel::instance->_selectedItem;
+    bool itemSelected = false;
+    if (auto selectedItem = SmartPanelItemsViewModel::instance->_selectedItem)
+        itemSelected = (selectedItem->_contact == contact);
+    auto isInBackground = RingD::instance->isInBackground;
 
     if (contact == nullptr) {
-        ERR_("contact not handled!");
-        return;
+        contact = contactListModel->addNewContact(fromRingId, fromRingId, TrustStatus::UNKNOWN, true);
+        RingD::instance->lookUpAddress(Utils::toString(accountId), fromRingId);
+        if (!itemSelected || isInBackground || RingD::instance->isInvisible) {
+            RingD::instance->unpoppedToasts.insert(std::make_pair(contact->ringID_,
+                [isInBackground, fromRingId, payload](String^ username) {
+                RingD::instance->ShowIMToast(isInBackground, fromRingId, payload, username);
+            }));
+        }
+    }
+    else {
+        contact->_isIncognitoContact = true;
+        if (!itemSelected || isInBackground || RingD::instance->isInvisible) {
+            RingD::instance->ShowIMToast(isInBackground, fromRingId, payload);
+        }
     }
 
-    RingD::instance->lookUpAddress(fromRingId);
-
-    contact->_conversation->addMessage(""/* date not yet used*/, MSG_FROM_CONTACT, payload);
+    auto messageId = Utils::toPlatformString(Utils::genID(0LL, 9999999999999999999LL));
+    contact->_conversation->addMessage(MSG_FROM_CONTACT, payload, std::time(nullptr), false, messageId);
 
     /* save contacts conversation to disk */
     contact->saveConversationToFile();
 
+    auto item = SmartPanelItemsViewModel::instance->_selectedItem;
     auto selectedContact = (item) ? item->_contact : nullptr;
-
-    if (contact->ringID_ == fromRingId && contact != selectedContact) {
-        contact->_unreadMessages++;
-        newUnreadMessage();
-        /* saveContactsToFile used to save the notification */
-        contactListModel->saveContactsToFile();
-    }
+    newUnreadMessage(contact);
 }
 
 void
@@ -181,18 +262,14 @@ AccountsViewModel::OnincomingMessage(String ^callId, String ^payload)
     if (contact) {
         auto item = SmartPanelItemsViewModel::instance->_selectedItem;
 
-        contact->_conversation->addMessage(""/* date not yet used*/, MSG_FROM_CONTACT, payload);
+        auto messageId = Utils::toPlatformString(Utils::genID(0LL, 9999999999999999999LL));
+        contact->_conversation->addMessage(MSG_FROM_CONTACT, payload, std::time(nullptr), false, messageId);
 
         /* save contacts conversation to disk */
         contact->saveConversationToFile();
 
         auto selectedContact = (item) ? item->_contact : nullptr;
 
-        if (contact != selectedContact) {
-            contact->_unreadMessages++;
-            newUnreadMessage();
-            /* saveContactsToFile used to save the notification */
-            contactListModel->saveContactsToFile();
-        }
+        newUnreadMessage(contact);
     }
 }
\ No newline at end of file
diff --git a/AccountsViewModel.h b/AccountsViewModel.h
index 689af203ad68902ac039ed7a26b036115ab26727..171fb5af30e962f437f1a14269de90f24748c712 100644
--- a/AccountsViewModel.h
+++ b/AccountsViewModel.h
@@ -34,7 +34,8 @@ delegate void ClearAccountsList();
 delegate void ContactAdded(String^, Contact^);
 delegate void ContactDeleted(String^, Contact^);
 delegate void ContactDataModified(String^, Contact^);
-delegate void NewUnreadMessage();
+delegate void NewUnreadMessage(Contact^);
+delegate void NewUnreadContactRequest();
 
 namespace ViewModel
 {
@@ -42,9 +43,10 @@ namespace ViewModel
 public ref class AccountsViewModel sealed
 {
 public:
-    void raiseContactAdded(String^ accountId, Contact^ name);
-    void raiseContactDeleted(String^ accountId, Contact^ name);
-    void raiseContactDataModified(String^ accountId, Contact^ name);
+    void raiseContactAdded(String^ accountId, Contact^ contact);
+    void raiseContactDeleted(String^ accountId, Contact^ contact);
+    void raiseContactDataModified(String^ accountId, Contact^ contact);
+    void raiseUnreadContactRequest();
 
 internal:
     /* properties */
@@ -55,21 +57,38 @@ internal:
         }
     }
 
-    property Vector<Account^>^ accountsList
-    {
-        Vector<Account^>^ get()
-        {
+    property Vector<Account^>^ accountsList {
+        Vector<Account^>^ get() {
             return accountsList_;
         }
     }
 
     /* functions */
-    void addRingAccount(std::string& alias, std::string& ringID, std::string& accountID, std::string& deviceId, bool upnpState);
-    void addSipAccount(std::string& alias, std::string& accountID, std::string& sipHostname, std::string& sipUsername, std::string& sipPassword);
+    void addRingAccount(std::string& alias,
+                        std::string& ringID,
+                        std::string& accountID,
+                        std::string& deviceId,
+                        std::string& deviceName,
+                        bool active,
+                        bool upnpState,
+                        bool autoAnswer,
+                        bool dhtPublicInCalls,
+                        bool turnEnabled,
+                        std::string& turnAddress);
+    void addSipAccount( std::string& alias,
+                        std::string& accountID,
+                        bool active,
+                        std::string& sipHostname,
+                        std::string& sipUsername,
+                        std::string& sipPassword);
     void clearAccountList();
     Account^ findItem(String^ accountId);
+    Account^ findAccountByRingID(String ^ ringId);
     ContactListModel^ getContactListModel(std::string& accountId);
     int unreadMessages(String^ accountId);
+    int unreadContactRequests(String^ accountId);
+    int bannedContacts(String^ accountId);
+    int activeAccounts();
 
     /* events */
     event NewAccountSelected^ newAccountSelected;
@@ -81,6 +100,7 @@ internal:
     event ContactDeleted^ contactDeleted;
     event ContactDataModified^ contactDataModified;
     event NewUnreadMessage^ newUnreadMessage;
+    event NewUnreadContactRequest^ newUnreadContactRequest;
 
 private:
     AccountsViewModel();
diff --git a/App.xaml b/App.xaml
index be8ee4ff887f3bebffbb0811ac18679a0bc98a79..665c6c02218fb909e5ec2a95d13ded691cb71c48 100644
--- a/App.xaml
+++ b/App.xaml
@@ -19,14 +19,51 @@
     x:Class="RingClientUWP.App"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:local="using:RingClientUWP">
+    xmlns:local="using:RingClientUWP"
+    xmlns:views="using:RingClientUWP.Views"
+    xmlns:uc="using:RingClientUWP.UserAndCustomControls">
 
     <Application.Resources>
         <ResourceDictionary>
+            <!--  converters  -->
+            <views:BubbleBackground x:Key="_bubbleBackground_" />
+            <views:BubbleHorizontalAlignement x:Key="_bubbleHorizontalAlignement_" />
+            <views:boolToVisibility x:Key="_boolToVisibility_" />
+            <views:MessageDateTimeString x:Key="_MessageDateTimeString_" />
+            <views:MessageChainBreakToVisibility x:Key="_MessageChainBreakToVisibility_" />
+            <views:MessageChainBreakToHeight x:Key="_MessageChainBreakToHeight_" />
+            <views:CachedImageConverter x:Key="_CachedImageConverter_" />
+            <views:NameToInitialConverter x:Key="_NameToInitialConverter_" />
+            <views:NewMessageBubbleNotification x:Key="_NewMessageBubbleNotification_" />
+            <views:NewMessageNotificationToNumber x:Key="_NewMessageNotificationToNumber_" />
+            <views:IncomingVisibility x:Key="_IncomingVisibility_" />
+            <views:OutGoingVisibility x:Key="_OutGoingVisibility_" />
+            <views:HasAnActiveCall x:Key="_HasAnActiveCall_" />
+            <views:HasAvatarToVisibility x:Key="_HasAvatarToVisibility_" />
+            <views:AccountTypeToSourceImage x:Key="_AccountTypeToSourceImage_" />
+            <views:RingAccountTypeToVisibility x:Key="_RingAccountTypeToVisibility_" />
+            <views:AccountSelectedToVisibility x:Key="_AccountSelectedToVisibility_" />
+            <views:CollapseEmptyString x:Key="_CollapseEmptyString_" />
+            <views:ContactStatusNotification x:Key="_ContactStatusNotification_" />
+            <views:uintToVisibility x:Key="_uintToVisibility_" />
+            <views:OneToVisibility x:Key="_OneToVisibility_" />
+            <views:PresenceStatus x:Key="_PresenceStatus_" />
+            <views:MoreThanOneToVisibility x:Key="_MoreThanOneToVisibility_" />
+            <views:MoreThanZeroToVisibility x:Key="_MoreThanZeroToVisibility_" />
+            <views:UnreadAccountNotificationsString x:Key="_UnreadAccountNotificationsString_" />
+            <views:PartialTrustToVisibility x:Key="_PartialTrustToVisibility_" />
+            <views:TrustedToVisibility x:Key="_TrustedToVisibility_" />
+            <views:SelectedAccountToVisibility x:Key="_SelectedAccountToVisibility_" />
+            <views:CallStatusToSpinnerVisibility x:Key="_CallStatusToSpinnerVisibility_" />
+            <views:CallStatusForIncomingCallEllipse x:Key="_CallStatusForIncomingCallEllipse_" />
+            <views:AccountRegistrationStateToString x:Key="_AccountRegistrationStateToString_" />
+            <views:AccountRegistrationStateToForeground x:Key="_AccountRegistrationStateToForeground_" />
+            <views:ContactAccountTypeToVisibility x:Key="_ContactAccountTypeToVisibility_" />
+            <views:ContactConferenceableToVisibility x:Key="_ContactConferenceableToVisibility_" />
+
             <ResourceDictionary.MergedDictionaries>
                 <ResourceDictionary Source="ms-appx:///Styles.xaml"/>
             </ResourceDictionary.MergedDictionaries>
         </ResourceDictionary>
     </Application.Resources>
-
 </Application>
diff --git a/App.xaml.cpp b/App.xaml.cpp
index bd872ac919b4ec9525fe1771f34903b8e24d4b18..2efd6e8dcbcc406220422b8117a98d9f7992cc8b 100644
--- a/App.xaml.cpp
+++ b/App.xaml.cpp
@@ -49,36 +49,41 @@ App::App()
 void
 App::OnLaunched(LaunchActivatedEventArgs^ e)
 {
-    rootFrame = dynamic_cast<Frame^>(Window::Current->Content);
+    if (e->PreviousExecutionState != ApplicationExecutionState::Running) {
+        rootFrame = dynamic_cast<Frame^>(Window::Current->Content);
 
-    if (rootFrame == nullptr) {
-        rootFrame = ref new Frame();
+        if (rootFrame == nullptr) {
+            rootFrame = ref new Frame();
 
-        if (rootFrame->Content == nullptr)
-            rootFrame->Navigate(TypeName(Views::LoadingPage::typeid), e->Arguments);
+            if (rootFrame->Content == nullptr)
+                rootFrame->Navigate(TypeName(Views::LoadingPage::typeid), e->Arguments);
 
-        Window::Current->Content = rootFrame;
-    }
-    else {
-        rootFrame->Navigate(TypeName(Views::LoadingPage::typeid), e->Arguments);
-        Window::Current->Content = rootFrame;
+            Window::Current->Content = rootFrame;
+        }
+        else {
+            rootFrame->Navigate(TypeName(Views::LoadingPage::typeid), e->Arguments);
+            Window::Current->Content = rootFrame;
+        }
+
+        ApplicationView::GetForCurrentView()->SetPreferredMinSize(Size(400, 500));
+        Windows::UI::ViewManagement::ApplicationView::PreferredLaunchViewSize = Size(740, 500);
+        auto configFile = Utils::toString(ApplicationData::Current->LocalFolder->Path + "\\.config\\dring.yml");
+        if (Utils::fileExists(configFile)) {
+            Windows::UI::ViewManagement::ApplicationView::PreferredLaunchWindowingMode
+                = Windows::UI::ViewManagement::ApplicationViewWindowingMode::PreferredLaunchViewSize;
+        }
+
+        Window::Current->Activate();
+
+        auto color = Windows::UI::ColorHelper::FromArgb(255, 59, 193, 211);
+
+        ApplicationView::GetForCurrentView()->TitleBar->ButtonBackgroundColor = color;
+        ApplicationView::GetForCurrentView()->TitleBar->InactiveBackgroundColor = color;
+        ApplicationView::GetForCurrentView()->TitleBar->ButtonInactiveBackgroundColor = color;
+        ApplicationView::GetForCurrentView()->TitleBar->BackgroundColor = color;
+        ApplicationView::GetForCurrentView()->TitleBar->ForegroundColor = Colors::White;
+        ApplicationView::GetForCurrentView()->TitleBar->ButtonForegroundColor = Colors::White;
     }
-
-    ApplicationView::GetForCurrentView()->SetPreferredMinSize(Size(500, 500));
-    Windows::UI::ViewManagement::ApplicationView::PreferredLaunchViewSize = Size(800, 700);
-    Windows::UI::ViewManagement::ApplicationView::PreferredLaunchWindowingMode
-        = Windows::UI::ViewManagement::ApplicationViewWindowingMode::PreferredLaunchViewSize;
-
-    Window::Current->Activate();
-
-    auto color = Windows::UI::ColorHelper::FromArgb(255, 59, 193, 211);
-
-    ApplicationView::GetForCurrentView()->TitleBar->ButtonBackgroundColor = color;
-    ApplicationView::GetForCurrentView()->TitleBar->InactiveBackgroundColor = color;
-    ApplicationView::GetForCurrentView()->TitleBar->ButtonInactiveBackgroundColor = color;
-    ApplicationView::GetForCurrentView()->TitleBar->BackgroundColor = color;
-    ApplicationView::GetForCurrentView()->TitleBar->ForegroundColor = Colors::White;
-    ApplicationView::GetForCurrentView()->TitleBar->ButtonForegroundColor = Colors::White;
 }
 
 void App::OnsummonWizard()
@@ -103,7 +108,14 @@ void App::OnActivated(IActivatedEventArgs^ e)
     if (e->Kind == ActivationKind::ToastNotification) {
         auto toastArgs = safe_cast<ToastNotificationActivatedEventArgs^>(e);
         std::string args = Utils::toString(toastArgs->Argument);
-        if (!args.empty())
-            RingD::instance->acceptIncommingCall(Utils::toPlatformString(args));
+        /*if (toastArgs->UserInput->HasKey("message"))
+            MSG_(dynamic_cast<String^>(toastArgs->UserInput->Lookup("message")));*/
+        if (!args.empty()) {
+            auto callId = args.substr(2);
+            if (args[0] == 'a')
+                RingD::instance->acceptIncommingCall(Utils::toPlatformString(callId));
+            else if (args[0] == 'r')
+                RingD::instance->refuseIncommingCall(Utils::toPlatformString(callId));
+        }
     }
 }
\ No newline at end of file
diff --git a/Assets/AccountTypeRING.png b/Assets/AccountTypeRING.png
index 7d61ed6e6c47a40dd760dea611313c66983e06b7..642b26abcdd7235f6695c981fd82b39f15fdbabf 100644
Binary files a/Assets/AccountTypeRING.png and b/Assets/AccountTypeRING.png differ
diff --git a/Assets/AccountTypeSIP.png b/Assets/AccountTypeSIP.png
index 21464eaf7193e5d8a8172de53afb32b382e8dea6..b93c2c1f2e363f50283583a312ffbfbb3affaf4d 100644
Binary files a/Assets/AccountTypeSIP.png and b/Assets/AccountTypeSIP.png differ
diff --git a/Assets/SplashScreen.scale-200.png b/Assets/SplashScreen.scale-200.png
index 7c8f3778f7bb6126220ddb63ec4a14b3e7b7b6cf..203cc544fd3eef2007c1dccd08230283574c171d 100644
Binary files a/Assets/SplashScreen.scale-200.png and b/Assets/SplashScreen.scale-200.png differ
diff --git a/Assets/TESTS/contactAvatar.png b/Assets/TESTS/contactAvatar.png
index 7e27b806e064adf8dd333827c2d12d490d91b37a..164772baf347f6385300701a7bd68de67ab24860 100644
Binary files a/Assets/TESTS/contactAvatar.png and b/Assets/TESTS/contactAvatar.png differ
diff --git a/Assets/TESTS/logo-ring.scale-100.png b/Assets/TESTS/logo-ring.scale-100.png
index 20f60c73e3ddbf440537450c6bb7f8b733739a0e..a40b2b13068cbf410908e0e926f0797fb36f09ba 100644
Binary files a/Assets/TESTS/logo-ring.scale-100.png and b/Assets/TESTS/logo-ring.scale-100.png differ
diff --git a/Assets/TESTS/logo-ring.scale-125.png b/Assets/TESTS/logo-ring.scale-125.png
index 1382801a271706c4a3e1cd8433d17f390c1746f1..c91245ccfc730a1a802ec11034f3f62853c85636 100644
Binary files a/Assets/TESTS/logo-ring.scale-125.png and b/Assets/TESTS/logo-ring.scale-125.png differ
diff --git a/Assets/TESTS/logo-ring.scale-150.png b/Assets/TESTS/logo-ring.scale-150.png
index 0938201e2b8344e0705f87547bb4f8b99e047944..16aac16a4d8603daca22ec3827769ab5d407b6f8 100644
Binary files a/Assets/TESTS/logo-ring.scale-150.png and b/Assets/TESTS/logo-ring.scale-150.png differ
diff --git a/Assets/TESTS/logo-ring.scale-200.png b/Assets/TESTS/logo-ring.scale-200.png
index 9d991bd57fc51243b3ea07631702f2fc131a4e43..c6321f807d4cef50714547e1714eab2d97a21973 100644
Binary files a/Assets/TESTS/logo-ring.scale-200.png and b/Assets/TESTS/logo-ring.scale-200.png differ
diff --git a/Assets/TESTS/logo-ring.scale-400.png b/Assets/TESTS/logo-ring.scale-400.png
index ced77bd421a3feb7c78c83a8393e7f0aa41f62b5..f60d411aa8ccb557122f3a8fb721dbb0a2e351b1 100644
Binary files a/Assets/TESTS/logo-ring.scale-400.png and b/Assets/TESTS/logo-ring.scale-400.png differ
diff --git a/Assets/Wide310x150Logo.scale-200.png b/Assets/Wide310x150Logo.scale-200.png
index 0bf95e7a8bbf463dbb33a6587f44c8828159e645..335f943175547b7675fe042c5e766cb60f5af3c7 100644
Binary files a/Assets/Wide310x150Logo.scale-200.png and b/Assets/Wide310x150Logo.scale-200.png differ
diff --git a/Assets/angledGrid.png b/Assets/angledGrid.png
new file mode 100644
index 0000000000000000000000000000000000000000..5463c1d9a057e9e00e38f6de172625971a462837
Binary files /dev/null and b/Assets/angledGrid.png differ
diff --git a/Assets/grid.png b/Assets/grid.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1d4ba237b844ab0e3eb2415117ea26282b80d8f
Binary files /dev/null and b/Assets/grid.png differ
diff --git a/Assets/logo-ring-beta2-tagline-EN-couleur.svg b/Assets/logo-ring-beta2-tagline-EN-couleur.svg
deleted file mode 100644
index 28b124f19b06c04b5197fed13f5b516392593dc3..0000000000000000000000000000000000000000
--- a/Assets/logo-ring-beta2-tagline-EN-couleur.svg
+++ /dev/null
@@ -1,456 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="590.4px" height="216px" viewBox="0 0 590.4 216" enable-background="new 0 0 590.4 216" xml:space="preserve">
-<g>
-	<g>
-		
-			<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="23.376" y1="901.8262" x2="15.3598" y2="892.4739" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B5463"/>
-			<stop  offset="1" style="stop-color:#0B5463"/>
-		</linearGradient>
-		<polygon fill="url(#SVGID_1_)" points="102.813,103.89 115.141,103.466 108.976,115.113 		"/>
-		
-			<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="92.3765" y1="905.8604" x2="92.3765" y2="970.1398" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B5463"/>
-			<stop  offset="0.0704" style="stop-color:#0B6070"/>
-			<stop  offset="0.2165" style="stop-color:#0B7285"/>
-			<stop  offset="0.3608" style="stop-color:#0A7D91"/>
-			<stop  offset="0.5" style="stop-color:#0A8195"/>
-			<stop  offset="0.6392" style="stop-color:#0A7D91"/>
-			<stop  offset="0.7835" style="stop-color:#0B7285"/>
-			<stop  offset="0.9296" style="stop-color:#0B6070"/>
-			<stop  offset="1" style="stop-color:#0B5463"/>
-		</linearGradient>
-		<path fill="url(#SVGID_2_)" d="M156.308,106.82c45.552,7.381,52.088,18.776,52.088,18.776c0-0.002,0.111,1.146,0,2.107
-			c-0.055,0.482-0.242,0.842-0.372,1.141c-0.261,0.604-4.765,10.004-34.201,16.201L156.308,106.82z"/>
-		
-			<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-50.4458" y1="975.0215" x2="-29.5898" y2="937.8878" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#014251"/>
-			<stop  offset="0.0859" style="stop-color:#025262"/>
-			<stop  offset="0.2267" style="stop-color:#046676"/>
-			<stop  offset="0.3658" style="stop-color:#057183"/>
-			<stop  offset="0.5" style="stop-color:#057587"/>
-			<stop  offset="0.6342" style="stop-color:#057183"/>
-			<stop  offset="0.7733" style="stop-color:#046676"/>
-			<stop  offset="0.9141" style="stop-color:#025262"/>
-			<stop  offset="1" style="stop-color:#014251"/>
-		</linearGradient>
-		<path fill="url(#SVGID_3_)" d="M41.516,143.514c-10.369,27.344-5.049,36.055-4.692,36.596c0.181,0.271,0.349,0.668,0.755,0.934
-			c0.157,0.104,2.143-0.377,2.143-0.377s18.623-0.938,40.443-31.939L41.516,143.514z"/>
-		
-			<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="9.0864" y1="848.9443" x2="-25.4381" y2="808.6652" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0D283A"/>
-			<stop  offset="0.0284" style="stop-color:#0C3042"/>
-			<stop  offset="0.1353" style="stop-color:#0B495A"/>
-			<stop  offset="0.2468" style="stop-color:#0A5B6C"/>
-			<stop  offset="0.3647" style="stop-color:#0A6676"/>
-			<stop  offset="0.5" style="stop-color:#0A697A"/>
-			<stop  offset="0.6177" style="stop-color:#0A6070"/>
-			<stop  offset="0.8125" style="stop-color:#0B4758"/>
-			<stop  offset="1" style="stop-color:#0D283A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_4_)" d="M109.549,38.875C84.568,11.5,72.487,13.07,71.788,13.185c-0.35,0.059-0.69,0.072-1.158,0.311
-			c-0.832,0.426-1.77,3.182-1.77,3.182s-5.283,15.117,15.867,55.791L109.549,38.875z"/>
-		
-			<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="77.418" y1="979.4307" x2="50.7482" y2="893.5159" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0D283A"/>
-			<stop  offset="0.0284" style="stop-color:#0C3042"/>
-			<stop  offset="0.1353" style="stop-color:#0B495A"/>
-			<stop  offset="0.2468" style="stop-color:#0A5B6C"/>
-			<stop  offset="0.3647" style="stop-color:#0A6676"/>
-			<stop  offset="0.5" style="stop-color:#0A697A"/>
-			<stop  offset="0.6177" style="stop-color:#0A6070"/>
-			<stop  offset="0.8125" style="stop-color:#0B4758"/>
-			<stop  offset="1" style="stop-color:#0D283A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_5_)" d="M131.342,144.072c33.872,38.717,45.761,36.561,45.761,36.561s2.182,0.508,2.332,0.41
-			c0.405-0.266,0.572-0.662,0.753-0.934c0.482-0.73,10.052-16.422-22.444-72.979L131.342,144.072z"/>
-		
-			<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-41.9321" y1="905.8604" x2="-41.9321" y2="970.1382" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B5463"/>
-			<stop  offset="0.0704" style="stop-color:#0B6070"/>
-			<stop  offset="0.2165" style="stop-color:#0B7285"/>
-			<stop  offset="0.3608" style="stop-color:#0A7D91"/>
-			<stop  offset="0.5" style="stop-color:#0A8195"/>
-			<stop  offset="0.6392" style="stop-color:#0A7D91"/>
-			<stop  offset="0.7835" style="stop-color:#0B7285"/>
-			<stop  offset="0.9296" style="stop-color:#0B6070"/>
-			<stop  offset="1" style="stop-color:#0B5463"/>
-		</linearGradient>
-		<path fill="url(#SVGID_6_)" d="M87.52,150.014c-69.822-2.938-78.172-20.346-78.529-21.17c-0.109-0.25-0.417-0.746-0.371-1.141
-			c0.145-1.238,2.695-3.439,2.695-3.439s18.578-11.404,49.362-17.545L87.52,150.014z"/>
-		
-			<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-6.5659" y1="842.7871" x2="18.668" y2="842.7871" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B5463"/>
-			<stop  offset="1" style="stop-color:#0B5463"/>
-		</linearGradient>
-		<path opacity="0.4" fill="url(#SVGID_7_)" enable-background="new    " d="M107.614,36.783
-			c-6.985,7.438-15.034,17.199-24.18,30.008h1.784c5.405-6.887,18.892-23.848,23.45-28.838L107.614,36.783z"/>
-		
-			<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="26.7622" y1="869.4707" x2="26.7622" y2="808.8428" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#014251"/>
-			<stop  offset="0.5" style="stop-color:#057587"/>
-			<stop  offset="0.6934" style="stop-color:#057384"/>
-			<stop  offset="0.8038" style="stop-color:#056B7C"/>
-			<stop  offset="0.8932" style="stop-color:#035E6E"/>
-			<stop  offset="0.971" style="stop-color:#024B5B"/>
-			<stop  offset="1" style="stop-color:#014251"/>
-		</linearGradient>
-		<path fill="url(#SVGID_8_)" d="M135.817,68.23c18.261-43.152,11.11-53.051,11.11-53.051s-0.377-1.594-0.542-1.684
-			c-0.308-0.168-0.917-0.268-1.159-0.309c-0.884-0.148-19.868-2.605-60.008,53.604L135.817,68.23z"/>
-		
-			<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="-28.6187" y1="987.1406" x2="82.1423" y2="819.7172" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B879A"/>
-			<stop  offset="0.0824" style="stop-color:#379FB2"/>
-			<stop  offset="0.1675" style="stop-color:#5CB4C7"/>
-			<stop  offset="0.2527" style="stop-color:#79C5D7"/>
-			<stop  offset="0.337" style="stop-color:#8DD1E3"/>
-			<stop  offset="0.42" style="stop-color:#9AD8EA"/>
-			<stop  offset="0.5" style="stop-color:#9EDAEC"/>
-			<stop  offset="0.58" style="stop-color:#9AD8EA"/>
-			<stop  offset="0.663" style="stop-color:#8DD1E3"/>
-			<stop  offset="0.7473" style="stop-color:#79C5D7"/>
-			<stop  offset="0.8325" style="stop-color:#5CB4C7"/>
-			<stop  offset="0.9176" style="stop-color:#379FB2"/>
-			<stop  offset="1" style="stop-color:#0B879A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_9_)" d="M108.172,176.496c-24.74,26.969-36.709,25.414-37.406,25.299c-0.967-0.162-2.927-1.459-2.927-1.459
-			l-30.261-19.295C50.32,178.332,66,163.186,82.504,143.922L108.172,176.496z"/>
-		
-			<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="-38.5698" y1="990.498" x2="5.3" y2="951.2192" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#057B8F"/>
-			<stop  offset="0.0822" style="stop-color:#038DA1"/>
-			<stop  offset="0.1808" style="stop-color:#029AB0"/>
-			<stop  offset="0.3007" style="stop-color:#01A2B8"/>
-			<stop  offset="0.5" style="stop-color:#01A4BB"/>
-			<stop  offset="0.6993" style="stop-color:#01A2B8"/>
-			<stop  offset="0.8192" style="stop-color:#029AB0"/>
-			<stop  offset="0.9178" style="stop-color:#038DA1"/>
-			<stop  offset="1" style="stop-color:#057B8F"/>
-		</linearGradient>
-		<path fill="url(#SVGID_10_)" d="M109.192,177.518c-24.74,26.967-36.708,25.412-37.404,25.297
-			c-0.969-0.162-2.928-1.459-2.928-1.459l-31.281-20.312c12.742-2.709,29.441-16.834,45.945-36.1L109.192,177.518z"/>
-		
-			<linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="-42.4941" y1="818.5723" x2="59.365" y2="988.3375" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#057B8F"/>
-			<stop  offset="0.0176" style="stop-color:#0A8093"/>
-			<stop  offset="0.1407" style="stop-color:#279AAD"/>
-			<stop  offset="0.2631" style="stop-color:#3BAEBF"/>
-			<stop  offset="0.3837" style="stop-color:#48B9CA"/>
-			<stop  offset="0.5" style="stop-color:#4CBDCE"/>
-			<stop  offset="0.6163" style="stop-color:#48B9CA"/>
-			<stop  offset="0.7369" style="stop-color:#3BAEBF"/>
-			<stop  offset="0.8593" style="stop-color:#279AAD"/>
-			<stop  offset="0.9824" style="stop-color:#0A8093"/>
-			<stop  offset="1" style="stop-color:#057B8F"/>
-		</linearGradient>
-		<path fill="url(#SVGID_11_)" d="M43,72.677C32.01,44.38,37.481,35.419,37.844,34.87c0.541-0.818,2.524-2.08,2.524-2.08
-			l30.261-19.295c-2.627,12.354,4.059,31.447,14.324,53.541L43,72.677z"/>
-		
-			<linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="67.6885" y1="987.3125" x2="2.19" y2="904.8143" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#057B8F"/>
-			<stop  offset="0.0257" style="stop-color:#0A8093"/>
-			<stop  offset="0.2053" style="stop-color:#279AAD"/>
-			<stop  offset="0.384" style="stop-color:#3BAEBF"/>
-			<stop  offset="0.5599" style="stop-color:#48B9CA"/>
-			<stop  offset="0.7296" style="stop-color:#4CBDCE"/>
-			<stop  offset="0.7925" style="stop-color:#48B9CA"/>
-			<stop  offset="0.8577" style="stop-color:#3BAEBF"/>
-			<stop  offset="0.9239" style="stop-color:#279AAD"/>
-			<stop  offset="0.9905" style="stop-color:#0A8093"/>
-			<stop  offset="1" style="stop-color:#057B8F"/>
-		</linearGradient>
-		<path fill="url(#SVGID_12_)" d="M106.755,106.365c-15.667,0.17-31.37,1.221-45.417,3.326c0.451,0.944,7.535,12.603,12.601,20.399
-			c48.579,74.806,71.339,71.863,72.307,71.701c0.968-0.16,2.928-1.457,2.928-1.457l30.262-19.293
-			C158.819,176.66,130.159,143.062,106.755,106.365z"/>
-		
-			<linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="-26.9561" y1="860.165" x2="-39.709" y2="814.2545" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#057B8F"/>
-			<stop  offset="0.0822" style="stop-color:#038DA1"/>
-			<stop  offset="0.1808" style="stop-color:#029AB0"/>
-			<stop  offset="0.3007" style="stop-color:#01A2B8"/>
-			<stop  offset="0.5" style="stop-color:#01A4BB"/>
-			<stop  offset="0.6993" style="stop-color:#01A2B8"/>
-			<stop  offset="0.8192" style="stop-color:#029AB0"/>
-			<stop  offset="0.9178" style="stop-color:#038DA1"/>
-			<stop  offset="1" style="stop-color:#057B8F"/>
-		</linearGradient>
-		<path fill="url(#SVGID_13_)" d="M41.981,73.699c-10.99-28.299-5.519-37.26-5.157-37.809c0.542-0.816,2.524-2.08,2.524-2.08
-			l31.281-20.314c-2.627,12.354,3.038,32.469,13.303,54.561L41.981,73.699z"/>
-		
-			<linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="117.4731" y1="891.126" x2="-81.2289" y2="891.126" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B879A"/>
-			<stop  offset="0.0128" style="stop-color:#118B9E"/>
-			<stop  offset="0.1121" style="stop-color:#36A5BA"/>
-			<stop  offset="0.2115" style="stop-color:#53BAD0"/>
-			<stop  offset="0.3099" style="stop-color:#67C8E0"/>
-			<stop  offset="0.4066" style="stop-color:#74D1E9"/>
-			<stop  offset="0.5" style="stop-color:#78D4EC"/>
-			<stop  offset="0.5934" style="stop-color:#74D1E9"/>
-			<stop  offset="0.6901" style="stop-color:#67C8E0"/>
-			<stop  offset="0.7885" style="stop-color:#53BAD0"/>
-			<stop  offset="0.8879" style="stop-color:#36A5BA"/>
-			<stop  offset="0.9872" style="stop-color:#118B9E"/>
-			<stop  offset="1" style="stop-color:#0B879A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_14_)" d="M156.279,110.549c23.614,3.406,43.153,8.193,52.116,17.154V91.777c0,0,0.02-2.35-0.372-3.25
-			c-0.259-0.594-4.659-9.783-33.169-15.98L156.279,110.549z"/>
-		
-			<linearGradient id="SVGID_15_" gradientUnits="userSpaceOnUse" x1="60.5166" y1="888.2246" x2="117.3075" y2="891.2853" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#096F80"/>
-			<stop  offset="0.0061" style="stop-color:#097181"/>
-			<stop  offset="0.0912" style="stop-color:#0B8395"/>
-			<stop  offset="0.1876" style="stop-color:#0C8FA4"/>
-			<stop  offset="0.3049" style="stop-color:#0D97AC"/>
-			<stop  offset="0.5" style="stop-color:#0D99AF"/>
-			<stop  offset="0.6951" style="stop-color:#0D97AC"/>
-			<stop  offset="0.8124" style="stop-color:#0C8FA4"/>
-			<stop  offset="0.9088" style="stop-color:#0B8395"/>
-			<stop  offset="0.9939" style="stop-color:#097181"/>
-			<stop  offset="1" style="stop-color:#096F80"/>
-		</linearGradient>
-		<path fill="url(#SVGID_15_)" d="M156.279,109.178c23.614,3.406,43.153,9.564,52.116,18.525V90.406c0,0,0.02-2.35-0.372-3.25
-			c-0.259-0.594-4.659-9.783-33.169-15.98L156.279,109.178z"/>
-		
-			<linearGradient id="SVGID_16_" gradientUnits="userSpaceOnUse" x1="-81.3799" y1="888.3203" x2="21.0851" y2="888.3203" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B879A"/>
-			<stop  offset="0.0225" style="stop-color:#118B9E"/>
-			<stop  offset="0.1971" style="stop-color:#36A5BA"/>
-			<stop  offset="0.3718" style="stop-color:#53BAD0"/>
-			<stop  offset="0.5447" style="stop-color:#67C8E0"/>
-			<stop  offset="0.7147" style="stop-color:#74D1E9"/>
-			<stop  offset="0.8788" style="stop-color:#78D4EC"/>
-			<stop  offset="0.9015" style="stop-color:#74D1E9"/>
-			<stop  offset="0.9249" style="stop-color:#67C8E0"/>
-			<stop  offset="0.9487" style="stop-color:#53BAD0"/>
-			<stop  offset="0.9728" style="stop-color:#36A5BA"/>
-			<stop  offset="0.9969" style="stop-color:#118B9E"/>
-			<stop  offset="1" style="stop-color:#0B879A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_16_)" d="M134.862,67.619c-5.318-0.258-16.663-0.682-26.354-0.682c-89.197,0-99.124,20.689-99.517,21.59
-			c-0.391,0.9-0.371,3.25-0.371,3.25v35.926c8.678-8.678,27.775-13.406,50.98-16.885c14.048-2.105,29.596-3.254,45.263-3.424
-			c2.771-0.029,5.546-0.029,8.315,0C113.178,107.394,140.18,67.876,134.862,67.619z"/>
-		
-			<linearGradient id="SVGID_17_" gradientUnits="userSpaceOnUse" x1="-9.3242" y1="861.8027" x2="-47.8329" y2="856.3875" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B5463"/>
-			<stop  offset="1" style="stop-color:#0B5463"/>
-		</linearGradient>
-		<path opacity="0.2" fill="url(#SVGID_17_)" enable-background="new    " d="M83.947,64.845
-			c-18.644,0.945-32.06,2.318-43.277,5.354l0.536,1.471c1.021-0.166,2.295-0.514,3.332-0.67c12.669-1.9,26.317-3.637,40.416-3.963
-			L83.947,64.845z"/>
-		
-			<linearGradient id="SVGID_18_" gradientUnits="userSpaceOnUse" x1="29.8599" y1="894.7402" x2="-78.9636" y2="879.4369" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B879A"/>
-			<stop  offset="0.0382" style="stop-color:#1694A7"/>
-			<stop  offset="0.1177" style="stop-color:#26A8BA"/>
-			<stop  offset="0.2081" style="stop-color:#32B6C8"/>
-			<stop  offset="0.3177" style="stop-color:#39BED1"/>
-			<stop  offset="0.5" style="stop-color:#3BC1D3"/>
-			<stop  offset="0.6823" style="stop-color:#39BED1"/>
-			<stop  offset="0.7919" style="stop-color:#32B6C8"/>
-			<stop  offset="0.8823" style="stop-color:#26A8BA"/>
-			<stop  offset="0.9618" style="stop-color:#1694A7"/>
-			<stop  offset="1" style="stop-color:#0B879A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_18_)" d="M134.862,66.248c-5.318-0.258-16.663-0.682-26.354-0.682c-89.197,0-99.124,20.689-99.517,21.59
-			c-0.391,0.9-0.371,3.25-0.371,3.25v37.297c8.678-8.678,27.775-14.775,50.98-18.256c14.048-2.106,29.596-3.254,45.263-3.424
-			c2.771-0.029,5.546-0.029,8.315,0.002C113.178,106.025,140.18,66.505,134.862,66.248z"/>
-		
-			<linearGradient id="SVGID_19_" gradientUnits="userSpaceOnUse" x1="80.2974" y1="819.3965" x2="28.5478" y2="908.5208" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B879A"/>
-			<stop  offset="0.1238" style="stop-color:#379FB2"/>
-			<stop  offset="0.2516" style="stop-color:#5CB4C7"/>
-			<stop  offset="0.3797" style="stop-color:#79C5D7"/>
-			<stop  offset="0.5064" style="stop-color:#8DD1E3"/>
-			<stop  offset="0.631" style="stop-color:#9AD8EA"/>
-			<stop  offset="0.7513" style="stop-color:#9EDAEC"/>
-			<stop  offset="0.7911" style="stop-color:#9AD8EA"/>
-			<stop  offset="0.8324" style="stop-color:#8DD1E3"/>
-			<stop  offset="0.8743" style="stop-color:#79C5D7"/>
-			<stop  offset="0.9167" style="stop-color:#5CB4C7"/>
-			<stop  offset="0.959" style="stop-color:#379FB2"/>
-			<stop  offset="1" style="stop-color:#0B879A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_19_)" d="M108.502,109.08c24.314-36.528,42.304-74.786,37.882-95.584l30.262,19.293
-			c0,0,1.98,1.264,2.521,2.082c0.542,0.818,12.487,20.414-36.094,95.221c-3.575,5.504-6.885,11.99-8.103,12.592
-			C126.681,134.578,108.502,109.08,108.502,109.08z"/>
-		
-			<linearGradient id="SVGID_20_" gradientUnits="userSpaceOnUse" x1="86.8013" y1="864.2285" x2="67.9593" y2="899.5872" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B5463"/>
-			<stop  offset="1" style="stop-color:#0B5463"/>
-		</linearGradient>
-		<path opacity="0.25" fill="url(#SVGID_20_)" enable-background="new    " d="M175.734,71.333
-			c-5.28,12.918-11.025,25.32-19.455,39.147l2.229,0.424c9.653-16.59,15.203-28.776,18.983-39.131L175.734,71.333z"/>
-		
-			<linearGradient id="SVGID_21_" gradientUnits="userSpaceOnUse" x1="78.5996" y1="821.3535" x2="26.6853" y2="918.7758" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B879A"/>
-			<stop  offset="0.0382" style="stop-color:#1694A7"/>
-			<stop  offset="0.1177" style="stop-color:#26A8BA"/>
-			<stop  offset="0.2081" style="stop-color:#32B6C8"/>
-			<stop  offset="0.3177" style="stop-color:#39BED1"/>
-			<stop  offset="0.5" style="stop-color:#3BC1D3"/>
-			<stop  offset="0.6823" style="stop-color:#39BED1"/>
-			<stop  offset="0.7919" style="stop-color:#32B6C8"/>
-			<stop  offset="0.8823" style="stop-color:#26A8BA"/>
-			<stop  offset="0.9618" style="stop-color:#1694A7"/>
-			<stop  offset="1" style="stop-color:#0B879A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_21_)" d="M144.094,131.111c48.582-74.807,36.636-94.401,36.094-95.221c-0.541-0.816-2.521-2.08-2.521-2.08
-			l-31.282-20.314c4.396,20.678-12.935,60.498-37.042,96.872c8.118,12.356,16.496,24.437,25.324,34.678
-			C136.426,143.201,140.834,136.129,144.094,131.111z"/>
-		
-			<linearGradient id="SVGID_22_" gradientUnits="userSpaceOnUse" x1="82.6289" y1="823.5488" x2="30.2568" y2="921.8301" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B879A"/>
-			<stop  offset="0.0382" style="stop-color:#1694A7"/>
-			<stop  offset="0.1177" style="stop-color:#26A8BA"/>
-			<stop  offset="0.2081" style="stop-color:#32B6C8"/>
-			<stop  offset="0.3177" style="stop-color:#39BED1"/>
-			<stop  offset="0.5" style="stop-color:#3BC1D3"/>
-			<stop  offset="0.6823" style="stop-color:#39BED1"/>
-			<stop  offset="0.7919" style="stop-color:#32B6C8"/>
-			<stop  offset="0.8823" style="stop-color:#26A8BA"/>
-			<stop  offset="0.9618" style="stop-color:#1694A7"/>
-			<stop  offset="1" style="stop-color:#0B879A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_22_)" d="M133.788,146.396c0.107-0.057,0.26-0.195,0.43-0.375c-8.828-10.242-17.602-22.018-25.719-34.373
-			c-0.14,0.209-0.276,0.422-0.416,0.633C108.083,112.281,125.002,139.004,133.788,146.396z"/>
-		
-			<linearGradient id="SVGID_23_" gradientUnits="userSpaceOnUse" x1="-1.8975" y1="935.2969" x2="11.5351" y2="971.6878" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#0B5463"/>
-			<stop  offset="1" style="stop-color:#0B5463"/>
-		</linearGradient>
-		<path opacity="0.2" fill="url(#SVGID_23_)" enable-background="new    " d="M108.506,178.262
-			c-0.398-0.457-18.246-21.541-26.364-33.9l-1.325,1.512c10.186,14.547,19.059,25.396,26.666,33.479L108.506,178.262z"/>
-		
-			<linearGradient id="SVGID_24_" gradientUnits="userSpaceOnUse" x1="23.6108" y1="897.8691" x2="39.4245" y2="996.3225" gradientTransform="matrix(1 0 0 1 90 -791)">
-			<stop  offset="0" style="stop-color:#096F80"/>
-			<stop  offset="0.0244" style="stop-color:#107B8C"/>
-			<stop  offset="0.0888" style="stop-color:#2095A6"/>
-			<stop  offset="0.1599" style="stop-color:#2CA8BA"/>
-			<stop  offset="0.2403" style="stop-color:#34B6C8"/>
-			<stop  offset="0.3378" style="stop-color:#39BFD0"/>
-			<stop  offset="0.5" style="stop-color:#3BC1D3"/>
-			<stop  offset="0.6718" style="stop-color:#39BED1"/>
-			<stop  offset="0.7751" style="stop-color:#33B6C8"/>
-			<stop  offset="0.8603" style="stop-color:#28A8BA"/>
-			<stop  offset="0.9351" style="stop-color:#1894A7"/>
-			<stop  offset="1" style="stop-color:#057B8F"/>
-		</linearGradient>
-		<path fill="url(#SVGID_24_)" d="M134.217,146.021c-8.828-10.242-17.602-22.018-25.719-34.373
-			c-0.929-1.416-1.853-2.834-2.763-4.264c-15.667,0.17-31.37,1.221-45.418,3.325c0.451,0.947,7.536,12.603,12.601,20.399
-			c48.58,74.808,71.339,71.865,72.308,71.703c0.968-0.162,2.927-1.459,2.927-1.459l31.282-20.312
-			C166.633,178.32,150.338,164.723,134.217,146.021z"/>
-	</g>
-	<g>
-		<path fill="#535E5E" d="M343.781,154.282h22.16l-33.586-46.504l2.139-0.639c4.254-1.265,7.98-3.055,11.08-5.32
-			c3.074-2.248,5.531-4.83,7.293-7.666c1.795-2.877,3.125-5.902,3.955-8.993c0.832-3.106,1.254-6.431,1.254-9.878
-			c0-4.01-0.484-7.669-1.447-10.873c-0.945-3.176-2.166-5.828-3.621-7.88c-1.453-2.038-3.299-3.849-5.498-5.38
-			c-2.252-1.566-4.438-2.762-6.498-3.557c-2.09-0.805-4.531-1.46-7.26-1.945c-2.752-0.492-5.131-0.804-7.061-0.934
-			c-1.965-0.131-4.137-0.195-6.449-0.195h-46.498v109.764h16.861v-43.787h21.547L343.781,154.282z M290.605,95.221V59.71h23.754
-			c17.24,0,25.98,5.853,25.98,17.397c0,3.053-0.605,5.762-1.812,8.047c-1.199,2.288-2.759,4.109-4.627,5.412
-			c-1.812,1.27-4.143,2.271-6.91,2.976c-2.66,0.683-5.287,1.138-7.809,1.356c-2.465,0.215-5.344,0.322-8.559,0.322h-20.021v0.001
-			H290.605z"/>
-		<g>
-			<polygon fill="#535E5E" points="378.113,44.518 378.113,62.887 396.881,62.887 396.881,52.147 396.881,44.518 			"/>
-			<rect x="379.307" y="78.931" fill="#535E5E" width="16.383" height="75.351"/>
-		</g>
-		<path fill="#535E5E" d="M461.748,93.69c2.494,0.852,4.33,1.846,5.615,3.04c1.285,1.192,2.297,2.726,3.018,4.558
-			c0.689,1.75,1.098,3.199,1.252,4.435c0.141,1.169,0.209,2.528,0.209,4.05v44.51h16.383v-44.748c0-3.497-0.182-6.69-0.541-9.495
-			c-0.35-2.707-1.137-5.615-2.326-8.641c-1.16-2.93-2.73-5.377-4.682-7.275c-1.949-1.9-4.705-3.521-8.188-4.814
-			c-3.52-1.307-7.771-1.967-12.643-1.967c-9.117,0-19.146,2.309-29.812,6.865l-1.373,0.584l-2.93-5.86h-11.107v75.351h16.379V97.319
-			l1.014-0.391c7.73-2.971,14.875-4.475,21.238-4.475C456.48,92.454,459.338,92.866,461.748,93.69z"/>
-		<path fill="#535E5E" d="M570.332,187.288c2.246-2.07,4.096-4.261,5.494-6.511c1.41-2.269,2.59-4.778,3.498-7.461
-			c0.92-2.702,1.562-5.347,1.92-7.856c0.355-2.537,0.541-5.201,0.541-7.924V78.931h-11.994l-1.371,3.942l-1.555-0.646
-			c-7.771-3.243-15.076-4.886-21.725-4.886c-3.574,0-7.248,0.401-10.91,1.197c-3.633,0.785-7.42,2.182-11.254,4.15
-			c-3.811,1.955-7.219,4.412-10.141,7.306c-2.877,2.854-5.271,6.629-7.113,11.226c-1.852,4.606-2.789,9.864-2.789,15.624
-			c0,5.572,0.801,10.664,2.373,15.131c1.566,4.443,3.666,8.156,6.242,11.033c2.602,2.9,5.709,5.369,9.248,7.342
-			c3.561,1.982,7.264,3.41,11.021,4.25c9.814,2.188,20.922,1.555,31.471-2.211l2.115-0.756v2.963c0,2.865-0.184,5.523-0.537,7.902
-			c-0.365,2.445-1.17,5.014-2.396,7.627c-1.252,2.682-2.967,4.961-5.094,6.775c-2.115,1.799-5.016,3.291-8.613,4.438
-			c-3.561,1.129-7.803,1.703-12.604,1.703c-6.861,0-13.92-1.176-20.996-3.498l-1.848-0.674l-4.854,12.545l1.545,0.668
-			c8.832,3.439,18.32,5.195,28.143,5.195c5.01,0,9.648-0.434,13.785-1.279c4.111-0.844,7.688-2.002,10.629-3.447
-			C565.484,191.118,568.1,189.345,570.332,187.288z M564.355,138.841c-5.449,1.959-10.977,2.955-16.434,2.955
-			c-8.879,0-15.84-2.502-20.682-7.432c-4.834-4.916-7.287-11.27-7.287-18.869c0-7.321,2.432-13.26,7.229-17.661
-			c4.762-4.361,11.119-6.574,18.914-6.574c5.055,0,11.164,1.037,18.168,3.084l1.141,0.333v43.787L564.355,138.841z"/>
-	</g>
-	<path fill="#758283" d="M433.446,24.791h10.493c1.174,0,2.246,0.091,3.224,0.271c0.974,0.181,1.797,0.416,2.468,0.706
-		s1.271,0.639,1.791,1.046c0.522,0.406,0.938,0.819,1.239,1.238c0.303,0.42,0.552,0.865,0.745,1.336
-		c0.191,0.472,0.32,0.897,0.387,1.278s0.097,0.758,0.097,1.132c0,0.878-0.236,1.769-0.716,2.672
-		c-0.478,0.903-1.078,1.665-1.801,2.284c1.445,0.594,2.604,1.521,3.476,2.778c0.871,1.259,1.309,2.637,1.309,4.134
-		c0,0.426-0.042,0.861-0.126,1.307c-0.084,0.446-0.249,0.958-0.494,1.539c-0.245,0.581-0.564,1.133-0.958,1.655
-		c-0.396,0.522-0.926,1.042-1.597,1.559c-0.674,0.516-1.446,0.958-2.323,1.326c-0.878,0.367-1.959,0.668-3.243,0.899
-		c-1.284,0.232-2.694,0.349-4.229,0.349h-9.737V24.791H433.446z M442.836,28.895h-4.511v7.627c2.8-0.063,4.756-0.193,5.865-0.387
-		c2.685-0.49,4.115-1.606,4.298-3.35c0.013-0.142,0.02-0.283,0.02-0.426c0-0.413-0.07-0.797-0.213-1.151
-		c-0.142-0.355-0.396-0.72-0.765-1.094c-0.367-0.374-0.952-0.671-1.752-0.891C444.979,29.004,443.997,28.895,442.836,28.895z
-		 M443.146,39.62c-0.104,0-1.712,0.071-4.82,0.213v7.977h4.336c0.517,0,0.959-0.003,1.326-0.01c0.367-0.006,0.875-0.035,1.521-0.087
-		c0.646-0.052,1.2-0.126,1.664-0.223c0.465-0.097,0.977-0.242,1.53-0.436c0.555-0.193,1.003-0.426,1.345-0.697
-		s0.633-0.616,0.871-1.035c0.239-0.42,0.358-0.896,0.358-1.423c0-1.33-0.732-2.375-2.197-3.137
-		C447.614,40,445.636,39.62,443.146,39.62z"/>
-	<path fill="#758283" d="M460.621,52.3V24.79h19.302v4.491h-14.401v6.602h13.338v4.492h-13.338v7.434h14.401V52.3H460.621z"/>
-	<path fill="#758283" d="M484.271,24.791h24.855v4.491h-9.989V52.3h-4.879V29.282h-9.989L484.271,24.791L484.271,24.791z"/>
-	<path fill="#758283" d="M519.071,24.791h5.344l10.88,27.51h-5.015l-3.078-7.201h-11.229l-3.077,7.201h-4.725L519.071,24.791z
-		 M525.499,40.626l-3.911-10.202l-3.93,10.202H525.499z"/>
-	<path fill="#D12828" d="M551.295,48.571c0.76-2.221,1.76-4.299,3.003-6.234c1.244-1.935,2.543-3.578,3.9-4.927
-		c1.356-1.347,2.775-2.604,4.257-3.771c1.479-1.166,2.875-2.181,4.187-3.045c1.311-0.863,2.494-1.68,3.56-2.449
-		c1.062-0.768,1.906-1.526,2.533-2.277c0.626-0.749,0.938-1.494,0.938-2.235c0-1.481-0.887-2.777-2.661-3.887
-		c-1.773-1.11-3.942-1.665-6.505-1.665c-3.113,0-6.882,0.758-11.304,2.276l-1.081,0.371l-2.191-5.865l1.025-0.455
-		c4.457-1.897,9.327-2.847,14.604-2.847c4.744,0,8.514,1.029,11.304,3.09c2.789,2.059,4.187,4.644,4.187,7.757
-		c0,1.347-0.271,2.609-0.812,3.785c-0.541,1.179-1.28,2.24-2.223,3.19c-0.939,0.95-1.99,1.869-3.158,2.761
-		c-1.167,0.894-2.421,1.817-3.761,2.777c-1.335,0.957-2.632,1.935-3.886,2.931c-1.254,0.997-2.482,2.178-3.687,3.545
-		c-1.205,1.367-2.206,2.799-3.003,4.299h21.266V52.3h-30.489v-3.729H551.295z"/>
-</g>
-<g>
-	<path fill="#758283" d="M289.526,195.816l-2.072-5.764h-7.933l-2.029,5.764h-3.576l7.763-20.832h3.689l7.762,20.832H289.526z
-		 M286.56,187.131l-1.943-5.646c-0.143-0.379-0.339-0.977-0.589-1.789c-0.251-0.812-0.424-1.408-0.519-1.787
-		c-0.255,1.164-0.629,2.436-1.121,3.816l-1.873,5.406H286.56z"/>
-	<path fill="#758283" d="M311.904,184.562h7.635v10.416c-1.249,0.404-2.447,0.693-3.597,0.863c-1.15,0.172-2.395,0.258-3.729,0.258
-		c-3.141,0-5.562-0.932-7.266-2.789c-1.703-1.857-2.557-4.48-2.557-7.867c0-3.342,0.959-5.953,2.881-7.842
-		c1.923-1.889,4.563-2.832,7.935-2.832c2.167,0,4.22,0.416,6.159,1.25l-1.192,2.822c-1.684-0.773-3.368-1.162-5.052-1.162
-		c-2.214,0-3.964,0.693-5.251,2.086c-1.286,1.391-1.933,3.291-1.933,5.703c0,2.535,0.581,4.465,1.738,5.781
-		c1.159,1.32,2.826,1.98,5.003,1.98c1.1,0,2.271-0.141,3.521-0.412v-5.352h-4.3L311.904,184.562L311.904,184.562z"/>
-	<path fill="#758283" d="M341.805,195.816h-4.155l-10.203-16.533h-0.113l0.07,0.922c0.133,1.76,0.196,3.369,0.196,4.826v10.785
-		h-3.078v-20.748h4.114l10.175,16.447h0.085c-0.02-0.219-0.057-1.012-0.11-2.377c-0.061-1.367-0.086-2.436-0.086-3.199v-10.871
-		h3.105V195.816L341.805,195.816z"/>
-	<path fill="#758283" d="M363.546,175.068v13.426c0,1.531-0.329,2.873-0.986,4.021c-0.655,1.146-1.605,2.033-2.853,2.652
-		c-1.244,0.619-2.732,0.932-4.463,0.932c-2.574,0-4.574-0.684-6.003-2.043c-1.429-1.363-2.146-3.236-2.146-5.619v-13.369h3.405
-		v13.127c0,1.715,0.397,2.977,1.192,3.789s2.015,1.223,3.66,1.223c3.195,0,4.798-1.682,4.798-5.037v-13.102H363.546L363.546,175.068
-		z"/>
-	<path fill="#758283" d="M384.008,196.1c-1.983,0-3.525-0.717-4.626-2.146h-0.198c0.135,1.326,0.198,2.129,0.198,2.414v6.428h-3.335
-		v-22.676h2.696c0.076,0.293,0.229,0.992,0.469,2.104h0.17c1.041-1.592,2.604-2.387,4.687-2.387c1.958,0,3.48,0.709,4.573,2.129
-		c1.096,1.42,1.642,3.41,1.642,5.977c0,2.562-0.559,4.562-1.667,6.002C387.501,195.381,385.967,196.1,384.008,196.1z
-		 M383.199,182.561c-1.324,0-2.292,0.389-2.902,1.164c-0.609,0.773-0.915,2.016-0.915,3.719v0.496c0,1.91,0.303,3.295,0.908,4.15
-		c0.604,0.854,1.594,1.283,2.966,1.283c1.154,0,2.044-0.475,2.668-1.42s0.938-2.295,0.938-4.045c0-1.76-0.312-3.09-0.933-3.994
-		C385.312,183.012,384.4,182.561,383.199,182.561z"/>
-	<path fill="#758283" d="M402.115,179.836c0.672,0,1.226,0.047,1.661,0.143l-0.327,3.105c-0.476-0.111-0.965-0.17-1.479-0.17
-		c-1.334,0-2.415,0.438-3.239,1.309c-0.828,0.869-1.242,2-1.242,3.393v8.201h-3.335v-15.695h2.608l0.44,2.77h0.17
-		c0.521-0.939,1.199-1.682,2.036-2.23C400.25,180.111,401.15,179.836,402.115,179.836z"/>
-	<path fill="#758283" d="M420.025,187.939c0,2.561-0.658,4.562-1.976,6.004c-1.312,1.438-3.146,2.156-5.492,2.156
-		c-1.467,0-2.763-0.332-3.889-0.994s-1.991-1.611-2.597-2.854c-0.606-1.238-0.908-2.678-0.908-4.312
-		c0-2.545,0.653-4.531,1.959-5.961c1.305-1.43,3.146-2.145,5.52-2.145c2.271,0,4.068,0.73,5.396,2.193
-		C419.362,183.49,420.025,185.459,420.025,187.939z M408.602,187.939c0,3.623,1.342,5.436,4.019,5.436
-		c2.646,0,3.974-1.811,3.974-5.436c0-3.586-1.334-5.379-4.002-5.379c-1.397,0-2.415,0.465-3.044,1.393
-		C408.916,184.879,408.602,186.207,408.602,187.939z"/>
-	<path fill="#758283" d="M422.252,202.797c-1.003,0-1.835-0.117-2.497-0.354v-2.641c0.646,0.172,1.301,0.256,1.973,0.256
-		c1.422,0,2.131-0.805,2.131-2.41v-17.527h3.335v17.752c0,1.619-0.427,2.844-1.271,3.676
-		C425.073,202.381,423.851,202.797,422.252,202.797z M423.657,175.963c0-0.598,0.163-1.057,0.489-1.379
-		c0.323-0.318,0.791-0.48,1.396-0.48c0.586,0,1.043,0.162,1.369,0.48c0.326,0.322,0.489,0.781,0.489,1.379
-		c0,0.566-0.163,1.016-0.489,1.342c-0.326,0.324-0.783,0.486-1.369,0.486c-0.604,0-1.072-0.162-1.396-0.486
-		C423.82,176.979,423.657,176.531,423.657,175.963z"/>
-	<path fill="#758283" d="M438.812,196.1c-2.439,0-4.352-0.713-5.728-2.137c-1.377-1.426-2.063-3.387-2.063-5.885
-		c0-2.562,0.64-4.578,1.914-6.045c1.277-1.465,3.032-2.199,5.268-2.199c2.072,0,3.709,0.631,4.91,1.889
-		c1.201,1.26,1.802,2.99,1.802,5.193v1.803h-10.458c0.047,1.521,0.459,2.693,1.234,3.514c0.772,0.818,1.865,1.229,3.275,1.229
-		c0.93,0,1.79-0.088,2.59-0.264c0.802-0.176,1.657-0.467,2.575-0.873v2.711c-0.812,0.389-1.637,0.662-2.469,0.822
-		C440.833,196.018,439.883,196.1,438.812,196.1z M438.203,182.363c-1.062,0-1.908,0.336-2.547,1.008
-		c-0.642,0.672-1.021,1.65-1.146,2.939h7.124c-0.02-1.297-0.332-2.277-0.937-2.943C440.096,182.697,439.263,182.363,438.203,182.363
-		z"/>
-	<path fill="#758283" d="M455.033,196.1c-2.374,0-4.182-0.693-5.413-2.08c-1.235-1.387-1.854-3.375-1.854-5.969
-		c0-2.641,0.646-4.668,1.938-6.088c1.291-1.42,3.157-2.129,5.598-2.129c1.656,0,3.146,0.311,4.474,0.924l-1.011,2.684
-		c-1.407-0.549-2.57-0.822-3.488-0.822c-2.718,0-4.072,1.801-4.072,5.406c0,1.76,0.338,3.082,1.015,3.967
-		c0.676,0.885,1.667,1.326,2.976,1.326c1.482,0,2.891-0.369,4.215-1.107v2.91c-0.599,0.352-1.232,0.602-1.909,0.752
-		C456.819,196.023,455.998,196.1,455.033,196.1z"/>
-	<path fill="#758283" d="M468.94,193.404c0.812,0,1.627-0.129,2.438-0.385v2.512c-0.369,0.162-0.845,0.297-1.427,0.404
-		s-1.188,0.164-1.812,0.164c-3.156,0-4.736-1.666-4.736-4.996v-8.457h-2.146v-1.479l2.299-1.221l1.138-3.32h2.058v3.49h4.471v2.525
-		h-4.471v8.398c0,0.807,0.201,1.398,0.604,1.781C467.761,193.207,468.288,193.404,468.94,193.404z"/>
-</g>
-</svg>
diff --git a/Assets/logo-ring.svg b/Assets/logo-ring.svg
deleted file mode 100644
index df2f84b8d7db207dc830dd81a32259af3aa8057b..0000000000000000000000000000000000000000
--- a/Assets/logo-ring.svg
+++ /dev/null
@@ -1,944 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   id="Calque_1"
-   x="0px"
-   y="0px"
-   width="216"
-   height="216"
-   viewBox="0 0 215.99999 216"
-   enable-background="new 0 0 590.4 216"
-   xml:space="preserve"
-   inkscape:version="0.91 r13725"
-   sodipodi:docname="logo-ring.svg"><metadata
-     id="metadata3885"><rdf:RDF><cc:Work
-         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
-     id="defs3883" /><sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1536"
-     inkscape:window-height="811"
-     id="namedview3881"
-     showgrid="false"
-     inkscape:zoom="2.339092"
-     inkscape:cx="295.20001"
-     inkscape:cy="108"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="g3337" /><g
-     id="g3337"><g
-       id="g3339"><linearGradient
-         id="SVGID_1_"
-         gradientUnits="userSpaceOnUse"
-         x1="23.375999"
-         y1="901.82617"
-         x2="15.3598"
-         y2="892.47388"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B5463"
-           id="stop3342" /><stop
-           offset="1"
-           style="stop-color:#0B5463"
-           id="stop3344" /></linearGradient><polygon
-         points="102.813,103.89 115.141,103.466 108.976,115.113 "
-         id="polygon3346"
-         style="fill:url(#SVGID_1_)" /><linearGradient
-         id="SVGID_2_"
-         gradientUnits="userSpaceOnUse"
-         x1="92.376503"
-         y1="905.86041"
-         x2="92.376503"
-         y2="970.13977"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B5463"
-           id="stop3349" /><stop
-           offset="0.0704"
-           style="stop-color:#0B6070"
-           id="stop3351" /><stop
-           offset="0.2165"
-           style="stop-color:#0B7285"
-           id="stop3353" /><stop
-           offset="0.3608"
-           style="stop-color:#0A7D91"
-           id="stop3355" /><stop
-           offset="0.5"
-           style="stop-color:#0A8195"
-           id="stop3357" /><stop
-           offset="0.6392"
-           style="stop-color:#0A7D91"
-           id="stop3359" /><stop
-           offset="0.7835"
-           style="stop-color:#0B7285"
-           id="stop3361" /><stop
-           offset="0.9296"
-           style="stop-color:#0B6070"
-           id="stop3363" /><stop
-           offset="1"
-           style="stop-color:#0B5463"
-           id="stop3365" /></linearGradient><path
-         d="m 156.308,106.82 c 45.552,7.381 52.088,18.776 52.088,18.776 0,-0.002 0.111,1.146 0,2.107 -0.055,0.482 -0.242,0.842 -0.372,1.141 -0.261,0.604 -4.765,10.004 -34.201,16.201 L 156.308,106.82 Z"
-         id="path3367"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_2_)" /><linearGradient
-         id="SVGID_3_"
-         gradientUnits="userSpaceOnUse"
-         x1="-50.445801"
-         y1="975.02148"
-         x2="-29.5898"
-         y2="937.88782"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#014251"
-           id="stop3370" /><stop
-           offset="0.0859"
-           style="stop-color:#025262"
-           id="stop3372" /><stop
-           offset="0.2267"
-           style="stop-color:#046676"
-           id="stop3374" /><stop
-           offset="0.3658"
-           style="stop-color:#057183"
-           id="stop3376" /><stop
-           offset="0.5"
-           style="stop-color:#057587"
-           id="stop3378" /><stop
-           offset="0.6342"
-           style="stop-color:#057183"
-           id="stop3380" /><stop
-           offset="0.7733"
-           style="stop-color:#046676"
-           id="stop3382" /><stop
-           offset="0.9141"
-           style="stop-color:#025262"
-           id="stop3384" /><stop
-           offset="1"
-           style="stop-color:#014251"
-           id="stop3386" /></linearGradient><path
-         d="m 41.516,143.514 c -10.369,27.344 -5.049,36.055 -4.692,36.596 0.181,0.271 0.349,0.668 0.755,0.934 0.157,0.104 2.143,-0.377 2.143,-0.377 0,0 18.623,-0.938 40.443,-31.939 l -38.649,-5.214 z"
-         id="path3388"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_3_)" /><linearGradient
-         id="SVGID_4_"
-         gradientUnits="userSpaceOnUse"
-         x1="9.0864"
-         y1="848.94427"
-         x2="-25.438101"
-         y2="808.66522"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0D283A"
-           id="stop3391" /><stop
-           offset="0.0284"
-           style="stop-color:#0C3042"
-           id="stop3393" /><stop
-           offset="0.1353"
-           style="stop-color:#0B495A"
-           id="stop3395" /><stop
-           offset="0.2468"
-           style="stop-color:#0A5B6C"
-           id="stop3397" /><stop
-           offset="0.3647"
-           style="stop-color:#0A6676"
-           id="stop3399" /><stop
-           offset="0.5"
-           style="stop-color:#0A697A"
-           id="stop3401" /><stop
-           offset="0.6177"
-           style="stop-color:#0A6070"
-           id="stop3403" /><stop
-           offset="0.8125"
-           style="stop-color:#0B4758"
-           id="stop3405" /><stop
-           offset="1"
-           style="stop-color:#0D283A"
-           id="stop3407" /></linearGradient><path
-         d="M 109.549,38.875 C 84.568,11.5 72.487,13.07 71.788,13.185 c -0.35,0.059 -0.69,0.072 -1.158,0.311 -0.832,0.426 -1.77,3.182 -1.77,3.182 0,0 -5.283,15.117 15.867,55.791 l 24.822,-33.594 z"
-         id="path3409"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_4_)" /><linearGradient
-         id="SVGID_5_"
-         gradientUnits="userSpaceOnUse"
-         x1="77.417999"
-         y1="979.43073"
-         x2="50.748199"
-         y2="893.51593"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0D283A"
-           id="stop3412" /><stop
-           offset="0.0284"
-           style="stop-color:#0C3042"
-           id="stop3414" /><stop
-           offset="0.1353"
-           style="stop-color:#0B495A"
-           id="stop3416" /><stop
-           offset="0.2468"
-           style="stop-color:#0A5B6C"
-           id="stop3418" /><stop
-           offset="0.3647"
-           style="stop-color:#0A6676"
-           id="stop3420" /><stop
-           offset="0.5"
-           style="stop-color:#0A697A"
-           id="stop3422" /><stop
-           offset="0.6177"
-           style="stop-color:#0A6070"
-           id="stop3424" /><stop
-           offset="0.8125"
-           style="stop-color:#0B4758"
-           id="stop3426" /><stop
-           offset="1"
-           style="stop-color:#0D283A"
-           id="stop3428" /></linearGradient><path
-         d="m 131.342,144.072 c 33.872,38.717 45.761,36.561 45.761,36.561 0,0 2.182,0.508 2.332,0.41 0.405,-0.266 0.572,-0.662 0.753,-0.934 0.482,-0.73 10.052,-16.422 -22.444,-72.979 l -26.402,36.942 z"
-         id="path3430"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_5_)" /><linearGradient
-         id="SVGID_6_"
-         gradientUnits="userSpaceOnUse"
-         x1="-41.932098"
-         y1="905.86041"
-         x2="-41.932098"
-         y2="970.13818"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B5463"
-           id="stop3433" /><stop
-           offset="0.0704"
-           style="stop-color:#0B6070"
-           id="stop3435" /><stop
-           offset="0.2165"
-           style="stop-color:#0B7285"
-           id="stop3437" /><stop
-           offset="0.3608"
-           style="stop-color:#0A7D91"
-           id="stop3439" /><stop
-           offset="0.5"
-           style="stop-color:#0A8195"
-           id="stop3441" /><stop
-           offset="0.6392"
-           style="stop-color:#0A7D91"
-           id="stop3443" /><stop
-           offset="0.7835"
-           style="stop-color:#0B7285"
-           id="stop3445" /><stop
-           offset="0.9296"
-           style="stop-color:#0B6070"
-           id="stop3447" /><stop
-           offset="1"
-           style="stop-color:#0B5463"
-           id="stop3449" /></linearGradient><path
-         d="M 87.52,150.014 C 17.698,147.076 9.348,129.668 8.991,128.844 c -0.109,-0.25 -0.417,-0.746 -0.371,-1.141 0.145,-1.238 2.695,-3.439 2.695,-3.439 0,0 18.578,-11.404 49.362,-17.545 l 26.843,43.295 z"
-         id="path3451"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_6_)" /><linearGradient
-         id="SVGID_7_"
-         gradientUnits="userSpaceOnUse"
-         x1="-6.5658998"
-         y1="842.78711"
-         x2="18.667999"
-         y2="842.78711"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B5463"
-           id="stop3454" /><stop
-           offset="1"
-           style="stop-color:#0B5463"
-           id="stop3456" /></linearGradient><path
-         enable-background="new    "
-         d="m 107.614,36.783 c -6.985,7.438 -15.034,17.199 -24.18,30.008 l 1.784,0 c 5.405,-6.887 18.892,-23.848 23.45,-28.838 l -1.054,-1.17 z"
-         id="path3458"
-         inkscape:connector-curvature="0"
-         style="opacity:0.4;fill:url(#SVGID_7_)" /><linearGradient
-         id="SVGID_8_"
-         gradientUnits="userSpaceOnUse"
-         x1="26.762199"
-         y1="869.4707"
-         x2="26.762199"
-         y2="808.84277"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#014251"
-           id="stop3461" /><stop
-           offset="0.5"
-           style="stop-color:#057587"
-           id="stop3463" /><stop
-           offset="0.6934"
-           style="stop-color:#057384"
-           id="stop3465" /><stop
-           offset="0.8038"
-           style="stop-color:#056B7C"
-           id="stop3467" /><stop
-           offset="0.8932"
-           style="stop-color:#035E6E"
-           id="stop3469" /><stop
-           offset="0.971"
-           style="stop-color:#024B5B"
-           id="stop3471" /><stop
-           offset="1"
-           style="stop-color:#014251"
-           id="stop3473" /></linearGradient><path
-         d="m 135.817,68.23 c 18.261,-43.152 11.11,-53.051 11.11,-53.051 0,0 -0.377,-1.594 -0.542,-1.684 -0.308,-0.168 -0.917,-0.268 -1.159,-0.309 -0.884,-0.148 -19.868,-2.605 -60.008,53.604 l 50.599,1.44 z"
-         id="path3475"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_8_)" /><linearGradient
-         id="SVGID_9_"
-         gradientUnits="userSpaceOnUse"
-         x1="-28.6187"
-         y1="987.14062"
-         x2="82.142303"
-         y2="819.71722"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B879A"
-           id="stop3478" /><stop
-           offset="0.0824"
-           style="stop-color:#379FB2"
-           id="stop3480" /><stop
-           offset="0.1675"
-           style="stop-color:#5CB4C7"
-           id="stop3482" /><stop
-           offset="0.2527"
-           style="stop-color:#79C5D7"
-           id="stop3484" /><stop
-           offset="0.337"
-           style="stop-color:#8DD1E3"
-           id="stop3486" /><stop
-           offset="0.42"
-           style="stop-color:#9AD8EA"
-           id="stop3488" /><stop
-           offset="0.5"
-           style="stop-color:#9EDAEC"
-           id="stop3490" /><stop
-           offset="0.58"
-           style="stop-color:#9AD8EA"
-           id="stop3492" /><stop
-           offset="0.663"
-           style="stop-color:#8DD1E3"
-           id="stop3494" /><stop
-           offset="0.7473"
-           style="stop-color:#79C5D7"
-           id="stop3496" /><stop
-           offset="0.8325"
-           style="stop-color:#5CB4C7"
-           id="stop3498" /><stop
-           offset="0.9176"
-           style="stop-color:#379FB2"
-           id="stop3500" /><stop
-           offset="1"
-           style="stop-color:#0B879A"
-           id="stop3502" /></linearGradient><path
-         d="m 108.172,176.496 c -24.74,26.969 -36.709,25.414 -37.406,25.299 -0.967,-0.162 -2.927,-1.459 -2.927,-1.459 L 37.578,181.041 C 50.32,178.332 66,163.186 82.504,143.922 l 25.668,32.574 z"
-         id="path3504"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_9_)" /><linearGradient
-         id="SVGID_10_"
-         gradientUnits="userSpaceOnUse"
-         x1="-38.569801"
-         y1="990.49799"
-         x2="5.3000002"
-         y2="951.21918"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#057B8F"
-           id="stop3507" /><stop
-           offset="0.0822"
-           style="stop-color:#038DA1"
-           id="stop3509" /><stop
-           offset="0.1808"
-           style="stop-color:#029AB0"
-           id="stop3511" /><stop
-           offset="0.3007"
-           style="stop-color:#01A2B8"
-           id="stop3513" /><stop
-           offset="0.5"
-           style="stop-color:#01A4BB"
-           id="stop3515" /><stop
-           offset="0.6993"
-           style="stop-color:#01A2B8"
-           id="stop3517" /><stop
-           offset="0.8192"
-           style="stop-color:#029AB0"
-           id="stop3519" /><stop
-           offset="0.9178"
-           style="stop-color:#038DA1"
-           id="stop3521" /><stop
-           offset="1"
-           style="stop-color:#057B8F"
-           id="stop3523" /></linearGradient><path
-         d="m 109.192,177.518 c -24.74,26.967 -36.708,25.412 -37.404,25.297 -0.969,-0.162 -2.928,-1.459 -2.928,-1.459 L 37.579,181.044 c 12.742,-2.709 29.441,-16.834 45.945,-36.1 l 25.668,32.574 z"
-         id="path3525"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_10_)" /><linearGradient
-         id="SVGID_11_"
-         gradientUnits="userSpaceOnUse"
-         x1="-42.494099"
-         y1="818.57233"
-         x2="59.365002"
-         y2="988.33752"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#057B8F"
-           id="stop3528" /><stop
-           offset="0.0176"
-           style="stop-color:#0A8093"
-           id="stop3530" /><stop
-           offset="0.1407"
-           style="stop-color:#279AAD"
-           id="stop3532" /><stop
-           offset="0.2631"
-           style="stop-color:#3BAEBF"
-           id="stop3534" /><stop
-           offset="0.3837"
-           style="stop-color:#48B9CA"
-           id="stop3536" /><stop
-           offset="0.5"
-           style="stop-color:#4CBDCE"
-           id="stop3538" /><stop
-           offset="0.6163"
-           style="stop-color:#48B9CA"
-           id="stop3540" /><stop
-           offset="0.7369"
-           style="stop-color:#3BAEBF"
-           id="stop3542" /><stop
-           offset="0.8593"
-           style="stop-color:#279AAD"
-           id="stop3544" /><stop
-           offset="0.9824"
-           style="stop-color:#0A8093"
-           id="stop3546" /><stop
-           offset="1"
-           style="stop-color:#057B8F"
-           id="stop3548" /></linearGradient><path
-         d="M 43,72.677 C 32.01,44.38 37.481,35.419 37.844,34.87 c 0.541,-0.818 2.524,-2.08 2.524,-2.08 L 70.629,13.495 c -2.627,12.354 4.059,31.447 14.324,53.541 L 43,72.677 Z"
-         id="path3550"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_11_)" /><linearGradient
-         id="SVGID_12_"
-         gradientUnits="userSpaceOnUse"
-         x1="67.688499"
-         y1="987.3125"
-         x2="2.1900001"
-         y2="904.81427"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#057B8F"
-           id="stop3553" /><stop
-           offset="0.0257"
-           style="stop-color:#0A8093"
-           id="stop3555" /><stop
-           offset="0.2053"
-           style="stop-color:#279AAD"
-           id="stop3557" /><stop
-           offset="0.384"
-           style="stop-color:#3BAEBF"
-           id="stop3559" /><stop
-           offset="0.5599"
-           style="stop-color:#48B9CA"
-           id="stop3561" /><stop
-           offset="0.7296"
-           style="stop-color:#4CBDCE"
-           id="stop3563" /><stop
-           offset="0.7925"
-           style="stop-color:#48B9CA"
-           id="stop3565" /><stop
-           offset="0.8577"
-           style="stop-color:#3BAEBF"
-           id="stop3567" /><stop
-           offset="0.9239"
-           style="stop-color:#279AAD"
-           id="stop3569" /><stop
-           offset="0.9905"
-           style="stop-color:#0A8093"
-           id="stop3571" /><stop
-           offset="1"
-           style="stop-color:#057B8F"
-           id="stop3573" /></linearGradient><path
-         d="m 106.755,106.365 c -15.667,0.17 -31.37,1.221 -45.417,3.326 0.451,0.944 7.535,12.603 12.601,20.399 48.579,74.806 71.339,71.863 72.307,71.701 0.968,-0.16 2.928,-1.457 2.928,-1.457 l 30.262,-19.293 c -20.617,-4.381 -49.277,-37.979 -72.681,-74.676 z"
-         id="path3575"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_12_)" /><linearGradient
-         id="SVGID_13_"
-         gradientUnits="userSpaceOnUse"
-         x1="-26.9561"
-         y1="860.16498"
-         x2="-39.709"
-         y2="814.25452"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#057B8F"
-           id="stop3578" /><stop
-           offset="0.0822"
-           style="stop-color:#038DA1"
-           id="stop3580" /><stop
-           offset="0.1808"
-           style="stop-color:#029AB0"
-           id="stop3582" /><stop
-           offset="0.3007"
-           style="stop-color:#01A2B8"
-           id="stop3584" /><stop
-           offset="0.5"
-           style="stop-color:#01A4BB"
-           id="stop3586" /><stop
-           offset="0.6993"
-           style="stop-color:#01A2B8"
-           id="stop3588" /><stop
-           offset="0.8192"
-           style="stop-color:#029AB0"
-           id="stop3590" /><stop
-           offset="0.9178"
-           style="stop-color:#038DA1"
-           id="stop3592" /><stop
-           offset="1"
-           style="stop-color:#057B8F"
-           id="stop3594" /></linearGradient><path
-         d="M 41.981,73.699 C 30.991,45.4 36.462,36.439 36.824,35.89 c 0.542,-0.816 2.524,-2.08 2.524,-2.08 L 70.629,13.496 c -2.627,12.354 3.038,32.469 13.303,54.561 l -41.951,5.642 z"
-         id="path3596"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_13_)" /><linearGradient
-         id="SVGID_14_"
-         gradientUnits="userSpaceOnUse"
-         x1="117.4731"
-         y1="891.12598"
-         x2="-81.228897"
-         y2="891.12598"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B879A"
-           id="stop3599" /><stop
-           offset="0.0128"
-           style="stop-color:#118B9E"
-           id="stop3601" /><stop
-           offset="0.1121"
-           style="stop-color:#36A5BA"
-           id="stop3603" /><stop
-           offset="0.2115"
-           style="stop-color:#53BAD0"
-           id="stop3605" /><stop
-           offset="0.3099"
-           style="stop-color:#67C8E0"
-           id="stop3607" /><stop
-           offset="0.4066"
-           style="stop-color:#74D1E9"
-           id="stop3609" /><stop
-           offset="0.5"
-           style="stop-color:#78D4EC"
-           id="stop3611" /><stop
-           offset="0.5934"
-           style="stop-color:#74D1E9"
-           id="stop3613" /><stop
-           offset="0.6901"
-           style="stop-color:#67C8E0"
-           id="stop3615" /><stop
-           offset="0.7885"
-           style="stop-color:#53BAD0"
-           id="stop3617" /><stop
-           offset="0.8879"
-           style="stop-color:#36A5BA"
-           id="stop3619" /><stop
-           offset="0.9872"
-           style="stop-color:#118B9E"
-           id="stop3621" /><stop
-           offset="1"
-           style="stop-color:#0B879A"
-           id="stop3623" /></linearGradient><path
-         d="m 156.279,110.549 c 23.614,3.406 43.153,8.193 52.116,17.154 l 0,-35.926 c 0,0 0.02,-2.35 -0.372,-3.25 -0.259,-0.594 -4.659,-9.783 -33.169,-15.98 l -18.575,38.002 z"
-         id="path3625"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_14_)" /><linearGradient
-         id="SVGID_15_"
-         gradientUnits="userSpaceOnUse"
-         x1="60.516602"
-         y1="888.22461"
-         x2="117.3075"
-         y2="891.28528"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#096F80"
-           id="stop3628" /><stop
-           offset="0.0061"
-           style="stop-color:#097181"
-           id="stop3630" /><stop
-           offset="0.0912"
-           style="stop-color:#0B8395"
-           id="stop3632" /><stop
-           offset="0.1876"
-           style="stop-color:#0C8FA4"
-           id="stop3634" /><stop
-           offset="0.3049"
-           style="stop-color:#0D97AC"
-           id="stop3636" /><stop
-           offset="0.5"
-           style="stop-color:#0D99AF"
-           id="stop3638" /><stop
-           offset="0.6951"
-           style="stop-color:#0D97AC"
-           id="stop3640" /><stop
-           offset="0.8124"
-           style="stop-color:#0C8FA4"
-           id="stop3642" /><stop
-           offset="0.9088"
-           style="stop-color:#0B8395"
-           id="stop3644" /><stop
-           offset="0.9939"
-           style="stop-color:#097181"
-           id="stop3646" /><stop
-           offset="1"
-           style="stop-color:#096F80"
-           id="stop3648" /></linearGradient><path
-         d="m 156.279,109.178 c 23.614,3.406 43.153,9.564 52.116,18.525 l 0,-37.297 c 0,0 0.02,-2.35 -0.372,-3.25 -0.259,-0.594 -4.659,-9.783 -33.169,-15.98 l -18.575,38.002 z"
-         id="path3650"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_15_)" /><linearGradient
-         id="SVGID_16_"
-         gradientUnits="userSpaceOnUse"
-         x1="-81.379898"
-         y1="888.32031"
-         x2="21.0851"
-         y2="888.32031"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B879A"
-           id="stop3653" /><stop
-           offset="0.0225"
-           style="stop-color:#118B9E"
-           id="stop3655" /><stop
-           offset="0.1971"
-           style="stop-color:#36A5BA"
-           id="stop3657" /><stop
-           offset="0.3718"
-           style="stop-color:#53BAD0"
-           id="stop3659" /><stop
-           offset="0.5447"
-           style="stop-color:#67C8E0"
-           id="stop3661" /><stop
-           offset="0.7147"
-           style="stop-color:#74D1E9"
-           id="stop3663" /><stop
-           offset="0.8788"
-           style="stop-color:#78D4EC"
-           id="stop3665" /><stop
-           offset="0.9015"
-           style="stop-color:#74D1E9"
-           id="stop3667" /><stop
-           offset="0.9249"
-           style="stop-color:#67C8E0"
-           id="stop3669" /><stop
-           offset="0.9487"
-           style="stop-color:#53BAD0"
-           id="stop3671" /><stop
-           offset="0.9728"
-           style="stop-color:#36A5BA"
-           id="stop3673" /><stop
-           offset="0.9969"
-           style="stop-color:#118B9E"
-           id="stop3675" /><stop
-           offset="1"
-           style="stop-color:#0B879A"
-           id="stop3677" /></linearGradient><path
-         d="m 134.862,67.619 c -5.318,-0.258 -16.663,-0.682 -26.354,-0.682 -89.197,0 -99.124,20.689 -99.517,21.59 -0.391,0.9 -0.371,3.25 -0.371,3.25 l 0,35.926 c 8.678,-8.678 27.775,-13.406 50.98,-16.885 14.048,-2.105 29.596,-3.254 45.263,-3.424 2.771,-0.029 5.546,-0.029 8.315,0 0,0 27.002,-39.518 21.684,-39.775 z"
-         id="path3679"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_16_)" /><linearGradient
-         id="SVGID_17_"
-         gradientUnits="userSpaceOnUse"
-         x1="-9.3241997"
-         y1="861.80267"
-         x2="-47.832901"
-         y2="856.38751"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B5463"
-           id="stop3682" /><stop
-           offset="1"
-           style="stop-color:#0B5463"
-           id="stop3684" /></linearGradient><path
-         enable-background="new    "
-         d="M 83.947,64.845 C 65.303,65.79 51.887,67.163 40.67,70.199 l 0.536,1.471 c 1.021,-0.166 2.295,-0.514 3.332,-0.67 12.669,-1.9 26.317,-3.637 40.416,-3.963 l -1.007,-2.192 z"
-         id="path3686"
-         inkscape:connector-curvature="0"
-         style="opacity:0.2;fill:url(#SVGID_17_)" /><linearGradient
-         id="SVGID_18_"
-         gradientUnits="userSpaceOnUse"
-         x1="29.8599"
-         y1="894.74017"
-         x2="-78.9636"
-         y2="879.43689"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B879A"
-           id="stop3689" /><stop
-           offset="0.0382"
-           style="stop-color:#1694A7"
-           id="stop3691" /><stop
-           offset="0.1177"
-           style="stop-color:#26A8BA"
-           id="stop3693" /><stop
-           offset="0.2081"
-           style="stop-color:#32B6C8"
-           id="stop3695" /><stop
-           offset="0.3177"
-           style="stop-color:#39BED1"
-           id="stop3697" /><stop
-           offset="0.5"
-           style="stop-color:#3BC1D3"
-           id="stop3699" /><stop
-           offset="0.6823"
-           style="stop-color:#39BED1"
-           id="stop3701" /><stop
-           offset="0.7919"
-           style="stop-color:#32B6C8"
-           id="stop3703" /><stop
-           offset="0.8823"
-           style="stop-color:#26A8BA"
-           id="stop3705" /><stop
-           offset="0.9618"
-           style="stop-color:#1694A7"
-           id="stop3707" /><stop
-           offset="1"
-           style="stop-color:#0B879A"
-           id="stop3709" /></linearGradient><path
-         d="m 134.862,66.248 c -5.318,-0.258 -16.663,-0.682 -26.354,-0.682 -89.197,0 -99.124,20.689 -99.517,21.59 -0.391,0.9 -0.371,3.25 -0.371,3.25 l 0,37.297 c 8.678,-8.678 27.775,-14.775 50.98,-18.256 14.048,-2.106 29.596,-3.254 45.263,-3.424 2.771,-0.029 5.546,-0.029 8.315,0.002 0,0 27.002,-39.52 21.684,-39.777 z"
-         id="path3711"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_18_)" /><linearGradient
-         id="SVGID_19_"
-         gradientUnits="userSpaceOnUse"
-         x1="80.297401"
-         y1="819.39648"
-         x2="28.5478"
-         y2="908.52081"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B879A"
-           id="stop3714" /><stop
-           offset="0.1238"
-           style="stop-color:#379FB2"
-           id="stop3716" /><stop
-           offset="0.2516"
-           style="stop-color:#5CB4C7"
-           id="stop3718" /><stop
-           offset="0.3797"
-           style="stop-color:#79C5D7"
-           id="stop3720" /><stop
-           offset="0.5064"
-           style="stop-color:#8DD1E3"
-           id="stop3722" /><stop
-           offset="0.631"
-           style="stop-color:#9AD8EA"
-           id="stop3724" /><stop
-           offset="0.7513"
-           style="stop-color:#9EDAEC"
-           id="stop3726" /><stop
-           offset="0.7911"
-           style="stop-color:#9AD8EA"
-           id="stop3728" /><stop
-           offset="0.8324"
-           style="stop-color:#8DD1E3"
-           id="stop3730" /><stop
-           offset="0.8743"
-           style="stop-color:#79C5D7"
-           id="stop3732" /><stop
-           offset="0.9167"
-           style="stop-color:#5CB4C7"
-           id="stop3734" /><stop
-           offset="0.959"
-           style="stop-color:#379FB2"
-           id="stop3736" /><stop
-           offset="1"
-           style="stop-color:#0B879A"
-           id="stop3738" /></linearGradient><path
-         d="m 108.502,109.08 c 24.314,-36.528 42.304,-74.786 37.882,-95.584 l 30.262,19.293 c 0,0 1.98,1.264 2.521,2.082 0.542,0.818 12.487,20.414 -36.094,95.221 -3.575,5.504 -6.885,11.99 -8.103,12.592 -8.289,-8.106 -26.468,-33.604 -26.468,-33.604 z"
-         id="path3740"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_19_)" /><linearGradient
-         id="SVGID_20_"
-         gradientUnits="userSpaceOnUse"
-         x1="86.8013"
-         y1="864.22852"
-         x2="67.959297"
-         y2="899.58722"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B5463"
-           id="stop3743" /><stop
-           offset="1"
-           style="stop-color:#0B5463"
-           id="stop3745" /></linearGradient><path
-         enable-background="new    "
-         d="m 175.734,71.333 c -5.28,12.918 -11.025,25.32 -19.455,39.147 l 2.229,0.424 c 9.653,-16.59 15.203,-28.776 18.983,-39.131 l -1.757,-0.44 z"
-         id="path3747"
-         inkscape:connector-curvature="0"
-         style="opacity:0.25;fill:url(#SVGID_20_)" /><linearGradient
-         id="SVGID_21_"
-         gradientUnits="userSpaceOnUse"
-         x1="78.599602"
-         y1="821.35352"
-         x2="26.685301"
-         y2="918.77582"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B879A"
-           id="stop3750" /><stop
-           offset="0.0382"
-           style="stop-color:#1694A7"
-           id="stop3752" /><stop
-           offset="0.1177"
-           style="stop-color:#26A8BA"
-           id="stop3754" /><stop
-           offset="0.2081"
-           style="stop-color:#32B6C8"
-           id="stop3756" /><stop
-           offset="0.3177"
-           style="stop-color:#39BED1"
-           id="stop3758" /><stop
-           offset="0.5"
-           style="stop-color:#3BC1D3"
-           id="stop3760" /><stop
-           offset="0.6823"
-           style="stop-color:#39BED1"
-           id="stop3762" /><stop
-           offset="0.7919"
-           style="stop-color:#32B6C8"
-           id="stop3764" /><stop
-           offset="0.8823"
-           style="stop-color:#26A8BA"
-           id="stop3766" /><stop
-           offset="0.9618"
-           style="stop-color:#1694A7"
-           id="stop3768" /><stop
-           offset="1"
-           style="stop-color:#0B879A"
-           id="stop3770" /></linearGradient><path
-         d="M 144.094,131.111 C 192.676,56.304 180.73,36.71 180.188,35.89 c -0.541,-0.816 -2.521,-2.08 -2.521,-2.08 L 146.385,13.496 c 4.396,20.678 -12.935,60.498 -37.042,96.872 8.118,12.356 16.496,24.437 25.324,34.678 1.759,-1.845 6.167,-8.917 9.427,-13.935 z"
-         id="path3772"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_21_)" /><linearGradient
-         id="SVGID_22_"
-         gradientUnits="userSpaceOnUse"
-         x1="82.628899"
-         y1="823.54883"
-         x2="30.2568"
-         y2="921.83008"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B879A"
-           id="stop3775" /><stop
-           offset="0.0382"
-           style="stop-color:#1694A7"
-           id="stop3777" /><stop
-           offset="0.1177"
-           style="stop-color:#26A8BA"
-           id="stop3779" /><stop
-           offset="0.2081"
-           style="stop-color:#32B6C8"
-           id="stop3781" /><stop
-           offset="0.3177"
-           style="stop-color:#39BED1"
-           id="stop3783" /><stop
-           offset="0.5"
-           style="stop-color:#3BC1D3"
-           id="stop3785" /><stop
-           offset="0.6823"
-           style="stop-color:#39BED1"
-           id="stop3787" /><stop
-           offset="0.7919"
-           style="stop-color:#32B6C8"
-           id="stop3789" /><stop
-           offset="0.8823"
-           style="stop-color:#26A8BA"
-           id="stop3791" /><stop
-           offset="0.9618"
-           style="stop-color:#1694A7"
-           id="stop3793" /><stop
-           offset="1"
-           style="stop-color:#0B879A"
-           id="stop3795" /></linearGradient><path
-         d="m 133.788,146.396 c 0.107,-0.057 0.26,-0.195 0.43,-0.375 -8.828,-10.242 -17.602,-22.018 -25.719,-34.373 -0.14,0.209 -0.276,0.422 -0.416,0.633 0,0 16.919,26.723 25.705,34.115 z"
-         id="path3797"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_22_)" /><linearGradient
-         id="SVGID_23_"
-         gradientUnits="userSpaceOnUse"
-         x1="-1.8975"
-         y1="935.29688"
-         x2="11.5351"
-         y2="971.68781"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#0B5463"
-           id="stop3800" /><stop
-           offset="1"
-           style="stop-color:#0B5463"
-           id="stop3802" /></linearGradient><path
-         enable-background="new    "
-         d="m 108.506,178.262 c -0.398,-0.457 -18.246,-21.541 -26.364,-33.9 l -1.325,1.512 c 10.186,14.547 19.059,25.396 26.666,33.479 l 1.023,-1.091 z"
-         id="path3804"
-         inkscape:connector-curvature="0"
-         style="opacity:0.2;fill:url(#SVGID_23_)" /><linearGradient
-         id="SVGID_24_"
-         gradientUnits="userSpaceOnUse"
-         x1="23.6108"
-         y1="897.86908"
-         x2="39.4245"
-         y2="996.32251"
-         gradientTransform="translate(90,-791)"><stop
-           offset="0"
-           style="stop-color:#096F80"
-           id="stop3807" /><stop
-           offset="0.0244"
-           style="stop-color:#107B8C"
-           id="stop3809" /><stop
-           offset="0.0888"
-           style="stop-color:#2095A6"
-           id="stop3811" /><stop
-           offset="0.1599"
-           style="stop-color:#2CA8BA"
-           id="stop3813" /><stop
-           offset="0.2403"
-           style="stop-color:#34B6C8"
-           id="stop3815" /><stop
-           offset="0.3378"
-           style="stop-color:#39BFD0"
-           id="stop3817" /><stop
-           offset="0.5"
-           style="stop-color:#3BC1D3"
-           id="stop3819" /><stop
-           offset="0.6718"
-           style="stop-color:#39BED1"
-           id="stop3821" /><stop
-           offset="0.7751"
-           style="stop-color:#33B6C8"
-           id="stop3823" /><stop
-           offset="0.8603"
-           style="stop-color:#28A8BA"
-           id="stop3825" /><stop
-           offset="0.9351"
-           style="stop-color:#1894A7"
-           id="stop3827" /><stop
-           offset="1"
-           style="stop-color:#057B8F"
-           id="stop3829" /></linearGradient><path
-         d="m 134.217,146.021 c -8.828,-10.242 -17.602,-22.018 -25.719,-34.373 -0.929,-1.416 -1.853,-2.834 -2.763,-4.264 -15.667,0.17 -31.37,1.221 -45.418,3.325 0.451,0.947 7.536,12.603 12.601,20.399 48.58,74.808 71.339,71.865 72.308,71.703 0.968,-0.162 2.927,-1.459 2.927,-1.459 l 31.282,-20.312 c -12.802,-2.72 -29.097,-16.317 -45.218,-35.019 z"
-         id="path3831"
-         inkscape:connector-curvature="0"
-         style="fill:url(#SVGID_24_)" /></g></g></svg>
\ No newline at end of file
diff --git a/Assets/message_notification_sound.wav b/Assets/message_notification_sound.wav
deleted file mode 100644
index e2e531157d773e65ad6f6529d007aa67fbfb4fe5..0000000000000000000000000000000000000000
Binary files a/Assets/message_notification_sound.wav and /dev/null differ
diff --git a/Assets/qrCodeIcon.png b/Assets/qrCodeIcon.png
deleted file mode 100644
index da203cfa26e6ddf03a6720bfe97613af8e5d3ceb..0000000000000000000000000000000000000000
Binary files a/Assets/qrCodeIcon.png and /dev/null differ
diff --git a/Assets/qrCodeIconBlack.png b/Assets/qrCodeIconBlack.png
deleted file mode 100644
index d8afae3364dbb3ac6166188d3c8c81ca4454874c..0000000000000000000000000000000000000000
Binary files a/Assets/qrCodeIconBlack.png and /dev/null differ
diff --git a/Assets/qrCodeIconWhite.png b/Assets/qrCodeIconWhite.png
deleted file mode 100644
index 022c354896bd7f66c8fdac9666c17a2c38bac651..0000000000000000000000000000000000000000
Binary files a/Assets/qrCodeIconWhite.png and /dev/null differ
diff --git a/Assets/ringtone_notify.wav b/Assets/ringtone_notify.wav
new file mode 100644
index 0000000000000000000000000000000000000000..af3dcaf5b974525d8cd6fa1e81398d0293fc8aa4
Binary files /dev/null and b/Assets/ringtone_notify.wav differ
diff --git a/Assets/share_b.png b/Assets/share_b.png
new file mode 100644
index 0000000000000000000000000000000000000000..00b856761b7ecc3af8a0df8907642a3805cf988d
Binary files /dev/null and b/Assets/share_b.png differ
diff --git a/Assets/share_w.png b/Assets/share_w.png
new file mode 100644
index 0000000000000000000000000000000000000000..55bc2192ff8f2861a8c37b12935d31016bad2da1
Binary files /dev/null and b/Assets/share_w.png differ
diff --git a/Buttons.xaml b/Buttons.xaml
new file mode 100644
index 0000000000000000000000000000000000000000..f47677788cb0c95e5c4a2117da1a6721bea4fe1d
--- /dev/null
+++ b/Buttons.xaml
@@ -0,0 +1,1110 @@
+<!-- **********************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas<andreas.traczyk@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/> .  *
+***********************************************************************-->
+<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+
+    <Style x:Key="WizardButtons1" TargetType="Button">
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="BorderThickness" Value="0" />
+        <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundTransparentBrush}" />
+        <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}" />
+        <Setter Property="HorizontalAlignment" Value="Left" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
+        <Setter Property="FontWeight" Value="SemiLight" />
+        <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
+        <Setter Property="UseSystemFocusVisuals" Value="True" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="Button">
+                    <Grid x:Name="RootGrid">
+                        <Rectangle x:Name="OuterRing"
+                                 Fill="{TemplateBinding Background}" />
+                        <ContentPresenter x:Name="ContentPresenter"
+                                          HorizontalAlignment="Center"
+                                          VerticalAlignment="Center"
+                                          Foreground="{TemplateBinding Foreground}" />
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight2Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OuterRing"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="0" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="ContentPresenter" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="PointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight2Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OuterRing"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="1" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="ContentPresenter" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Pressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerDownThemeAnimation Storyboard.TargetName="ContentPresenter" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{TemplateBinding Background}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Gray" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="FlatRoundButton" TargetType="Button">
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="BorderThickness" Value="0" />
+        <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundTransparentBrush}" />
+        <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}" />
+        <Setter Property="HorizontalAlignment" Value="Left" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
+        <Setter Property="FontWeight" Value="Normal" />
+        <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
+        <Setter Property="UseSystemFocusVisuals" Value="True" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="Button">
+                    <Grid x:Name="RootGrid">
+                        <Ellipse x:Name="OuterRing"
+                                 Width="36"
+                                 Height="36"
+                                 Fill="{TemplateBinding Background}" />
+                        <ContentPresenter x:Name="ContentPresenter"
+                                          HorizontalAlignment="Center"
+                                          VerticalAlignment="Center"
+                                          Foreground="{TemplateBinding Foreground}" />
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight2Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OuterRing"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="0" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="PointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight2Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OuterRing"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="1" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Pressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{TemplateBinding Background}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Gray" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="FlatRoundSendButton" TargetType="Button">
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="BorderThickness" Value="0" />
+        <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundTransparentBrush}" />
+        <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}" />
+        <Setter Property="HorizontalAlignment" Value="Left" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
+        <Setter Property="FontWeight" Value="Normal" />
+        <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
+        <Setter Property="UseSystemFocusVisuals" Value="True" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="Button">
+                    <Grid x:Name="RootGrid">
+                        <Ellipse x:Name="OuterRing"
+                                 Width="36"
+                                 Height="36"
+                                 Fill="{TemplateBinding Background}" />
+                        <ContentPresenter x:Name="ContentPresenter"
+                                          HorizontalAlignment="Center"
+                                          VerticalAlignment="Center"
+                                          Foreground="{TemplateBinding Foreground}" />
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal">
+                                    <Storyboard>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="PointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight2Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OuterRing"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="1" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Pressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{TemplateBinding Background}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Gray" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="FlatRoundListItemButton" TargetType="Button">
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="BorderThickness" Value="0" />
+        <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundTransparentBrush}" />
+        <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}" />
+        <Setter Property="HorizontalAlignment" Value="Left" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
+        <Setter Property="FontWeight" Value="Normal" />
+        <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
+        <Setter Property="UseSystemFocusVisuals" Value="True" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="Button">
+                    <Grid x:Name="RootGrid">
+                        <Ellipse x:Name="OuterRing"
+                                 Width="30"
+                                 Height="30"
+                                 Fill="{TemplateBinding Background}" />
+                        <ContentPresenter x:Name="ContentPresenter"
+                                          HorizontalAlignment="Center"
+                                          VerticalAlignment="Center"
+                                          Foreground="{TemplateBinding Foreground}" />
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OuterRing"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="0" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="PointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OuterRing"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="1" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Pressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseMediumLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="FlatRoundSettingsListItemButton" TargetType="Button">
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="BorderThickness" Value="0" />
+        <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundTransparentBrush}" />
+        <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}" />
+        <Setter Property="HorizontalAlignment" Value="Left" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
+        <Setter Property="FontWeight" Value="Normal" />
+        <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
+        <Setter Property="UseSystemFocusVisuals" Value="True" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="Button">
+                    <Grid x:Name="RootGrid">
+                        <Ellipse x:Name="OuterRing"
+                                 Width="31"
+                                 Height="30"
+                                 Fill="{TemplateBinding Background}" />
+                        <ContentPresenter x:Name="ContentPresenter"
+                                          HorizontalAlignment="Center"
+                                          VerticalAlignment="Center"
+                                          Foreground="{TemplateBinding Foreground}" />
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OuterRing"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="0" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="PointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OuterRing"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="1" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Pressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseMediumLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="FlatRoundShareListItemButton" TargetType="Button">
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="BorderThickness" Value="0" />
+        <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundTransparentBrush}" />
+        <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}" />
+        <Setter Property="HorizontalAlignment" Value="Left" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
+        <Setter Property="FontWeight" Value="Normal" />
+        <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
+        <Setter Property="UseSystemFocusVisuals" Value="True" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="Button">
+                    <Grid x:Name="RootGrid">
+                        <Ellipse x:Name="OuterRing"
+                                 Width="31"
+                                 Height="30"
+                                 Fill="{TemplateBinding Background}" />
+                        <ContentPresenter x:Name="ContentPresenter"
+                                          HorizontalAlignment="Center"
+                                          VerticalAlignment="Center"
+                                          Foreground="{TemplateBinding Foreground}" />
+                        <Grid>
+                            <Image x:Name="shareIcon_w"
+                                   Width="17"
+                                   Height="17"
+                                   Source="Assets/share_w.png"
+                                   Visibility="Collapsed" />
+                            <Image x:Name="shareIcon_b"
+                                   Width="17"
+                                   Height="17"
+                                   Source="Assets/share_b.png"
+                                   Visibility="Visible" />
+                        </Grid>
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OuterRing"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="0" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="PointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OuterRing"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="1" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="shareIcon_w" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="shareIcon_b" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Pressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseMediumLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="shareIcon_w" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="shareIcon_b" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="FlatRoundCallButton" TargetType="Button">
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="BorderThickness" Value="0" />
+        <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundTransparentBrush}" />
+        <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}" />
+        <Setter Property="HorizontalAlignment" Value="Left" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
+        <Setter Property="FontWeight" Value="Normal" />
+        <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
+        <Setter Property="UseSystemFocusVisuals" Value="True" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="Button">
+                    <Grid x:Name="RootGrid">
+                        <Ellipse x:Name="OuterRing"
+                                 Width="36"
+                                 Height="36"
+                                 Fill="{TemplateBinding Background}" />
+                        <ContentPresenter x:Name="ContentPresenter"
+                                          HorizontalAlignment="Center"
+                                          VerticalAlignment="Center"
+                                          Foreground="{TemplateBinding Foreground}" />
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal">
+                                    <Storyboard>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="PointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OuterRing"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.10">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.10" Value="1" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Pressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseMediumLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterRing" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="FlatButton" TargetType="Button">
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="Padding" Value="4" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="Button">
+                    <Grid>
+                        <Border x:Name="Border"
+                                Margin="0"
+                                Background="{TemplateBinding Background}"
+                                BorderBrush="{TemplateBinding BorderBrush}"
+                                BorderThickness="{TemplateBinding BorderThickness}" />
+                        <ContentPresenter x:Name="ContentPresenter"
+                                          Margin="{TemplateBinding Padding}"
+                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
+                                          AutomationProperties.AccessibilityView="Raw"
+                                          Content="{TemplateBinding Content}"
+                                          ContentTemplate="{TemplateBinding ContentTemplate}"
+                                          ContentTransitions="{TemplateBinding ContentTransitions}" />
+                        <Rectangle x:Name="FocusVisualWhite"
+                                   IsHitTestVisible="False"
+                                   Opacity="0"
+                                   Stroke="{ThemeResource FocusVisualWhiteStrokeThemeBrush}"
+                                   StrokeDashArray="1,1"
+                                   StrokeDashOffset="1.5"
+                                   StrokeEndLineCap="Square" />
+                        <Rectangle x:Name="FocusVisualBlack"
+                                   IsHitTestVisible="False"
+                                   Opacity="0"
+                                   Stroke="{ThemeResource FocusVisualBlackStrokeThemeBrush}"
+                                   StrokeDashArray="1,1"
+                                   StrokeDashOffset="0.5"
+                                   StrokeEndLineCap="Square" />
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal" />
+                                <VisualState x:Name="PointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPointerOverBackgroundThemeBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Border"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="1" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPointerOverForegroundThemeBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Pressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPressedBackgroundThemeBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPressedForegroundThemeBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonDisabledBackgroundThemeBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonDisabledBorderThemeBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonDisabledForegroundThemeBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                            <VisualStateGroup x:Name="FocusStates">
+                                <VisualState x:Name="Focused">
+                                    <Storyboard>
+                                        <DoubleAnimation Storyboard.TargetName="FocusVisualWhite"
+                                                         Storyboard.TargetProperty="Opacity"
+                                                         To="1"
+                                                         Duration="0" />
+                                        <DoubleAnimation Storyboard.TargetName="FocusVisualBlack"
+                                                         Storyboard.TargetProperty="Opacity"
+                                                         To="1"
+                                                         Duration="0" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Unfocused" />
+                                <VisualState x:Name="PointerFocused" />
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="FlatToggleButton" TargetType="ToggleButton">
+        <Setter Property="Width" Value="37" />
+        <Setter Property="Height" Value="30" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="FontSize" Value="15" />
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="BorderThickness" Value="0" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="ToggleButton">
+                    <Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
+                        <Border x:Name="RootBorder"
+                                Margin="0"
+                                Background="{TemplateBinding Background}"
+                                CornerRadius="6,6,0,0" />
+                        <ContentPresenter x:Name="ContentPresenter"
+                                          Padding="{TemplateBinding Padding}"
+                                          HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                          VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
+                                          AutomationProperties.AccessibilityView="Raw"
+                                          BorderBrush="{TemplateBinding BorderBrush}"
+                                          BorderThickness="{TemplateBinding BorderThickness}"
+                                          Content="{TemplateBinding Content}"
+                                          ContentTemplate="{TemplateBinding ContentTemplate}"
+                                          ContentTransitions="{TemplateBinding ContentTransitions}" />
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="RootBorder"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="0" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="PointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="RootBorder"
+                                                                       Storyboard.TargetProperty="Opacity"
+                                                                       Duration="0:0:0.20">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.20" Value="1" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Pressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Checked">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueLightBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="CheckedPointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueLightBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="CheckedPressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueLightBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="CheckedDisabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueLightBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Indeterminate">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="IndeterminatePointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="IndeterminatePressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="IndeterminateDisabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="ButtonStyleHome" TargetType="Button">
+        <Setter Property="Width" Value="39" />
+        <Setter Property="Height" Value="30" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="FontSize" Value="15" />
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="BorderThickness" Value="0" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="Button">
+                    <Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
+                        <Border x:Name="RootBorder"
+                                Margin="0"
+                                Background="{TemplateBinding Background}"
+                                CornerRadius="6,6,0,0">
+                            <ContentPresenter x:Name="ContentPresenter"
+                                              Padding="{TemplateBinding Padding}"
+                                              HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                              VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
+                                              AutomationProperties.AccessibilityView="Raw"
+                                              BorderBrush="{TemplateBinding BorderBrush}"
+                                              BorderThickness="{TemplateBinding BorderThickness}"
+                                              Content="{TemplateBinding Content}"
+                                              ContentTemplate="{TemplateBinding ContentTemplate}"
+                                              ContentTransitions="{TemplateBinding ContentTransitions}" />
+                        </Border>
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal">
+                                    <Storyboard>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="PointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Pressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Checked">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueLightBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="CheckedPointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueLightBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="CheckedPressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueLightBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="CheckedDisabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueLightBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Indeterminate">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="IndeterminatePointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="IndeterminatePressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="IndeterminateDisabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootBorder" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight3Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+</ResourceDictionary>
\ No newline at end of file
diff --git a/Call.h b/Call.h
index fc96d3af4459921cd35b10e7504649f9f2cb87de..3c024b3c87c4fdb403a455a85fc2c3ec91d549fa 100644
--- a/Call.h
+++ b/Call.h
@@ -1,7 +1,7 @@
-#pragma once
-/**************************************************************************
+/***************************************************************************
 * Copyright (C) 2016 by Savoir-faire Linux                                *
 * Author: J�ger Nicolas <nicolas.jager@savoirfairelinux.com>              *
+* Author: Traczyk Andreas <andreas.traczyk@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    *
@@ -16,53 +16,25 @@
 * You should have received a copy of the GNU General Public License       *
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
 **************************************************************************/
-using namespace Platform;
-using namespace Windows::UI::Xaml::Data;
+#pragma once
+
+#include <set>
+#include <chrono>
 
 namespace RingClientUWP
 {
-/* enumerations. */
-public enum class CallStatus { NONE, INCOMING_RINGING, OUTGOING_RINGING, SEARCHING, IN_PROGRESS, ENDED };
 
-public ref class Call sealed : public INotifyPropertyChanged
+struct Call
 {
-public:
-
-    /* functions */
-    Call(String^ accountId, String^ callId, String^ from);
-
-    /* properties */
-    virtual event PropertyChangedEventHandler^ PropertyChanged;
-
-    property String^ accountId;
-    property String^ callId;
-    property String^ from;
-    property CallStatus state {
-        CallStatus get() {
-            return state_;
-        }
-        void set(CallStatus value) {
-            state_ = value;
-            PropertyChanged(this, ref new PropertyChangedEventArgs("state"));
-        }
-    }
-    property bool isOutGoing;
-    property int code;
-
-    /* events */
-
-protected:
-    /* properties */
-    void NotifyPropertyChanged(String^ propertyName);
-
-internal:
-    //void refuse();
-    //void accept();
-    //void cancel();
-
-private:
-    CallStatus state_;
-
+    Call() { };
+    Call(const std::string& id, const std::set<std::string>& participants)
+        : id(id)
+        , participants(participants)
+    { }
+
+    std::string id;
+    std::chrono::time_point<std::chrono::steady_clock> callStartTime;
+    std::set<std::string> participants;
 };
-}
 
+}
diff --git a/Contact.cpp b/Contact.cpp
index ae14b20957ab23b88fb5c9aba9be097e39354e70..0964e1c5e21d0aa151df8044cb1722df6a1507d2 100644
--- a/Contact.cpp
+++ b/Contact.cpp
@@ -37,8 +37,11 @@ Contact::Contact(   String^ accountId,
                     String^ name,
                     String^ ringID,
                     String^ GUID,
-                    unsigned int unreadmessages,
-                    ContactStatus contactStatus)
+                    uint32 unreadmessages,
+                    ContactStatus contactStatus,
+                    TrustStatus trustStatus,
+                    bool isIncognitoContact,
+                    String^ avatarColorString)
 {
     vCard_ = ref new VCardUtils::VCard(this, accountId);
 
@@ -50,18 +53,7 @@ Contact::Contact(   String^ accountId,
         GUID_ = Utils::GetNewGUID();
 
     conversation_ = ref new Conversation();
-
-    // load conversation from disk
-    StorageFolder^ localfolder = ApplicationData::Current->LocalFolder;
-    String^ messagesFile = localfolder->Path + "\\" + ".messages\\" + GUID_ + ".json";
-
-    String^ fileContents = Utils::toPlatformString(Utils::getStringFromFile(Utils::toString(messagesFile)));
-
-    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
-    ref new DispatchedHandler([=]() {
-        if (fileContents != nullptr)
-            DestringifyConversation(fileContents);
-    }));
+    create_task([this]() { loadConversation(); });
 
     notificationNewMessage_ = Windows::UI::Xaml::Visibility::Collapsed;
     unreadMessages_ = unreadmessages;
@@ -73,11 +65,36 @@ Contact::Contact(   String^ accountId,
 
     _accountIdAssociated = accountId;
     _vcardUID = "";
-    _avatarImage = ref new String(L"ms-appx:///Assets/TESTS/contactAvatar.png");
+    _avatarImage = ref new String(L" ");
+    _avatarColorString = avatarColorString;
     _displayName = "";
 
     contactStatus_ = contactStatus;
-    lastTime_ = "never called.";
+    trustStatus_ = trustStatus;
+
+    unreadContactRequest_ = trustStatus == TrustStatus::INCOMING_CONTACT_REQUEST ? true : false;
+
+    lastTime_ = ResourceMananger::instance->getStringResource("m_never_called_");
+
+    _isIncognitoContact = isIncognitoContact;
+    presenceStatus_ = -1;
+    subscribed_ = false;
+}
+
+void
+Contact::loadConversation()
+{
+    // load conversation from disk
+    StorageFolder^ localfolder = ApplicationData::Current->LocalFolder;
+    String^ messagesFile = localfolder->Path + "\\" + ".messages\\" + GUID_ + ".json";
+
+    String^ fileContents = Utils::toPlatformString(Utils::getStringFromFile(Utils::toString(messagesFile)));
+
+    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
+        ref new DispatchedHandler([=]() {
+        if (fileContents != nullptr)
+            DestringifyConversation(fileContents);
+    }));
 }
 
 void
@@ -101,9 +118,13 @@ Contact::ToJsonObject()
     contactObject->SetNamedValue(ringIDKey, JsonValue::CreateStringValue(ringID_));
     contactObject->SetNamedValue(GUIDKey, JsonValue::CreateStringValue(GUID_));
     contactObject->SetNamedValue(unreadMessagesKey, JsonValue::CreateNumberValue(unreadMessages_));
+    contactObject->SetNamedValue(unreadContactRequestKey, JsonValue::CreateBooleanValue(unreadContactRequest_));
     contactObject->SetNamedValue(accountIdAssociatedKey, JsonValue::CreateStringValue(_accountIdAssociated));
     contactObject->SetNamedValue(vcardUIDKey, JsonValue::CreateStringValue(_vcardUID));
     contactObject->SetNamedValue(lastTimeKey, JsonValue::CreateStringValue(_lastTime));
+    contactObject->SetNamedValue(trustStatusKey, JsonValue::CreateNumberValue(Utils::toUnderlyingValue(trustStatus_)));
+    contactObject->SetNamedValue(isIncognitoContactKey, JsonValue::CreateBooleanValue(_isIncognitoContact));
+    contactObject->SetNamedValue(avatarColorStringKey, JsonValue::CreateStringValue(avatarColorString_));
 
     JsonObject^ jsonObject = ref new JsonObject();
     jsonObject->SetNamedValue(contactKey, contactObject);
@@ -130,9 +151,11 @@ void
 Contact::DestringifyConversation(String^ data)
 {
     JsonObject^ jsonObject = JsonObject::Parse(data);
-    String^     date;
     bool        fromContact;
     String^     payload;
+    std::time_t timeReceived;
+    bool        isReceived;
+    String^     messageIdStr;
 
     JsonArray^ messageList = jsonObject->GetNamedArray(conversationKey, ref new JsonArray());
     for (unsigned int i = 0; i < messageList->Size; i++) {
@@ -141,16 +164,24 @@ Contact::DestringifyConversation(String^ data)
             JsonObject^ jsonMessageObject = message->GetObject();
             JsonObject^ messageObject = jsonMessageObject->GetNamedObject(messageKey, nullptr);
             if (messageObject != nullptr) {
-                date = messageObject->GetNamedString(dateKey, "");
-                fromContact = messageObject->GetNamedBoolean(fromContactKey, "");
-                payload = messageObject->GetNamedString(payloadKey, "");
+                if (messageObject->HasKey(fromContactKey))
+                    fromContact = messageObject->GetNamedBoolean(fromContactKey);
+                if (messageObject->HasKey(payloadKey))
+                    payload = messageObject->GetNamedString(payloadKey);
+                if (messageObject->HasKey(timeReceivedKey))
+                    timeReceived = static_cast<std::time_t>(messageObject->GetNamedNumber(timeReceivedKey));
+                if (messageObject->HasKey(isReceivedKey))
+                    isReceived = messageObject->GetNamedBoolean(isReceivedKey);
+                if (messageObject->HasKey(messageIdKey))
+                    messageIdStr = messageObject->GetNamedString(messageIdKey);
             }
-            conversation_->addMessage(date, fromContact, payload);
+            conversation_->addMessage(fromContact, payload, timeReceived, isReceived, messageIdStr);
         }
     }
 }
 
-void RingClientUWP::Contact::deleteConversationFile()
+void
+Contact::deleteConversationFile()
 {
     StorageFolder^ localfolder = ApplicationData::Current->LocalFolder;
     String^ messagesFile = ".messages\\" + GUID_ + ".json";
@@ -185,7 +216,7 @@ Contact::getVCard()
 }
 
 void
-Contact::notifyPropertyChanged(String^ propertyName)
+Contact::raiseNotifyPropertyChanged(String^ propertyName)
 {
     NotifyPropertyChanged(propertyName);
-}
\ No newline at end of file
+}
diff --git a/Contact.h b/Contact.h
index e6b9419ba432ec29f402da6160566b006dbe5516..02b66a4a76aa5d78486a29002a6e59f0e9001884 100644
--- a/Contact.h
+++ b/Contact.h
@@ -19,6 +19,7 @@
 #pragma once
 
 #include "VCardUtils.h"
+#include "Utils.h"
 
 using namespace Platform;
 using namespace Windows::Data::Json;
@@ -31,12 +32,15 @@ String^ displayNameKey = "displayname";
 String^ ringIDKey = "ringid";
 String^ GUIDKey = "id";
 String^ unreadMessagesKey = "unreadmessages";
+String^ unreadContactRequestKey = "unreadContactRequest";
 String^ contactKey = "contact";
 String^ contactListKey = "contactlist";
 String^ accountIdAssociatedKey = "accountIdAssociated";
 String^ vcardUIDKey = "vcardUID";
 String^ lastTimeKey = "lastTime";
-
+String^ trustStatusKey = "trustStatus";
+String^ isIncognitoContactKey = "isIncognitoContact";
+String^ avatarColorStringKey = "avatarColorString";
 
 namespace RingClientUWP
 {
@@ -45,84 +49,107 @@ ref class Conversation;
 public ref class Contact sealed : public INotifyPropertyChanged
 {
 public:
-    Contact(String^ accountId,
-            String^ name,
-            String^ ringID,
-            String^ GUID,
-            unsigned int unreadmessages,
-            ContactStatus contactStatus);
+    Contact(    String^ accountId,
+                String^ name,
+                String^ ringID,
+                String^ GUID,
+                uint32 unreadmessages,
+                ContactStatus contactStatus,
+                TrustStatus trustStatus,
+                bool isIncognitoContact,
+                String^ avatarColorString);
 
     JsonObject^ ToJsonObject();
 
-    void notifyPropertyChanged(String^ propertyName);
+    void raiseNotifyPropertyChanged(String^ propertyName);
     virtual event PropertyChangedEventHandler^ PropertyChanged;
 
-    property String^ _name
-    {
-        String^ get()
-        {
+    property String^ _name {
+        String^ get() {
             return name_;
         }
-        void set(String^ value)
-        {
+        void set(String^ value) {
             name_ = value;
             NotifyPropertyChanged("_name");
+            NotifyPropertyChanged("_bestName");
+            NotifyPropertyChanged("_bestName2");
+            NotifyPropertyChanged("_bestName3");
+            NotifyPropertyChanged("_avatarColorString");
         }
     }
+
     property String^ ringID_;
     property String^ GUID_;
+    property bool subscribed_;
 
-    property Conversation^ _conversation
-    {
-        Conversation^ get()
-        {
+    property Conversation^ _conversation {
+        Conversation^ get() {
             return conversation_;
         }
     }
-    property Visibility notificationNewMessage
-    {
-        Visibility get()
-        {
+
+    property Visibility notificationNewMessage {
+        Visibility get() {
             return notificationNewMessage_;
         }
-        void set(Visibility visibility)
-        {
+        void set(Visibility visibility) {
             notificationNewMessage_ = visibility;
             NotifyPropertyChanged("notificationNewMessage");
         }
     }
-    property uint32 _unreadMessages
-    {
-        uint32 get()
-        {
+
+    property uint32 _unreadMessages {
+        uint32 get() {
             return unreadMessages_;
         }
-        void set(uint32 value)
-        {
+        void set(uint32 value) {
             unreadMessages_ = value;
             NotifyPropertyChanged("_unreadMessages");
         }
     }
-    property String^ _avatarImage
-    {
-        String^ get()
-        {
+
+    property bool _unreadContactRequest {
+        bool get() {
+            return unreadContactRequest_;
+        }
+        void set(bool value) {
+            unreadContactRequest_ = value;
+            NotifyPropertyChanged("_unreadContactRequest");
+        }
+    }
+
+    property String^ _avatarImage {
+        String^ get() {
             return avatarImage_;
         }
-        void set(String^ value)
-        {
+        void set(String^ value) {
             avatarImage_ = value;
             NotifyPropertyChanged("_avatarImage");
         }
     }
-    property Windows::UI::Xaml::GridLength _contactBarHeight
-    {
-        Windows::UI::Xaml::GridLength get()
-        {
+
+    property String^ _avatarColorString {
+        String^ get() {
+            return avatarColorString_;
+        }
+        void set(String^ value) {
+            avatarColorString_ = value;
+            NotifyPropertyChanged("_avatarColorString");
+            NotifyPropertyChanged("_avatarColorBrush");
+        }
+    }
+
+    property SolidColorBrush^ _avatarColorBrush {
+        SolidColorBrush^ get() {
+            return Utils::solidColorBrushFromString(avatarColorString_);
+        }
+    }
+
+    property Windows::UI::Xaml::GridLength _contactBarHeight {
+        GridLength get() {
             return contactBarHeight_;
         }
-        void set(Windows::UI::Xaml::GridLength value)
-        {
+        void set(GridLength value) {
             contactBarHeight_ = value;
             NotifyPropertyChanged("_contactBarHeight");
         }
@@ -137,45 +164,108 @@ public:
         }
     }
     property String^ _vcardUID;
-    property String^ _displayName
-    {
-        String^ get()
-        {
+
+    property String^ _displayName {
+        String^ get() {
             return displayName_;
         }
-        void set(String^ value)
-        {
+        void set(String^ value) {
             displayName_ = value;
             NotifyPropertyChanged("_displayName");
+            NotifyPropertyChanged("_bestName");
         }
     }
 
-    property ContactStatus _contactStatus
-    {
-        ContactStatus get()
-        {
+    property int _presenceStatus {
+        int get() { return presenceStatus_; }
+        void set(int value) {
+            presenceStatus_ = value;
+            NotifyPropertyChanged("_presenceStatus");
+        }
+    }
+
+    property ContactStatus _contactStatus {
+        ContactStatus get() {
             return contactStatus_;
         }
-        void set(ContactStatus value)
-        {
+        void set(ContactStatus value) {
             contactStatus_ = value;
             NotifyPropertyChanged("_contactStatus");
         }
     }
 
-    property String^ _lastTime
-    {
-        String^ get()
-        {
+    property String^ _lastTime {
+        String^ get() {
             return lastTime_;
         }
-        void set(String^ value)
-        {
+        void set(String^ value) {
             lastTime_ = value;
             NotifyPropertyChanged("_lastTime");
         }
     }
 
+    property bool _isTrusted {
+        bool get() {
+            return  trustStatus_ == TrustStatus::CONTACT_REQUEST_SENT ||
+                    trustStatus_ == TrustStatus::TRUSTED;
+        }
+    }
+
+    property String^ _bestName {
+        String^ get() {
+            String^ bestName;
+            if (displayName_)
+                bestName += displayName_ + " - ";
+            if (name_)
+                bestName += name_;
+            else if (ringID_)
+                bestName += ringID_;
+            return bestName;
+        }
+    }
+
+    property String^ _bestName2 {
+        String^ get() {
+            String^ bestName;
+            if (displayName_)
+                bestName = displayName_;
+            else if (name_)
+                bestName = name_;
+            else if (ringID_)
+                bestName = ringID_;
+            return bestName;
+        }
+    }
+
+    property String^ _bestName3 {
+        String^ get() {
+            String^ bestName;
+            if (_bestName2 == displayName_) {
+                if (name_)
+                    bestName = name_;
+                else if (ringID_)
+                    bestName = ringID_;
+                else
+                    bestName = "";
+            }
+            else if (_bestName2 == name_)
+                bestName = "";
+            else if (_bestName2 == ringID_)
+                bestName = "";
+            return bestName;
+        }
+    }
+
+    property TrustStatus _trustStatus {
+        TrustStatus get() {
+            return trustStatus_;
+        }
+        void set(TrustStatus value) {
+            trustStatus_ = value;
+        }
+    }
+
+    property bool _isIncognitoContact;
 
     VCardUtils::VCard^ getVCard();
 
@@ -184,7 +274,7 @@ internal:
     String^     StringifyConversation();
     void        DestringifyConversation(String^ data);
     void        deleteConversationFile();
-
+    void        loadConversation();
 
 protected:
     void NotifyPropertyChanged(String^ propertyName);
@@ -194,6 +284,9 @@ private:
     Conversation^ conversation_;
     Visibility notificationNewMessage_;
     unsigned int unreadMessages_;
+    int presenceStatus_;
+    bool unreadContactRequest_;
+    String^ avatarColorString_;
     String^ avatarImage_;
     String^ displayName_;
     String^ accountIdAssociated_;
@@ -201,6 +294,7 @@ private:
     ContactStatus contactStatus_;
     String^ name_;
     String^ lastTime_;
+    TrustStatus trustStatus_;
 };
 }
 
diff --git a/ContactListModel.cpp b/ContactListModel.cpp
index 7592000670bb79533fe3edec0317bccf46671910..2c4b0e58a9cb033e65e93d8d76af5cc0d54992a1 100644
--- a/ContactListModel.cpp
+++ b/ContactListModel.cpp
@@ -21,6 +21,7 @@
 #include "ContactListModel.h"
 
 #include "fileutils.h"
+#include "presencemanager_interface.h"
 
 using namespace Windows::ApplicationModel::Core;
 using namespace Windows::Data::Json;
@@ -63,12 +64,23 @@ ContactListModel::findContactByRingId(String^ ringId)
 }
 
 Contact^
-ContactListModel::addNewContact(String^ name, String^ ringId, ContactStatus contactStatus)
+ContactListModel::addNewContact(String^ name, String^ ringId, TrustStatus trustStatus, bool isIncognitoContact, ContactStatus contactStatus)
 {
     auto trimmedName = Utils::Trim(name);
     if (contactsList_ && !findContactByName(trimmedName)) {
-        //if (contactsList_ && !findContactByName(trimmedName) && !findContactByRingId(ringId)) {
-        Contact^ contact = ref new Contact(m_Owner, trimmedName, ringId, nullptr, 0, contactStatus);
+        String^ avatarColorString = Utils::getRandomColorString();
+        if (auto acc = AccountsViewModel::instance->findItem(m_Owner)) {
+            if (acc->accountType_ == "RING") {
+                if (ringId)
+                    avatarColorString = Utils::getRandomColorStringFromString(ringId);
+                else
+                    avatarColorString = Utils::getRandomColorStringFromString(name);
+            }
+            else if (name != "") {
+                avatarColorString = Utils::getRandomColorStringFromString(name);
+            }
+        }
+        Contact^ contact = ref new Contact(m_Owner, trimmedName, ringId, nullptr, 0, contactStatus, trustStatus, isIncognitoContact, avatarColorString);
         contactsList_->Append(contact);
         saveContactsToFile();
         AccountsViewModel::instance->raiseContactAdded(m_Owner, contact);
@@ -128,14 +140,18 @@ void
 ContactListModel::Destringify(String^ data)
 {
     JsonObject^     jsonObject = JsonObject::Parse(data);
-    String^         name;
-    String^         displayname;
-    String^         ringid;
-    String^         guid;
-    unsigned int    unreadmessages;
-    String^			accountIdAssociated;
-    String^         vcardUID;
-    String^			lastTime;
+    String^         name = "";
+    String^         displayname = "";
+    String^         ringid = "";
+    String^         guid = "";
+    uint32          unreadMessages = 0;
+    String^         accountIdAssociated = "";
+    String^         vcardUID = "";
+    String^         lastTime = "";
+    uint8           trustStatus = Utils::toUnderlyingValue(TrustStatus::TRUSTED);
+    bool            unreadContactRequest = false;
+    bool            isIncognitoContact = false;
+    String^         avatarColorString;
 
     JsonArray^ contactlist = jsonObject->GetNamedArray(contactListKey, ref new JsonArray());
     for (int i = contactlist->Size - 1; i >= 0; i--) {
@@ -144,18 +160,60 @@ ContactListModel::Destringify(String^ data)
             JsonObject^ jsonContactObject = contact->GetObject();
             JsonObject^ contactObject = jsonContactObject->GetNamedObject(contactKey, nullptr);
             if (contactObject != nullptr) {
-                name = contactObject->GetNamedString(nameKey);
-                displayname = contactObject->GetNamedString(displayNameKey);
-                ringid = contactObject->GetNamedString(ringIDKey);
-                guid = contactObject->GetNamedString(GUIDKey);
-                unreadmessages = static_cast<uint16_t>(contactObject->GetNamedNumber(unreadMessagesKey));
-                accountIdAssociated = contactObject->GetNamedString(accountIdAssociatedKey);
-                vcardUID = contactObject->GetNamedString(vcardUIDKey);
-
+                if (contactObject->HasKey(nameKey))
+                    name = contactObject->GetNamedString(nameKey);
+                if (contactObject->HasKey(displayNameKey))
+                    displayname = contactObject->GetNamedString(displayNameKey);
+                if (contactObject->HasKey(ringIDKey))
+                    ringid = contactObject->GetNamedString(ringIDKey);
+                if (contactObject->HasKey(GUIDKey))
+                    guid = contactObject->GetNamedString(GUIDKey);
+                if (contactObject->HasKey(unreadMessagesKey))
+                    unreadMessages = static_cast<uint32>(contactObject->GetNamedNumber(unreadMessagesKey));
+                if (contactObject->HasKey(unreadContactRequestKey))
+                    unreadContactRequest = contactObject->GetNamedBoolean(unreadContactRequestKey);
+                if (contactObject->HasKey(accountIdAssociatedKey))
+                    accountIdAssociated = contactObject->GetNamedString(accountIdAssociatedKey);
+                if (contactObject->HasKey(vcardUIDKey))
+                    vcardUID = contactObject->GetNamedString(vcardUIDKey);
                 if (contactObject->HasKey(lastTimeKey))
                     lastTime = contactObject->GetNamedString(lastTimeKey);
+                if (contactObject->HasKey(trustStatusKey))
+                    trustStatus = static_cast<uint8>(contactObject->GetNamedNumber(trustStatusKey));
+                if (contactObject->HasKey(isIncognitoContactKey))
+                    isIncognitoContact = contactObject->GetNamedBoolean(isIncognitoContactKey);
+                if (contactObject->HasKey(avatarColorStringKey)) {
+                    auto oldColorString = contactObject->GetNamedString(avatarColorStringKey);
+                    if (oldColorString != "") {
+                        avatarColorString = oldColorString;
+                    }
+                    else {
+                        if (auto acc = AccountsViewModel::instance->findItem(m_Owner)) {
+                            if (acc->accountType_ == "RING") {
+                                avatarColorString = Utils::getRandomColorStringFromString(ringid);
+                            }
+                            else if (name != "") {
+                                avatarColorString = Utils::getRandomColorStringFromString(name);
+                            }
+                            else {
+                                avatarColorString = Utils::getRandomColorString();
+                            }
+                        }
+                        else
+                            avatarColorString = Utils::getRandomColorString();
+                    }
+                }
             }
-            auto contact = ref new Contact(m_Owner, name, ringid, guid, unreadmessages, ContactStatus::READY);
+            auto contact = ref new Contact( m_Owner,
+                                            name,
+                                            ringid,
+                                            guid,
+                                            unreadMessages,
+                                            ContactStatus::READY,
+                                            Utils::toEnum<TrustStatus>(trustStatus),
+                                            isIncognitoContact,
+                                            avatarColorString);
+            contact->_unreadContactRequest = unreadContactRequest;
             contact->_displayName = displayname;
             contact->_accountIdAssociated = accountIdAssociated;
             // contact image
@@ -163,9 +221,11 @@ ContactListModel::Destringify(String^ data)
             if (lastTime)
                 contact->_lastTime = lastTime;
 
-            std::string contactImageFile = RingD::instance->getLocalFolder() + ".vcards\\"
-                                           + Utils::toString(contact->_vcardUID) + ".png";
+            std::string vcardDir = RingD::instance->getLocalFolder() + ".vcards\\";
+            std::string pngFile = Utils::toString(contact->_vcardUID) + ".png";
+            std::string contactImageFile = vcardDir + pngFile;
             if (Utils::fileExists(contactImageFile)) {
+                //RingClientUWP::ResourceMananger::instance->preloadImage(Utils::toPlatformString(contactImageFile));
                 contact->_avatarImage = Utils::toPlatformString(contactImageFile);
             }
             contactsList_->Append(contact);
@@ -178,11 +238,12 @@ void
 ContactListModel::deleteContact(Contact ^ contact)
 {
     unsigned int index;
-    auto itemsList = SmartPanelItemsViewModel::instance->itemsList;
-    auto item = SmartPanelItemsViewModel::instance->_selectedItem;
 
     if (contactsList_->IndexOf(contact, &index)) {
         contact->deleteConversationFile();
+        RingD::instance->removeContact(
+            Utils::toString(contact->_accountIdAssociated),
+            Utils::toString(contact->ringID_));
         contactsList_->RemoveAt(index);
     }
 
@@ -196,13 +257,14 @@ ContactListModel::modifyContact(Contact^ contact)
 }
 
 void
-ContactListModel::OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string &address, const std::string &name)
+ContactListModel::OnregisteredNameFound(RingClientUWP::LookupStatus status,  const std::string& accountId, const std::string &address, const std::string &name)
 {
     if (status == LookupStatus::SUCCESS) {
-        for each (Contact^ contact in contactsList_)
+        for each (Contact^ contact in contactsList_) {
             if (contact->ringID_ == Utils::toPlatformString(address)) {
                 contact->_name = Utils::toPlatformString(name);
                 saveContactsToFile();
             }
+        }
     }
 }
diff --git a/ContactListModel.h b/ContactListModel.h
index 1640d07f2c17ead002fc8059d7c8388317789b83..73bbbf9d33dae425f446541e4520eef3b17fdc3a 100644
--- a/ContactListModel.h
+++ b/ContactListModel.h
@@ -35,7 +35,11 @@ internal:
     /* functions */
     Contact^    findContactByName(String^ name);
     Contact^    findContactByRingId(String^ ringId);
-    Contact^    addNewContact(String^ name, String^ ringId, ContactStatus contactStatus = ContactStatus::READY);
+    Contact^    addNewContact(  String^ name,
+                                String^ ringId,
+                                TrustStatus trustStatus,
+                                bool isIncognitoContact,
+                                ContactStatus contactStatus = ContactStatus::READY);
     void        saveContactsToFile();
     void        openContactsFromFile();
     String^     Stringify();
@@ -59,7 +63,7 @@ private:
     Contact^ oldItem_;
     String^ m_Owner;
 
-    void OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string &address, const std::string &name);
+    void OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string& accountId, const std::string &address, const std::string &name);
 };
 }
 }
diff --git a/ContactRequestItem.cpp b/ContactRequestItem.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e4e6292537a021fc23d38f756cde8ce1aa9f7821
--- /dev/null
+++ b/ContactRequestItem.cpp
@@ -0,0 +1,50 @@
+/**************************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas <traczyk.andreas@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 "pch.h"
+
+#include "ContactRequestItem.h"
+
+using namespace Platform;
+using namespace Windows::UI::Core;
+using namespace Windows::ApplicationModel::Core;
+
+using namespace RingClientUWP;
+using namespace RingClientUWP::Controls;
+using namespace ViewModel;
+
+ContactRequestItem::ContactRequestItem()
+{
+}
+
+void
+ContactRequestItem::NotifyPropertyChanged(String^ propertyName)
+{
+    CoreApplicationView^ view = CoreApplication::MainView;
+    view->CoreWindow->Dispatcher->RunAsync(
+        CoreDispatcherPriority::High,
+        ref new DispatchedHandler([this, propertyName]()
+    {
+        PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName));
+    }));
+}
+
+void
+ContactRequestItem::raiseNotifyPropertyChanged(String^ propertyName)
+{
+    NotifyPropertyChanged(propertyName);
+}
\ No newline at end of file
diff --git a/ContactRequestItem.h b/ContactRequestItem.h
new file mode 100644
index 0000000000000000000000000000000000000000..c7f0b47d01484aaee01aff00b42cabeda68dfc14
--- /dev/null
+++ b/ContactRequestItem.h
@@ -0,0 +1,90 @@
+/**************************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas <traczyk.andreas@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
+
+using namespace Platform;
+using namespace Windows::UI::Xaml;
+using namespace Windows::UI::Xaml::Data;
+
+namespace RingClientUWP
+{
+namespace Controls
+{
+
+public ref class ContactRequestItem sealed : public INotifyPropertyChanged
+{
+public:
+    ContactRequestItem();
+
+    void raiseNotifyPropertyChanged(String^ propertyName);
+    virtual event PropertyChangedEventHandler^ PropertyChanged;
+
+    property Contact^ _contact {
+        Contact^ get() { return contact_; }
+        void set(Contact^ value) {
+            contact_ = value;
+            NotifyPropertyChanged("_contact");
+        }
+    };
+
+    property Visibility _isVisible
+    {
+        Visibility get() {
+            return isVisible_;
+        }
+        void set(Visibility value) {
+            isVisible_ = value;
+            NotifyPropertyChanged("_isVisible");
+        }
+    }
+
+    property bool _isSelected
+    {
+        bool get() {
+            return isSelected_;
+        }
+        void set(bool value) {
+            isSelected_ = value;
+            NotifyPropertyChanged("_isSelected");
+        }
+    }
+
+    property bool _isHovered
+    {
+        bool get() {
+            return isHovered_;
+        }
+        void set(bool value) {
+            isHovered_ = value;
+            NotifyPropertyChanged("_isHovered");
+        }
+    }
+
+protected:
+    void NotifyPropertyChanged(String^ propertyName);
+
+private:
+    Visibility isVisible_;
+    bool isSelected_;
+    bool isHovered_;
+
+    Contact^ contact_;
+};
+}
+}
diff --git a/ContactRequestItemsViewModel.cpp b/ContactRequestItemsViewModel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..72b5a283681faa8747f5dfa457e1c38c3af17bac
--- /dev/null
+++ b/ContactRequestItemsViewModel.cpp
@@ -0,0 +1,118 @@
+/**************************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas <traczyk.andreas@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 "pch.h"
+
+#include "ContactRequestItemsViewModel.h"
+
+using namespace Windows::ApplicationModel::Core;
+using namespace Windows::Data::Json;
+using namespace Windows::Storage;
+using namespace Windows::Storage::Streams;
+using namespace Windows::UI::Core;
+using namespace Windows::Globalization::DateTimeFormatting;
+
+
+using namespace RingClientUWP;
+using namespace ViewModel;
+
+ContactRequestItemsViewModel::ContactRequestItemsViewModel()
+{
+    itemsList_ = ref new Vector<ContactRequestItem^>();
+    itemsListFiltered_ = ref new Vector<ContactRequestItem^>();
+}
+
+ContactRequestItem^
+ContactRequestItemsViewModel::findItem(Contact^ contact)
+{
+    for each (ContactRequestItem^ item in itemsList)
+        if (item->_contact == contact)
+            return item;
+
+    return nullptr;
+}
+
+unsigned int
+ContactRequestItemsViewModel::getIndex(Contact^ contact)
+{
+    unsigned int i;
+    for (i = 0; i < itemsList_->Size; i++) {
+        if (itemsList_->GetAt(i)->_contact == contact)
+            break;
+    }
+    return i;
+}
+
+void
+ContactRequestItemsViewModel::removeItem(ContactRequestItem ^ item)
+{
+    unsigned int index;
+
+    if (itemsList->IndexOf(item, &index)) {
+        itemsList->RemoveAt(index);
+
+        // If the same item exists in the filtered list, remove it as well.
+        // Maintaining both lists in tandem, reduces flickering caused by a complete
+        // refresh of the filtered list. This is a pretty alternative to the more
+        // elegant solution of XAML visibility filtration through IValueConverter object
+        // bindings, which causes a buggy scrollbar to appear when the collapsed list items
+        // are before the visible ones.
+        if (itemsListFiltered->IndexOf(item, &index)) {
+            itemsListFiltered->RemoveAt(index);
+        }
+    }
+}
+
+String^
+ContactRequestItemsViewModel::getAssociatedAccountId(ContactRequestItem^ item)
+{
+    if (item->_contact->_accountIdAssociated->IsEmpty())
+        return AccountListItemsViewModel::instance->_selectedItem->_account->accountID_;
+    else
+        return item->_contact->_accountIdAssociated;
+}
+
+void
+ContactRequestItemsViewModel::update(const std::vector<std::string>& properties)
+{
+    for each (ContactRequestItem^ item in itemsList)
+        for each (std::string prop in properties)
+            item->raiseNotifyPropertyChanged(Utils::toPlatformString(prop));
+}
+
+void
+ContactRequestItemsViewModel::refreshFilteredItemsList()
+{
+    auto selectedAccountId = AccountListItemsViewModel::instance->getSelectedAccountId();
+
+    std::for_each(begin(itemsList), end(itemsList),
+        [selectedAccountId, this](ContactRequestItem^ item) {
+        static unsigned spi_index;
+        auto isInList = itemsListFiltered->IndexOf(item, &spi_index);
+
+        if ((item->_contact->_accountIdAssociated == selectedAccountId) &&
+            item->_contact->_trustStatus == TrustStatus::INCOMING_CONTACT_REQUEST) {
+            if (!isInList) {
+                    itemsListFiltered->InsertAt(0, item);
+            }
+        }
+        else if (isInList) {
+            itemsListFiltered->RemoveAt(spi_index);
+        }
+    });
+}
\ No newline at end of file
diff --git a/ContactRequestItemsViewModel.h b/ContactRequestItemsViewModel.h
new file mode 100644
index 0000000000000000000000000000000000000000..5194d2bfa5e8716a5a2203cf22438b848f2db5e3
--- /dev/null
+++ b/ContactRequestItemsViewModel.h
@@ -0,0 +1,99 @@
+/**************************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas <traczyk.andreas@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 "ContactRequestItem.h"
+
+using namespace Platform::Collections;
+using namespace Concurrency;
+
+using namespace RingClientUWP;
+using namespace RingClientUWP::Controls;
+
+namespace RingClientUWP
+{
+
+namespace ViewModel {
+
+public ref class ContactRequestItemsViewModel sealed
+{
+public:
+    String^ getAssociatedAccountId(ContactRequestItem^ item);
+    void refreshFilteredItemsList();
+
+internal:
+    /* singleton */
+    static property ContactRequestItemsViewModel^ instance {
+        ContactRequestItemsViewModel^ get() {
+            static ContactRequestItemsViewModel^ instance_ = ref new ContactRequestItemsViewModel();
+            return instance_;
+        }
+    }
+
+    /* functions */
+    void update(const std::vector<std::string>& properties);
+    ContactRequestItem^ findItem(Contact^ contact);
+    unsigned int getIndex(Contact^ contact);
+    void removeItem(ContactRequestItem^ item);
+
+    property IObservableVector<ContactRequestItem^>^ itemsList
+    {
+        IObservableVector<ContactRequestItem^>^ get() {
+            return itemsList_;
+        }
+    }
+
+    property IObservableVector<ContactRequestItem^>^ itemsListFiltered
+    {
+        IObservableVector<ContactRequestItem^>^ get() {
+            return itemsListFiltered_;
+        }
+        void set(IObservableVector<ContactRequestItem^>^ value) {
+            itemsListFiltered_ = dynamic_cast<Vector<ContactRequestItem^>^>(value);
+        }
+    }
+
+    property ContactRequestItem^ _selectedItem {
+        ContactRequestItem^ get() {
+            return currentItem_;
+        }
+        void set(ContactRequestItem^ value) {
+            oldItem_ = currentItem_;
+            currentItem_ = value;
+
+            if (oldItem_ != nullptr)
+                oldItem_->_isSelected = false;
+
+            if (currentItem_ != nullptr) {
+                currentItem_->_isSelected = true;
+            }
+        }
+    }
+
+private:
+    ContactRequestItemsViewModel(); // singleton
+
+    Vector<ContactRequestItem^>^ itemsList_;
+    Vector<ContactRequestItem^>^ itemsListFiltered_;
+
+    ContactRequestItem^ currentItem_;
+    ContactRequestItem^ oldItem_;
+};
+}
+}
diff --git a/Conversation.cpp b/Conversation.cpp
index 4683e27e4f366ddde1d17008b067b4a34a2ee6e7..6be9902a52abafe3c2ced3566048b7c4f1e941e6 100644
--- a/Conversation.cpp
+++ b/Conversation.cpp
@@ -19,6 +19,7 @@
 #include "pch.h"
 
 #include "Conversation.h"
+#include "MessageTextPage.xaml.h"
 
 using namespace Windows::ApplicationModel::Core;
 using namespace Platform;
@@ -29,30 +30,127 @@ using namespace RingClientUWP;
 Conversation::Conversation()
 {
     messagesList_ = ref new  Vector<ConversationMessage^>();
+
+    /*
+    messageListBox_ = ref new ListBox();
+    messageListBox_->Name = "_messagesList_";
+    messageListBox_->Margin = Windows::UI::Xaml::Thickness(0.0, 0.0, 0.0, 0.0);
+    messageListBox_->Padding = Windows::UI::Xaml::Thickness(0.0, 0.0, 0.0, 0.0);
+    auto backgroundBrush = dynamic_cast<Brush^>(Application::Current->Resources->Lookup("RingMessagePageBrush"));
+    messageListBox_->Background = backgroundBrush;
+    auto itemContainerStyle = dynamic_cast<Style^>(Application::Current->Resources->Lookup("messageBubbleStyle"));
+    messageListBox_->ItemContainerStyle = itemContainerStyle;
+    auto itemTemplate = dynamic_cast<Style^>(Application::Current->Resources->Lookup("ConversationMessageTemplate"));
+    messageListBox_->ItemTemplate = itemTemplate;
+    messageListBox_->ItemsSource = messagesList_;
+    */
+}
+
+ConversationMessage^
+Conversation::findMessage(uint64_t messageId)
+{
+    for each (ConversationMessage^ message in messagesList_)
+        if (message->MessageIdInteger == messageId)
+            return message;
+    return nullptr;
+}
+
+unsigned
+Conversation::getMessageIndex(uint64_t messageId)
+{
+    unsigned i;
+    for (i = 0; i < messagesList_->Size; i++) {
+        if (messagesList_->GetAt(i)->MessageIdInteger == messageId)
+            break;
+    }
+    return i;
 }
 
 void
-Conversation::addMessage(String^ date, bool fromContact, String^ payload)
+Conversation::addMessage(bool fromContact,
+                         String^ payload,
+                         std::time_t timeReceived,
+                         bool isReceived,
+                         String^ MessageId)
 {
     ConversationMessage^ message = ref new ConversationMessage();
-    message->Date = date;
     message->FromContact = fromContact;
     message->Payload = payload;
+    message->TimeReceived = timeReceived;
+    message->IsReceived = isReceived;
+    message->MessageId = MessageId;
+
+    message->MessageIndex = messagesList_->Size;
 
     /* add message to _messagesList_ */
     messagesList_->Append(message);
+
+    update(ViewModel::NotifyStrings::notifyConversation);
+}
+
+void
+Conversation::update(const std::vector<std::string>& properties)
+{
+    for each (ConversationMessage^ message in messagesList_)
+        for each (std::string prop in properties)
+            message->raiseNotifyPropertyChanged(Utils::toPlatformString(prop));
 }
 
 JsonObject^
 ConversationMessage::ToJsonObject()
 {
     JsonObject^ messageObject = ref new JsonObject();
-    messageObject->SetNamedValue(dateKey, JsonValue::CreateStringValue(Date));
     messageObject->SetNamedValue(fromContactKey, JsonValue::CreateBooleanValue(FromContact));
     messageObject->SetNamedValue(payloadKey, JsonValue::CreateStringValue(Payload));
+    messageObject->SetNamedValue(timeReceivedKey, JsonValue::CreateNumberValue(static_cast<double>(TimeReceived)));
+    messageObject->SetNamedValue(isReceivedKey, JsonValue::CreateBooleanValue(IsReceived));
+    messageObject->SetNamedValue(messageIdKey, JsonValue::CreateStringValue(MessageId));
 
     JsonObject^ jsonObject = ref new JsonObject();
     jsonObject->SetNamedValue(messageKey, messageObject);
 
     return jsonObject;
+}
+
+void
+ConversationMessage::NotifyPropertyChanged(String^ propertyName)
+{
+    CoreApplicationView^ view = CoreApplication::MainView;
+    view->CoreWindow->Dispatcher->RunAsync(
+        CoreDispatcherPriority::High,
+        ref new DispatchedHandler([this, propertyName]()
+    {
+        PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName));
+    }));
+}
+
+void
+ConversationMessage::raiseNotifyPropertyChanged(String^ propertyName)
+{
+    NotifyPropertyChanged(propertyName);
+}
+
+String^
+ConversationMessage::getMessageAvatar()
+{
+    if (ViewModel::SmartPanelItemsViewModel::instance->_selectedItem)
+        return ViewModel::SmartPanelItemsViewModel::instance->_selectedItem->_contact->_avatarImage;
+    //return "ms-appx:///Assets/TESTS/contactAvatar.png";
+    return L" ";
+}
+
+SolidColorBrush^
+ConversationMessage::getMessageAvatarColorBrush()
+{
+    if (ViewModel::SmartPanelItemsViewModel::instance->_selectedItem)
+        return ViewModel::SmartPanelItemsViewModel::instance->_selectedItem->_contact->_avatarColorBrush;
+    return ref new SolidColorBrush(Utils::ColorFromString(L"#ff808080"));
+}
+
+String^
+ConversationMessage::getMessageAvatarInitial()
+{
+    if (ViewModel::SmartPanelItemsViewModel::instance->_selectedItem)
+        return Utils::getUpperInitial(ViewModel::SmartPanelItemsViewModel::instance->_selectedItem->_contact->_bestName2);
+    return L"?";
 }
\ No newline at end of file
diff --git a/Conversation.h b/Conversation.h
index 6a9a04c34b399bb3f2759bd784f7ee437719540d..67da4bd6272d1e62402e0939b791872c96c31d1f 100644
--- a/Conversation.h
+++ b/Conversation.h
@@ -1,4 +1,3 @@
-#pragma once
 /**************************************************************************
 * Copyright (C) 2016 by Savoir-faire Linux                                *
 * Author: J�ger Nicolas <nicolas.jager@savoirfairelinux.com>              *
@@ -17,52 +16,100 @@
 * 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
+
 using namespace Platform;
 using namespace Windows::UI::Xaml::Data;
 
 /* strings required by Windows::Data::Json. Defined here on puprose */
 String^ conversationKey = "conversation";
 String^ messageKey      = "message";
-String^ dateKey         = "date";
 String^ fromContactKey  = "fromContact";
 String^ payloadKey      = "payload";
+String^ timeReceivedKey = "timeReceived";
+String^ isReceivedKey   = "isReceived";
+String^ messageIdKey    = "messageId";
 
 namespace RingClientUWP
 {
-public ref class ConversationMessage sealed
+
+public ref class ConversationMessage sealed : public INotifyPropertyChanged
 {
 public:
-    property String^ Date;
+    void raiseNotifyPropertyChanged(String^ propertyName);
+    virtual event PropertyChangedEventHandler^ PropertyChanged;
+
     property bool FromContact;
     property String^ Payload;
+    property std::time_t TimeReceived;
+    property bool IsReceived;
+    property String^ MessageId;
+    property int MessageIndex;
+
+    property String^ MessageAvatar {
+        String^ get() {
+            return getMessageAvatar();
+        }
+    }
+
+    property SolidColorBrush^ MessageAvatarColorBrush {
+        SolidColorBrush^ get() {
+            return getMessageAvatarColorBrush();
+        }
+    }
+
+    property String^ MessageAvatarInitial {
+        String^ get() {
+            return getMessageAvatarInitial();
+        }
+    }
+
+    property uint64_t MessageIdInteger {
+        uint64_t get() {
+            return strtoull(Utils::toString(MessageId).c_str(), nullptr, 0);
+        }
+    }
 
     /* functions */
     JsonObject^ ToJsonObject();
+    String^ getMessageAvatar();
+    SolidColorBrush^ getMessageAvatarColorBrush();
+    String^ getMessageAvatarInitial();
+
+protected:
+    void NotifyPropertyChanged(String^ propertyName);
+
 };
 
 public ref class Conversation sealed
 {
-private:
-
-
 public:
-    /* functions */
     Conversation();
-    void addMessage(String^ date, bool fromContact, String^ payload);
+
+    /* functions */
+    void addMessage(bool fromContact,
+                    String^ payload,
+                    std::time_t timeReceived,
+                    bool isReceived,
+                    String^ MessageId);
 
 internal:
     /* properties */
-    property Vector<ConversationMessage^>^ _messages
-    {
-        Vector<ConversationMessage^>^ get()
-        {
+    property IObservableVector<ConversationMessage^>^ _messages {
+        IObservableVector<ConversationMessage^>^ get() {
             return messagesList_;
         }
     }
 
+    /* functions */
+    void update(const std::vector<std::string>& properties);
+    ConversationMessage^ findMessage(uint64_t messageId);
+    unsigned getMessageIndex(uint64_t messageId);
+
 private:
     /* members */
-    Vector<ConversationMessage^>^ messagesList_;
+    IObservableVector<ConversationMessage^>^ messagesList_;
+    ListBox^ messageListBox_;
 
 };
 #define MSG_FROM_CONTACT true
diff --git a/Globals.h b/Globals.h
index f947bddcd377502c112b40fe58d61107d2a8d141..e1dafb06b3b06932cdf543618444003f98272658 100644
--- a/Globals.h
+++ b/Globals.h
@@ -1,5 +1,49 @@
 namespace RingClientUWP
 {
+
+namespace ViewModel
+{
+namespace NotifyStrings
+{
+const std::vector<std::string> notifySmartPanelItem = {
+    "_isSelected",
+    "_contactStatus",
+    "_lastTime",
+    "_presenceStatus",
+    "_displayName",
+    "_name",
+    "_bestName",
+    "_bestName2",
+    "notificationNewMessage",
+    "_unreadMessages",
+    "_unreadContactRequest",
+    "_trustStatus" };
+const std::vector<std::string> notifyContactRequestItem = {
+    "_isSelected" };
+const std::vector<std::string> notifyAccountItem = { "nothing" };
+    /*"_isSelected",
+    "_unreadMessages",
+    "_unreadContactRequests",
+    "_sipUsername",
+    "_sipHostname",
+    "_bestName",
+    "_bestName2",
+    "name_",
+    "ringID_",
+    "_registrationState",
+    "_upnpState",
+    "_autoAnswer",
+    "_dhtPublicInCalls",
+    "_turnEnabled",
+    "accountType_",
+    "accountID_",
+    "_deviceId",
+    "_deviceName",
+    "_active" };*/
+const std::vector<std::string> notifyConversation = { "" };
+}
+}
+
 /* public enumerations. */
 public enum class CallStatus {
     NONE,
@@ -12,7 +56,30 @@ public enum class CallStatus {
     PEER_PAUSED,
     ENDED,
     TERMINATING,
-    CONNECTED
+    CONNECTED,
+    AUTO_ANSWERING
+};
+
+public enum class DeviceRevocationResult {
+    SUCCESS,
+    INVALID_PASSWORD,
+    INVALID_CERTIFICATE
+};
+
+public enum class TrustStatus {
+    UNKNOWN,
+    INCOMING_CONTACT_REQUEST,
+    INGNORED,
+    BLOCKED,
+    CONTACT_REQUEST_SENT,
+    TRUSTED
+};
+
+public enum class RegistrationState {
+    UNKNOWN,
+    TRYING,
+    REGISTERED,
+    UNREGISTERED
 };
 
 public enum class LookupStatus {
@@ -23,9 +90,11 @@ public enum class LookupStatus {
 };
 
 public enum class ContactStatus {
-    WAITING_FOR_ACTIVATION, // waiting for lookup
+    WAITING_FOR_ACTIVATION,
     READY
 };
 
-constexpr bool DEBUG_ON = false;
+/* public enumerations. */
+constexpr bool DEBUG_ON = true;
+
 }
\ No newline at end of file
diff --git a/HttpUtils.h b/HttpUtils.h
new file mode 100644
index 0000000000000000000000000000000000000000..809cdcf5d29a291dbf81590bdcb4fa9c229a2bed
--- /dev/null
+++ b/HttpUtils.h
@@ -0,0 +1,50 @@
+#pragma once
+#include <pch.h>
+
+using namespace Platform;
+using namespace Windows::Web::Http;
+using namespace Windows::Web::Http::Filters;
+using namespace Windows::Web::Http::Headers;
+
+namespace RingClientUWP
+{
+namespace Utils
+{
+
+HttpClient^ httpClient = ref new HttpClient();
+
+//bool
+//isVideoContent(Uri^ uri)
+//{
+//    auto res = httpClient->GetBufferAsync(uri).then
+//    ([uri](task<HttpResponseMessage^> responseTask) {
+//        bool isVideoContentResult = false;
+//        try {
+//            MSG_(uri->ToString());
+//            auto httpResponse = responseTask.get();
+//            auto httpHeaders = httpResponse->Headers;
+//            /*auto httpHeaderString = httpHeaders->ToString();
+//            MSG_("header string:");
+//            MSG_("\n" + httpHeaderString);
+//
+//            auto httpContentHeaders = httpResponse->Content->Headers;
+//            auto httpContentHeaderString = httpContentHeaders->ToString();
+//            MSG_("content header string:");
+//            MSG_("\n" + httpContentHeaderString);*/
+//
+//            /*create_task(httpResponse->Content->ReadAsStringAsync()).then([=](String^ contentString) {
+//            MSG_(uri->ToString() + ": ");
+//            MSG_(contentString);
+//            }, task_continuation_context::use_current());*/
+//            return isVideoContentResult;
+//        }
+//        catch (Platform::Exception^ e) {
+//            EXC_(e);
+//        }
+//        return false;
+//    }, task_continuation_context::use_current());
+//}
+
+}
+
+}
\ No newline at end of file
diff --git a/MainPage.xaml b/MainPage.xaml
index 74ccab1541b626531a51258b3ee83d3968eef9b0..9dbf8e7f2b1db9b55aaea5b3909b4d99212eb47f 100644
--- a/MainPage.xaml
+++ b/MainPage.xaml
@@ -30,7 +30,7 @@
             <DoubleAnimation
             Storyboard.TargetName="_loadingOverlay_"
             Storyboard.TargetProperty="Opacity"
-            From="1.0" To="0.0" Duration="0:0:1" Completed="hideLoadingOverlay"/>
+            From="1.0" To="0.0" Duration="0:0:0.25" Completed="hideLoadingOverlay"/>
         </Storyboard>
         <Storyboard x:Name="_fadeInModalStoryboard_">
             <DoubleAnimation
@@ -91,10 +91,11 @@
                 <Frame x:Name="_consolePanel_"/>
             </SplitView.Pane>
             <SplitView.Content>
-                <SplitView x:Name="_innerSplitView_"
-                       IsPaneOpen="True"
-                       CompactPaneLength="60"
-                       DisplayMode="CompactInline">
+                <SplitView  x:Name="_innerSplitView_"
+                            Style="{ThemeResource AnimatedSplitView}"
+                            IsPaneOpen="True"
+                            CompactPaneLength="60"
+                            DisplayMode="CompactInline">
                     <SplitView.Pane>
                         <Grid>
                             <Grid.RowDefinitions>
@@ -104,7 +105,7 @@
                             <Grid   x:Name="_hamburgerButtonBar_"
                                     Canvas.ZIndex="0"
                                     Grid.Row="0"
-                                    Background="#3bc1d3"
+                                    Background="{StaticResource RingBlueMidBrush}"
                                     Width="320"
                                     HorizontalAlignment="Left">
                                 <Grid.ColumnDefinitions>
diff --git a/MainPage.xaml.cpp b/MainPage.xaml.cpp
index 8989a6e011d9c516617bf2df2fd94ea29d7d3e16..01facb1bdaa0367aa0992e34a895e7e66cdd9a61 100644
--- a/MainPage.xaml.cpp
+++ b/MainPage.xaml.cpp
@@ -21,7 +21,6 @@
 #include "ContactListModel.h"
 #include "MessageTextPage.xaml.h"
 #include "SmartPanel.xaml.h"
-//#include "RingConsolePanel.xaml.h"
 #include "VideoPage.xaml.h"
 #include "PreviewPage.xaml.h"
 #include "WelcomePage.xaml.h"
@@ -62,11 +61,12 @@ MainPage::MainPage()
 
     _welcomeFrame_->Navigate(TypeName(RingClientUWP::Views::WelcomePage::typeid));
     _smartPanel_->Navigate(TypeName(RingClientUWP::Views::SmartPanel::typeid));
-    //_consolePanel_->Navigate(TypeName(RingClientUWP::Views::RingConsolePanel::typeid));
     _videoFrame_->Navigate(TypeName(RingClientUWP::Views::VideoPage::typeid));
     _previewFrame_->Navigate(TypeName(RingClientUWP::Views::PreviewPage::typeid));
     _messageTextFrame_->Navigate(TypeName(RingClientUWP::Views::MessageTextPage::typeid));
 
+    isSmartPanelOpen = true;
+
     /* connect to delegates */
     RingD::instance->stateChange += ref new RingClientUWP::StateChange(this, &RingClientUWP::MainPage::OnstateChange);
     auto smartPanel = dynamic_cast<SmartPanel^>(_smartPanel_->Content);
@@ -95,16 +95,50 @@ MainPage::MainPage()
 
     RingD::instance->registrationStateErrorGeneric += ref new RingClientUWP::RegistrationStateErrorGeneric(this, &RingClientUWP::MainPage::OnregistrationStateErrorGeneric);
     RingD::instance->registrationStateRegistered += ref new RingClientUWP::RegistrationStateRegistered(this, &RingClientUWP::MainPage::OnregistrationStateRegistered);
+    RingD::instance->registrationStateUnregistered += ref new RingClientUWP::RegistrationStateUnregistered(this, &RingClientUWP::MainPage::OnregistrationStateUnregistered);
     RingD::instance->callPlaced += ref new RingClientUWP::CallPlaced(this, &RingClientUWP::MainPage::OncallPlaced);
 
-    RingD::instance->setLoadingStatusText += ref new SetLoadingStatusText([this](String^ statusText, String^ color) {
-        _loadingStatus_->Text = statusText;
-        auto col = Utils::ColorFromString(color);
-        auto brush = ref new Windows::UI::Xaml::Media::SolidColorBrush(col);
-        _loadingStatus_->Foreground = brush;
-    });
+    RingD::instance->setOverlayStatusText += ref new SetOverlayStatusText(this, &MainPage::OnsetOverlayStatusText);
 
     RingD::instance->fullScreenToggled += ref new RingClientUWP::FullScreenToggled(this, &RingClientUWP::MainPage::OnFullScreenToggled);
+
+    Window::Current->CoreWindow->KeyDown += ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(
+        [this](CoreWindow^ c, KeyEventArgs^ e)
+    {
+        auto ctrlState = CoreWindow::GetForCurrentThread()->GetKeyState(VirtualKey::Control);
+        RingD::instance->isCtrlPressed = (ctrlState & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down;
+        auto shiftState = CoreWindow::GetForCurrentThread()->GetKeyState(VirtualKey::LeftShift);
+        RingD::instance->isShiftPressed = (shiftState & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down;
+        //MSG_("KEYDOWN -- isCtrlDown: " + isCtrlPressed.ToString() + " isShiftDown: " + isShiftPressed.ToString());
+    });
+
+    Window::Current->CoreWindow->KeyUp += ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(
+        [this](CoreWindow^ c, KeyEventArgs^ e)
+    {
+        auto ctrlState = CoreWindow::GetForCurrentThread()->GetKeyState(VirtualKey::Control);
+        RingD::instance->isCtrlPressed = (ctrlState & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down;
+        auto shiftState = CoreWindow::GetForCurrentThread()->GetKeyState(VirtualKey::LeftShift);
+        RingD::instance->isShiftPressed = (shiftState & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down;
+        //MSG_("KEYUP -- isCtrlDown: " + isCtrlPressed.ToString() + " isShiftDown: " + isShiftPressed.ToString());
+    });
+
+}
+
+void
+MainPage::OnsetOverlayStatusText(String^ statusText, String^ color)
+{
+    _loadingStatus_->Text = statusText;
+    auto col = Utils::ColorFromString(color);
+    auto brush = ref new Windows::UI::Xaml::Media::SolidColorBrush(col);
+    _loadingStatus_->Foreground = brush;
+}
+
+void
+MainPage::focusOnMessagingTextbox()
+{
+    auto messageTextPage = dynamic_cast<MessageTextPage^>(_messageTextFrame_->Content);
+    auto messageTextBox = dynamic_cast<TextBox^>(messageTextPage->FindName("_messageTextBox_"));
+    messageTextBox->Focus(Windows::UI::Xaml::FocusState::Programmatic);
 }
 
 void
@@ -117,16 +151,25 @@ MainPage::OnKeyDown(KeyRoutedEventArgs^ e)
         }
 }
 
-void RingClientUWP::MainPage::_toggleSmartBoxButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+void
+MainPage::_toggleSmartBoxButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
-    _innerSplitView_->IsPaneOpen = !_innerSplitView_->IsPaneOpen;
-    if (_innerSplitView_->IsPaneOpen) {
-        dynamic_cast<SmartPanel^>(_smartPanel_->Content)->setMode(Views::SmartPanel::Mode::Normal);
-        _hamburgerButtonBar_->Width = 320;
-    }
-    else {
-        dynamic_cast<SmartPanel^>(_smartPanel_->Content)->setMode(Views::SmartPanel::Mode::Minimized);
-        _hamburgerButtonBar_->Width = 60;
+    if (Window::Current->Bounds.Width <= 638)
+        return;
+
+    isSmartPanelOpen = !isSmartPanelOpen;
+    setSmartPanelState(isSmartPanelOpen);
+
+    RingD::instance->raiseWindowResized(Window::Current->Bounds.Width, Window::Current->Bounds.Height);
+}
+
+void
+MainPage::setSmartPanelState(bool open)
+{
+    if (_innerSplitView_->IsPaneOpen != open) {
+        _innerSplitView_->IsPaneOpen = open;
+        auto newMode = open ? Views::SmartPanel::Mode::Normal : Views::SmartPanel::Mode::Minimized;
+        dynamic_cast<SmartPanel^>(_smartPanel_->Content)->setMode(newMode);
     }
 }
 
@@ -138,12 +181,16 @@ RingClientUWP::MainPage::showFrame(Windows::UI::Xaml::Controls::Frame^ frame)
     _navGrid_->SetRow(_videoFrame_, 0);
 
     if (frame == _welcomeFrame_) {
+        _currentFrame = FrameOpen::WELCOME;
         _navGrid_->SetRow(_welcomeFrame_, 1);
     } else if (frame == _videoFrame_) {
+        _currentFrame = FrameOpen::VIDEO;
         _navGrid_->SetRow(_videoFrame_, 1);
     } else if (frame == _messageTextFrame_) {
+        _currentFrame = FrameOpen::MESSAGE;
         _navGrid_->SetRow(_messageTextFrame_, 1);
     }
+
 }
 
 void
@@ -171,6 +218,7 @@ RingClientUWP::MainPage::showLoadingOverlay(bool load, bool modal)
             auto whiteBrush = ref new Windows::UI::Xaml::Media::SolidColorBrush(Windows::UI::Colors::White);
             _loadingOverlayRect_->Fill = whiteBrush;
             _loadingOverlayRect_->Opacity = 1.0;
+            _loadingOverlay_->Opacity = 1.0;
         }
     }
     else if (!load && isLoading) {
@@ -180,15 +228,31 @@ RingClientUWP::MainPage::showLoadingOverlay(bool load, bool modal)
 }
 
 void
-RingClientUWP::MainPage::OnResize(Platform::Object^ sender, Windows::UI::Core::WindowSizeChangedEventArgs^ e)
+MainPage::OnResize(Platform::Object^ sender, Windows::UI::Core::WindowSizeChangedEventArgs^ e)
 {
-    RingD::instance->raiseWindowResized();
+    if (e) {
+        auto windowWidth = e->Size.Width;
+        auto windowHeight = e->Size.Height;
+        RingD::instance->raiseWindowResized(windowWidth, windowHeight);
+
+        if (windowWidth <= 638) {
+            setSmartPanelState(false);
+            return;
+        }
+
+        if (isSmartPanelOpen && !RingD::instance->isFullScreen) {
+            setSmartPanelState(true);
+        }
+    }
 }
 
 void
 RingClientUWP::MainPage::DisplayProperties_DpiChanged(DisplayInformation^ sender, Platform::Object^ args)
 {
     OnResize(nullptr, nullptr);
+    SmartPanelItemsViewModel::instance->update({ "" });
+    ContactRequestItemsViewModel::instance->update({ "" });
+    AccountListItemsViewModel::instance->update({ "" });
 }
 
 void
@@ -197,14 +261,19 @@ RingClientUWP::MainPage::hideLoadingOverlay()
     _loadingOverlay_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
 }
 
-void RingClientUWP::MainPage::OnsummonMessageTextPage()
+void
+RingClientUWP::MainPage::OnsummonMessageTextPage()
 {
-    auto messageTextPage = dynamic_cast<MessageTextPage^>(_messageTextFrame_->Content);
-    messageTextPage->updatePageContent();
+    updateMessageTextPage(nullptr);
     showFrame(_messageTextFrame_);
-
 }
 
+void
+RingClientUWP::MainPage::updateMessageTextPage(SmartPanelItem^ item)
+{
+    auto messageTextPage = dynamic_cast<MessageTextPage^>(_messageTextFrame_->Content);
+    messageTextPage->updatePageContent(item);
+}
 
 void RingClientUWP::MainPage::OnsummonWelcomePage()
 {
@@ -226,7 +295,7 @@ void RingClientUWP::MainPage::OnhidePreviewPage()
 void RingClientUWP::MainPage::OnsummonVideoPage()
 {
     auto item = SmartPanelItemsViewModel::instance->_selectedItem;
-    auto videoPage = dynamic_cast<VideoPage^>(_videoFrame_->Content);;
+    auto videoPage = dynamic_cast<VideoPage^>(_videoFrame_->Content);
 
     if (item) {
         switch (item->_callStatus) {
@@ -247,10 +316,10 @@ void RingClientUWP::MainPage::OnsummonVideoPage()
 
 void RingClientUWP::MainPage::OnpressHangUpCall()
 {
-    OnsummonMessageTextPage();
 }
 
-void RingClientUWP::MainPage::OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code)
+void
+MainPage::OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code)
 {
     auto item = SmartPanelItemsViewModel::instance->_selectedItem;
 
@@ -258,14 +327,23 @@ void RingClientUWP::MainPage::OnstateChange(Platform::String ^callId, RingClient
     /* send the user to the peer's message text page */
     case CallStatus::ENDED:
     {
-        if (item)
+        auto selectedItem = SmartPanelItemsViewModel::instance->_selectedItem;
+
+        if (!selectedItem) {
+            return;
+        }
+
+        if (item &&
+            selectedItem->_callId == callId &&
+            _currentFrame == FrameOpen::VIDEO) {
             OnsummonMessageTextPage();
+            //showFrame(_messageTextFrame_);
+        }
         break;
     }
     default:
         break;
     }
-
 }
 
 void
@@ -285,6 +363,7 @@ MainPage::Application_VisibilityChanged(Object^ sender, VisibilityChangedEventAr
     auto vcm = Video::VideoManager::instance->captureManager();
     if (e->Visible) {
         MSG_("->Visible");
+        RingD::instance->isInvisible = false;
         bool isInCall = false;
         for (auto item : SmartPanelItemsViewModel::instance->itemsList) {
             if (item->_callId && item->_callStatus == CallStatus::IN_PROGRESS) {
@@ -308,13 +387,14 @@ MainPage::Application_VisibilityChanged(Object^ sender, VisibilityChangedEventAr
                     }));
                 }
                 catch (Exception^ e) {
-                    WriteException(e);
+                    EXC_(e);
                 }
             });
         }
     }
     else {
         MSG_("->Invisible");
+        RingD::instance->isInvisible = true;
         bool isInCall = false;
         for (auto item : SmartPanelItemsViewModel::instance->itemsList) {
             if (item->_callId && item->_callStatus == CallStatus::IN_PROGRESS) {
@@ -351,48 +431,44 @@ void RingClientUWP::MainPage::OncloseMessageTextPage()
 
 void RingClientUWP::MainPage::OnregistrationStateErrorGeneric(const std::string& accountId)
 {
-    showLoadingOverlay(false, false);
 }
 
-
-void RingClientUWP::MainPage::OnregistrationStateRegistered()
+void RingClientUWP::MainPage::OnregistrationStateUnregistered(const std::string& accountId)
 {
-    showLoadingOverlay(false, false);
+    RingD::instance->volatileDetailsChanged += ref new RingClientUWP::VolatileDetailsChanged(this, &MainPage::OnvolatileDetailsChanged);
+}
 
+void RingClientUWP::MainPage::OnregistrationStateRegistered(const std::string& accountId)
+{
     /* do not connect those delegates before initial registration on dht is fine.
        Otherwise your going to mess with the wizard */
     RingD::instance->nameRegistred += ref new RingClientUWP::NameRegistred(this, &RingClientUWP::MainPage::OnnameRegistred);
-    RingD::instance->volatileDetailsChanged += ref new RingClientUWP::VolatileDetailsChanged(this, &RingClientUWP::MainPage::OnvolatileDetailsChanged);
+    RingD::instance->volatileDetailsChanged += ref new RingClientUWP::VolatileDetailsChanged(this, &MainPage::OnvolatileDetailsChanged);
 }
 
-
 void RingClientUWP::MainPage::OncallPlaced(Platform::String ^callId)
 {
-    showFrame(_welcomeFrame_);
 }
 
-
 void RingClientUWP::MainPage::OnnameRegistred(bool status)
 {
     showLoadingOverlay(false, false);
 }
 
 
-void RingClientUWP::MainPage::OnvolatileDetailsChanged(const std::string &accountId, const std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<const std::string, std::string>>> &details)
+void RingClientUWP::MainPage::OnvolatileDetailsChanged(const std::string &accountId, const std::map<std::string, std::string>& details)
 {
     showLoadingOverlay(false, false);
 }
 
 void RingClientUWP::MainPage::OnFullScreenToggled(bool state)
 {
-    static bool openState;
     if (state == true) {
-        openState = _innerSplitView_->IsPaneOpen;
         _innerSplitView_->IsPaneOpen = false;
         _innerSplitView_->CompactPaneLength = 0;
     }
     else {
-        _innerSplitView_->IsPaneOpen = openState;
+        _innerSplitView_->IsPaneOpen = isSmartPanelOpen;
         _innerSplitView_->CompactPaneLength = 60;
     }
 }
\ No newline at end of file
diff --git a/MainPage.xaml.h b/MainPage.xaml.h
index a24b11a54bb09cec2001cd6c0b429282a20b8a35..8257c331d940fda7cf439ae593d839f1f3cbcf03 100644
--- a/MainPage.xaml.h
+++ b/MainPage.xaml.h
@@ -19,26 +19,44 @@
 #pragma once
 
 #include "MainPage.g.h"
+#include "SmartPanelItem.h"
 
-using namespace Windows::UI::Xaml::Controls;
 using namespace Windows::UI::Xaml::Input;
 using namespace Windows::Foundation;
 using namespace Windows::ApplicationModel::ExtendedExecution;
+using namespace Windows::UI::Xaml::Controls;
+using namespace Windows::Networking::Connectivity;
 
 namespace RingClientUWP
 {
 
-namespace Views {
-}
+enum class FrameOpen {
+    WELCOME,
+    MESSAGE,
+    VIDEO
+};
+
 public ref class MainPage sealed
 {
 public:
     MainPage();
+
     void showLoadingOverlay(bool load, bool modal);
     void hideLoadingOverlay();
+    void OnsetOverlayStatusText(String^ statusText, String^ color);
+    void focusOnMessagingTextbox();
+    void updateMessageTextPage(SmartPanelItem^ item);
 
     property bool isLoading;
     property bool isModal;
+    property bool isSmartPanelOpen;
+
+internal:
+    property FrameOpen currentFrame {
+        FrameOpen get() {
+            return _currentFrame;
+        }
+    };
 
 protected:
     virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override;
@@ -59,9 +77,11 @@ private:
     void DisplayProperties_DpiChanged(Windows::Graphics::Display::DisplayInformation^ sender, Platform::Object^ args);
     EventRegistrationToken dpiChangedtoken;
     Rect bounds;
+    FrameOpen _currentFrame;
     bool editionMode = false;
 
     void _toggleSmartBoxButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void setSmartPanelState(bool open);
     void showFrame(Windows::UI::Xaml::Controls::Frame^ frame);
     void OnsummonMessageTextPage();
     void OnFullScreenToggled(bool state);
@@ -73,9 +93,10 @@ private:
     void OnstateChange(Platform::String ^callId, CallStatus state, int code);
     void OncloseMessageTextPage();
     void OnregistrationStateErrorGeneric(const std::string& accountId);
-    void OnregistrationStateRegistered();
+    void OnregistrationStateUnregistered(const std::string& accountId);
+    void OnregistrationStateRegistered(const std::string& accountId);
     void OncallPlaced(Platform::String ^callId);
     void OnnameRegistred(bool status);
-    void OnvolatileDetailsChanged(const std::string &accountId, const std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<const std::string, std::string>>> &details);
+    void OnvolatileDetailsChanged(const std::string &accountId, const std::map<std::string, std::string>& details);
 };
 }
diff --git a/MessageTextPage.xaml b/MessageTextPage.xaml
index 5cfa805aac02c76cf9106277199acd4341a30f7c..9dd956d6d25fb1ad821719b118764ec02f3e1428 100644
--- a/MessageTextPage.xaml
+++ b/MessageTextPage.xaml
@@ -15,55 +15,215 @@
 *                                                                         *
 * You should have received a copy of the GNU General Public License       *
 * along with this program.  If not, see <http://www.gnu.org/licenses/> .  *
-*********************************************************************** -->
-<Page
-    x:Class="RingClientUWP.Views.MessageTextPage"
-    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:local="using:RingClientUWP"
-    xmlns:views="using:RingClientUWP.Views"
-    xmlns:ctl="using:RingClientUWP.Controls"
-    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    NavigationCacheMode="Enabled"
-    mc:Ignorable="d">
+***********************************************************************-->
+<Page x:Class="RingClientUWP.Views.MessageTextPage"
+      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+      xmlns:core="System.Windows.Interactivity"
+      xmlns:ctl="using:RingClientUWP.Controls"
+      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+      xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
+      xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
+      xmlns:local="using:RingClientUWP"
+      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+      xmlns:uc="using:RingClientUWP.UserAndCustomControls"
+      xmlns:views="using:RingClientUWP.Views"
+      NavigationCacheMode="Enabled"
+      mc:Ignorable="d">
 
     <Page.Resources>
-        <!-- bubble -->
-        <views:BubbleBackground x:Key="_bubbleBackground_" />
-        <views:BubbleHorizontalAlignement x:Key="_bubbleHorizontalAlignement_" />
-        <DataTemplate x:Key="ConversationMessageTemplate"
-                      x:DataType="local:ConversationMessage">
-            <Grid Margin="6,0,12,0"
-                  HorizontalAlignment="{x:Bind FromContact, Converter={StaticResource _bubbleHorizontalAlignement_}}" >
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="2*" />
-                    <ColumnDefinition Width="8*" />
-                </Grid.ColumnDefinitions>
-                <Border  Background="{x:Bind FromContact, Converter={StaticResource _bubbleBackground_}}"
-                         CornerRadius="10"
-                         Grid.Column="1"
-                         Width="auto"
-                         Height="auto"
-                         Padding="5"
-                         Margin="5" >
-                    <ContentPresenter>
-                        <!--Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."-->
-                        <TextBlock x:Name="_msgContent_"
-                                   TextWrapping="Wrap"
-                                   IsTextSelectionEnabled="True"
-                                   Text="{x:Bind Payload}"
-                                   Foreground="White"/>
-                    </ContentPresenter>
-                </Border>
+        <Storyboard x:Name="_fadeInMessagesListStoryBoard_">
+            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="_messagesList_"
+                                           Storyboard.TargetProperty="Opacity"
+                                           Duration="0:0:0.40">
+                <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                <LinearDoubleKeyFrame KeyTime="0:0:0.40" Value="1" />
+            </DoubleAnimationUsingKeyFrames>
+        </Storyboard>
+
+        <Storyboard x:Name="_fadeInMessagesPageInfoStoryBoard_">
+            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="_contactInfoGrid_"
+                                           Storyboard.TargetProperty="Opacity"
+                                           Duration="0:0:0.40">
+                <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                <LinearDoubleKeyFrame KeyTime="0:0:0.40" Value="1" />
+            </DoubleAnimationUsingKeyFrames>
+        </Storyboard>
+
+        <Storyboard x:Name="_easeUpMessagesListStoryBoard_">
+            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="_messagesListTranslateTransform_"
+                                           Storyboard.TargetProperty="Y"
+                                           Duration="0:0:0.15">
+                <EasingDoubleKeyFrame KeyTime="0" Value="-80" />
+                <EasingDoubleKeyFrame KeyTime="0:0:0.15" Value="0">
+                    <EasingDoubleKeyFrame.EasingFunction>
+                        <CubicEase EasingMode="EaseOut" />
+                    </EasingDoubleKeyFrame.EasingFunction>
+                </EasingDoubleKeyFrame>
+            </DoubleAnimationUsingKeyFrames>
+        </Storyboard>
+
+        <DataTemplate x:Key="ConversationMessageTemplate" x:DataType="local:ConversationMessage">
+            <Grid Margin="12,0,20,0" HorizontalAlignment="{x:Bind FromContact, Converter={StaticResource _bubbleHorizontalAlignement_}}">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="*" />
+                    <RowDefinition Height="{x:Bind MessageIndex, Converter={StaticResource _MessageChainBreakToHeight_}, Mode=OneWay}" />
+                </Grid.RowDefinitions>
+                <!--  avatar, message spikes, and message body  -->
+                <Grid Grid.Row="0">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="40" />
+                        <ColumnDefinition Width="10" />
+                        <ColumnDefinition Width="2*" />
+                        <ColumnDefinition Width="8*" />
+                    </Grid.ColumnDefinitions>
+                    <!--  avatar  -->
+                    <Grid Grid.Column="0"
+                          Visibility="{x:Bind MessageIndex, Converter={StaticResource _MessageChainBreakToVisibility_}, ConverterParameter=First}">
+                        <Ellipse Width="36"
+                                 Height="36"
+                                 Canvas.ZIndex="1"
+                                 Margin="0,2,0,0"
+                                 HorizontalAlignment="Center"
+                                 VerticalAlignment="Top"
+                                 Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}}">
+                            <Ellipse.Fill>
+                                <ImageBrush x:Name="_contactAvatar_" ImageSource="{x:Bind MessageAvatar, Mode=OneWay}" />
+                            </Ellipse.Fill>
+                        </Ellipse>
+                        <Grid Width="36"
+                              Height="36"
+                              Canvas.ZIndex="0"
+                              Margin="0,2,0,0"
+                              HorizontalAlignment="Center"
+                              VerticalAlignment="Top"
+                              Visibility="{x:Bind MessageIndex, Converter={StaticResource _MessageChainBreakToVisibility_}, ConverterParameter=First}">
+                            <Grid Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}}">
+                                <Ellipse x:Name="_defaultAvatar_" Fill="{x:Bind MessageAvatarColorBrush, Mode=OneWay}" />
+                                <TextBlock HorizontalAlignment="Center"
+                                           VerticalAlignment="Center"
+                                           FontFamily="Arial"
+                                           FontSize="21"
+                                           Foreground="White"
+                                           Text="{x:Bind MessageAvatarInitial, Mode=OneWay}"
+                                           TextAlignment="Center" />
+                            </Grid>
+                        </Grid>
+                    </Grid>
+                    <!--  left spike  -->
+                    <Grid Grid.Column="1" Visibility="{x:Bind MessageIndex, Converter={StaticResource _MessageChainBreakToVisibility_}, ConverterParameter=First}">
+                        <Polygon Name="_chatLeftBubbleSpike_"
+                                 Fill="{x:Bind FromContact, Converter={StaticResource _bubbleBackground_}}"
+                                 Points="10,0,0,5,10,10"
+                                 Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}}">
+                            <Polygon.RenderTransform>
+                                <TranslateTransform X="8" Y="15" />
+                            </Polygon.RenderTransform>
+                        </Polygon>
+                    </Grid>
+                    <!--  message  -->
+                    <Border Grid.Column="3"
+                            Width="auto"
+                            Height="auto"
+                            Margin="5"
+                            Padding="10,6,10,6"
+                            Background="{x:Bind FromContact, Converter={StaticResource _bubbleBackground_}}"
+                            CornerRadius="4">
+                        <ContentPresenter>
+                            <RichTextBlock x:Name="_msgContent_"
+                                           uc:TextBlockExtension.FormattedText="{x:Bind Payload}"
+                                           Foreground="#ff303030"
+                                           IsTextSelectionEnabled="True"
+                                           TextWrapping="Wrap">
+                                <Paragraph />
+                            </RichTextBlock>
+                        </ContentPresenter>
+                    </Border>
+                    <!--  right spike  -->
+                    <Grid Grid.Column="3" Visibility="{x:Bind MessageIndex, Converter={StaticResource _MessageChainBreakToVisibility_}, ConverterParameter=First}">
+                        <Polygon Name="_chatRightBubbleSpike_"
+                                 HorizontalAlignment="Right"
+                                 Fill="{x:Bind FromContact, Converter={StaticResource _bubbleBackground_}}"
+                                 Points="0,0,10,5,0,10"
+                                 Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}, ConverterParameter=Inverted}">
+                            <Polygon.RenderTransform>
+                                <TranslateTransform X="3" Y="15" />
+                            </Polygon.RenderTransform>
+                        </Polygon>
+                    </Grid>
+                </Grid>
+                <!--  message info  -->
+                <Grid Grid.Row="1">
+                    <StackPanel x:Name="_messageInfo_"
+                                Margin="10,0,10,0"
+                                HorizontalAlignment="{x:Bind FromContact, Converter={StaticResource _bubbleHorizontalAlignement_}}"
+                                Orientation="Horizontal">
+                        <Grid Grid.Column="2"
+                              x:Name="_confirmationCheckGrid_"
+                              Margin="0,1,8,0"
+                              Visibility="Collapsed">
+                            <Rectangle x:Name="_checkHider_"
+                                       Width="12"
+                                       HorizontalAlignment="Right"
+                                       Canvas.ZIndex="999"
+                                       Fill="{ThemeResource RingMessagePageBrush}"
+                                       Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}, ConverterParameter=Inverted}">
+                                <Rectangle.RenderTransform>
+                                    <TransformGroup>
+                                        <ScaleTransform ScaleX="1.0" />
+                                        <TranslateTransform X="0" />
+                                    </TransformGroup>
+                                </Rectangle.RenderTransform>
+                                <Rectangle.Triggers>
+                                    <EventTrigger>
+                                        <BeginStoryboard>
+                                            <Storyboard x:Name="_showCheck_">
+                                                <DoubleAnimation Storyboard.TargetName="_checkHider_"
+                                                                 Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
+                                                                 From="1"
+                                                                 To="0"
+                                                                 Duration="0:0:0.5" />
+                                                <DoubleAnimation Storyboard.TargetName="_checkHider_"
+                                                                 Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.X)"
+                                                                 From="0"
+                                                                 To="12"
+                                                                 Duration="0:0:0.5" />
+                                            </Storyboard>
+                                        </BeginStoryboard>
+                                    </EventTrigger>
+                                </Rectangle.Triggers>
+                            </Rectangle>
+                            <TextBlock Margin="6,0,0,0"
+                                       FontFamily="Segoe MDL2 Assets"
+                                       FontSize="12"
+                                       Foreground="Green"
+                                       Text="&#xE73E;"
+                                       Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}, ConverterParameter=Inverted}" />
+                        </Grid>
+                        <TextBlock x:Name="_messageTimeFrom_"
+                                   FontSize="10"
+                                   Foreground="Gray"
+                                   Text="{x:Bind MessageIndex, Converter={StaticResource _MessageDateTimeString_}}"
+                                   Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}}">
+                            <TextBlock.RenderTransform>
+                                <TranslateTransform X="50" />
+                            </TextBlock.RenderTransform>
+                        </TextBlock>
+                        <TextBlock x:Name="_messageTimeTo_"
+                                   FontSize="10"
+                                   Foreground="Gray"
+                                   Text="{x:Bind MessageIndex, Converter={StaticResource _MessageDateTimeString_}}"
+                                   Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}, ConverterParameter=Inverted}" />
+                    </StackPanel>
+                </Grid>
             </Grid>
         </DataTemplate>
-        <!-- barre d'envoi de message -->
-        <Style TargetType="TextBox">
+
+        <Style x:Key="MessageSendBox" TargetType="TextBox">
             <Setter Property="MinWidth" Value="{ThemeResource TextControlThemeMinWidth}" />
             <Setter Property="MinHeight" Value="{ThemeResource TextControlThemeMinHeight}" />
             <Setter Property="Foreground" Value="Black" />
-            <Setter Property="Background" Value="white" />
+            <Setter Property="Background" Value="White" />
             <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
             <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
             <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Auto" />
@@ -71,12 +231,12 @@
             <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Hidden" />
             <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden" />
             <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False" />
-            <Setter Property="Padding" Value="4,4"/>
+            <Setter Property="Padding" Value="4,0,8,4" />
             <Setter Property="Template">
                 <Setter.Value>
                     <ControlTemplate TargetType="TextBox">
-                            <Grid>
-                                <Grid.ColumnDefinitions>
+                        <Grid>
+                            <Grid.ColumnDefinitions>
                                 <ColumnDefinition Width="*" />
                                 <ColumnDefinition Width="Auto" />
                             </Grid.ColumnDefinitions>
@@ -84,188 +244,257 @@
                                 <RowDefinition Height="Auto" />
                                 <RowDefinition Height="*" />
                             </Grid.RowDefinitions>
-                            <Border x:Name="BackgroundElement"
-                                    Grid.Row="1"
-                                    Background="{TemplateBinding Background}"
-                                    Margin="0"
-                                    Opacity="1"
+                            <Border Grid.Row="1"
+                                    x:Name="BackgroundElement"
+                                    Grid.RowSpan="1"
                                     Grid.ColumnSpan="2"
-                                    BorderBrush="#3bc1d3"
+                                    Margin="0"
+                                    Background="{TemplateBinding Background}"
+                                    BorderBrush="{StaticResource RingBlueMidBrush}"
                                     BorderThickness="0"
-                                    Grid.RowSpan="1"/>
-                            <ScrollViewer x:Name="ContentElement"
-                                          Grid.Row="1"
-                                          HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}"
-                                          HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
-                                          VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}"
-                                          VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
-                                          IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}"
-                                          IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}"
-                                          IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
+                                    Opacity="1" />
+                            <ContentPresenter Grid.Row="0"
+                                              x:Name="HeaderContentPresenter"
+                                              Grid.ColumnSpan="2"
+                                              Margin="0,0,0,0"
+                                              Padding="2,4,2,2"
+                                              x:DeferLoadStrategy="Lazy"
+                                              Content="{TemplateBinding Header}"
+                                              ContentTemplate="{TemplateBinding HeaderTemplate}"
+                                              FontWeight="Normal"
+                                              Foreground="{ThemeResource SystemControlForegroundBaseHighBrush}"
+                                              Visibility="Collapsed" />
+                            <ScrollViewer Grid.Row="1"
+                                          x:Name="ContentElement"
                                           Margin="{TemplateBinding BorderThickness}"
                                           Padding="{TemplateBinding Padding}"
-                                          IsTabStop="False"
+                                          VerticalAlignment="Center"
                                           AutomationProperties.AccessibilityView="Raw"
+                                          HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
+                                          HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}"
+                                          IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
+                                          IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}"
+                                          IsTabStop="False"
+                                          IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}"
+                                          VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
+                                          VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}"
                                           ZoomMode="Disabled" />
-
-                            <Button x:Name="_sendBtn_"
+                            <Button Grid.Row="1"
+                                    Grid.Column="1"
+                                    x:Name="_sendBtn_"
+                                    MinWidth="34"
+                                    Margin="8,0,0,0"
+                                    VerticalAlignment="Stretch"
                                     Background="Transparent"
                                     BorderThickness="0"
-                                    Grid.Row="1"
-                                    FontFamily="Segoe MDL2 Assets"
-                                    Foreground="#3bc1d3"
-                                    Content="&#xE122;"
-                                    IsTabStop="False"
-                                    Grid.Column="1"
                                     Click="_sendBtn__Click"
-                                    Visibility="Visible"
-                                    MinWidth="34"
+                                    Content="&#xE89C;"
+                                    FontFamily="Segoe MDL2 Assets"
                                     FontSize="20"
-                                    VerticalAlignment="Stretch"/>
+                                    IsEnabled="False"
+                                    IsTabStop="False"
+                                    Style="{StaticResource FlatRoundSendButton}"
+                                    Visibility="Visible">
+                                <ToolTipService.ToolTip>
+                                    <TextBlock x:Uid="_tt_send_message_" />
+                                </ToolTipService.ToolTip>
+                            </Button>
+                            <ContentControl Grid.Row="1"
+                                            x:Name="PlaceholderTextContentPresenter"
+                                            Grid.ColumnSpan="2"
+                                            Margin="{TemplateBinding BorderThickness}"
+                                            Padding="{TemplateBinding Padding}"
+                                            VerticalAlignment="Center"
+                                            Content="{TemplateBinding PlaceholderText}"
+                                            Foreground="Gray"
+                                            IsHitTestVisible="False"
+                                            IsTabStop="False" />
                         </Grid>
                     </ControlTemplate>
                 </Setter.Value>
             </Setter>
         </Style>
-        <DataTemplate x:Key="_AssociableAccountsListDataTemplate_"
-                      x:DataType="local:Account">
-            <Grid>
-                <TextBlock Text="{x:Bind name_}"/>
-            </Grid>
-        </DataTemplate>
     </Page.Resources>
 
-    <Grid Background="#FFF2F2F2">
+    <Grid Background="{ThemeResource RingMessagePageBrush}">
         <Grid.RowDefinitions>
             <RowDefinition Height="auto" />
-            <RowDefinition Height="*"/>
+            <RowDefinition Height="auto" />
+            <RowDefinition Height="*" />
             <RowDefinition Height="auto" />
         </Grid.RowDefinitions>
         <Grid Grid.Row="0"
-                    Background="White"
-                    Height="auto">
+              x:Name="_contactInfoGrid_"
+              Height="auto"
+              Background="White">
             <Grid.ColumnDefinitions>
-                <ColumnDefinition Width="60"/>
-                <ColumnDefinition Width="auto"/>
+                <ColumnDefinition Width="62" />
+                <ColumnDefinition Width="*" />
+                <ColumnDefinition Width="auto" />
             </Grid.ColumnDefinitions>
-            <Ellipse Grid.Column="0"
-                             Width="50"
-                             Height="50">
-                <Ellipse.Fill>
-                    <ImageBrush x:Name="_contactBarAvatar_"
-                                        ImageSource="ms-appx:///Assets/TESTS/contactAvatar.png"/>
-                </Ellipse.Fill>
-            </Ellipse>
-            <Grid Grid.Column="1">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="auto" />
+                <RowDefinition Height="auto" />
+            </Grid.RowDefinitions>
+            <Grid Grid.Column="0" x:Name="_contactBarAvatarGrid_">
+                <Ellipse Width="50"
+                         Height="50"
+                         Canvas.ZIndex="1">
+                    <Ellipse.Fill>
+                        <ImageBrush x:Name="_contactBarAvatar_" />
+                    </Ellipse.Fill>
+                </Ellipse>
+            </Grid>
+            <Grid Grid.Column="0"
+                  x:Name="_defaultContactBarAvatarGrid_"
+                  Width="50"
+                  Height="50"
+                  Canvas.ZIndex="0">
+                <Ellipse x:Name="_defaultAvatar_" Fill="#ff808080" />
+                <TextBlock x:Name="_defaultAvatarInitial_"
+                           HorizontalAlignment="Center"
+                           VerticalAlignment="Center"
+                           FontFamily="Arial"
+                           FontSize="30"
+                           Foreground="White"
+                           Text="?"
+                           TextAlignment="Center" />
+            </Grid>
+            <Grid Grid.Column="1" x:Name="_contactInfoGridData_">
                 <Grid.RowDefinitions>
-                    <RowDefinition Height="25" />
-                    <RowDefinition Height="25" />
+                    <RowDefinition Height="32" />
                     <RowDefinition Height="30" />
                 </Grid.RowDefinitions>
-                <Grid Grid.Row="0">
-                    <Grid>
-                        <Grid.ColumnDefinitions>
-                            <ColumnDefinition Width="280"/>
-                            <ColumnDefinition Width="auto"/>
-                        </Grid.ColumnDefinitions>
-                    </Grid>
-                    <TextBlock  x:Name="_title_"
-                                Grid.Column="0"
-                                Text=""
-                                TextWrapping="NoWrap"
-                                TextTrimming="CharacterEllipsis"
-                                VerticalAlignment="Center"
-                                FontSize="16"
-                                Margin="4,0,4,0" />
-                    <ComboBox   x:Name="_associableAccountsList_"
-                                Grid.Column="1"
-                                Margin="6,14,6,6"
-                                Visibility="Collapsed">
-                        <ComboBox.ItemTemplate>
-                            <DataTemplate x:DataType="local:Account">
-                                <TextBlock Text="{x:Bind name_, Mode=OneWay}" />
-                            </DataTemplate>
-                        </ComboBox.ItemTemplate>
-                    </ComboBox>
-                </Grid>
-                <TextBlock  x:Name="_profilName_"
-                            Grid.Row="1"
-                            Text=""
-                            FontStyle="Italic"
-                            VerticalAlignment="Center"
-                            FontSize="16"
-                            Margin="4,0,4,0" />
-                <Grid Grid.Row="2">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition Width="auto"/>
-                        <ColumnDefinition Width="auto"/>
-                        <ColumnDefinition Width="auto"/>
-                        <ColumnDefinition Width="auto"/>
-                    </Grid.ColumnDefinitions>
-                    <Button x:Name="_videoCall_"
-                        Click="_videoCall__Click"
-                        Grid.Column="0"
-                        Content="&#xE714;"
-                        FontFamily="Segoe MDL2 Assets"
-                        FontSize="14"
-                        Style="{StaticResource ButtonStyle4}"
-                        Margin="6,2,6,6"/>
-                    <Button x:Name="_audioCall_"
-                        Grid.Column="1"
-                        Click="_audioCall__Click"
-                        Content="&#xE13A;"
-                        FontSize="14"
-                        FontFamily="Segoe MDL2 Assets"
-                        Style="{StaticResource ButtonStyle4}"
-                        Margin="6,2,6,6"/>
-                    <Button x:Name="_clearConversation_"
-                        Grid.Column="2"
-                        Click="_clearConversation__Click"
-                        Content="&#xE894;"
-                        FontFamily="Segoe MDL2 Assets"
-                        FontSize="14"
-                        Style="{StaticResource ButtonStyle4}"
-                        Margin="6,2,6,6"/>
-                    <Button x:Name="_deleteContact_"
-                        Grid.Column="3"
-                        Click="_deleteContact__Click"
-                        Content="&#xE74D;"
-                        FontFamily="Segoe MDL2 Assets"
-                        FontSize="14"
-                        Style="{StaticResource ButtonStyle4}"
-                        Margin="6,2,6,6"/>
-                </Grid>
+                <TextBlock Grid.Row="0"
+                           x:Name="_contactName_"
+                           Margin="8,4,8,0"
+                           HorizontalAlignment="Left"
+                           VerticalAlignment="Center"
+                           FontSize="18"
+                           FontWeight="Normal"
+                           Text=""
+                           TextTrimming="CharacterEllipsis"
+                           TextWrapping="NoWrap">
+                    <ToolTipService.ToolTip>
+                        <TextBlock x:Name="_tt_contactName_" />
+                    </ToolTipService.ToolTip>
+                </TextBlock>
+                <TextBlock Grid.Row="2"
+                           x:Name="_contactName2_"
+                           Margin="8,-10,8,0"
+                           HorizontalAlignment="Left"
+                           VerticalAlignment="Center"
+                           FontSize="15"
+                           FontWeight="SemiLight"
+                           Text=""
+                           TextTrimming="CharacterEllipsis"
+                           TextWrapping="NoWrap">
+                    <ToolTipService.ToolTip>
+                        <TextBlock x:Name="_tt_contactName2_" />
+                    </ToolTipService.ToolTip>
+                </TextBlock>
+            </Grid>
+            <Grid Grid.Row="0"
+                  Grid.Column="2"
+                  x:Name="_contactButtonsGrid_"
+                  Margin="0,0,14,0"
+                  HorizontalAlignment="Right">
+                <StackPanel Orientation="Horizontal">
+                    <Button x:Name="_sendContactRequestBtn_"
+                            Click="_sendContactRequestBtn__Click"
+                            Content="&#xE8FA;"
+                            FontFamily="Segoe MDL2 Assets"
+                            FontSize="18"
+                            Style="{StaticResource FlatRoundButton}"
+                            Visibility="Visible">
+                        <ToolTipService.ToolTip>
+                            <TextBlock x:Uid="_tt_send_contactrequest_" />
+                        </ToolTipService.ToolTip>
+                    </Button>
+                    <Button x:Name="_videoCallBtn_"
+                            Click="_videoCallBtn__Click"
+                            Content="&#xE714;"
+                            FontFamily="Segoe MDL2 Assets"
+                            FontSize="18"
+                            Style="{StaticResource FlatRoundButton}">
+                        <ToolTipService.ToolTip>
+                            <TextBlock x:Uid="_tt_video_call_" />
+                        </ToolTipService.ToolTip>
+                    </Button>
+                    <Button x:Name="_audioCallBtn_"
+                            Click="_audioCallBtn__Click"
+                            Content="&#xE13A;"
+                            FontFamily="Segoe MDL2 Assets"
+                            FontSize="18"
+                            Style="{StaticResource FlatRoundButton}"
+                            Visibility="Collapsed">
+                        <ToolTipService.ToolTip>
+                            <TextBlock x:Uid="_tt_audio_call_" />
+                        </ToolTipService.ToolTip>
+                    </Button>
+                    <Button x:Name="_clearConversationBtn_"
+                            Click="_clearConversationBtn__Click"
+                            Content="&#xE74D;"
+                            FontFamily="Segoe MDL2 Assets"
+                            FontSize="18"
+                            Style="{StaticResource FlatRoundButton}">
+                        <ToolTipService.ToolTip>
+                            <TextBlock x:Uid="_tt_clear_conversation_" />
+                        </ToolTipService.ToolTip>
+                    </Button>
+                </StackPanel>
             </Grid>
         </Grid>
-        <ScrollViewer x:Name="_scrollView_"
-                       BorderThickness="0,0,0,0"
-                       BorderBrush="#3bc1d3"
-                       Grid.Row="1"
-                       ScrollViewer.VerticalScrollBarVisibility="Auto">
+        <Rectangle Grid.Row="1"
+                   Height="1"
+                   Margin="16,0,16,0"
+                   Fill="LightGray" />
+        <ScrollViewer Grid.Row="2"
+                      x:Name="_scrollView_"
+                      VerticalAlignment="Bottom"
+                      BorderBrush="{StaticResource RingBlueMidBrush}"
+                      BorderThickness="0,0,0,0"
+                      ScrollViewer.VerticalScrollBarVisibility="Auto">
             <StackPanel>
+                <Rectangle Height="6" Fill="Transparent" />
                 <ListBox x:Name="_messagesList_"
                          Margin="0"
                          Padding="0"
-                         ItemContainerStyle="{StaticResource messageBubleStyle}"
+                         Background="{StaticResource RingMessagePageBrush}"
+                         ItemContainerStyle="{StaticResource messageBubbleStyle}"
                          ItemTemplate="{StaticResource ConversationMessageTemplate}">
+                    <ListBox.RenderTransform>
+                        <TranslateTransform x:Name="_messagesListTranslateTransform_" X="0" Y="0" />
+                    </ListBox.RenderTransform>
                 </ListBox>
+                <Rectangle Height="6" Fill="Transparent" />
             </StackPanel>
         </ScrollViewer>
-        <Grid Height="50"
-              Grid.Row="2"
-              Margin="0"
-              Padding="0"
-              Background="#FFF2F2F2">
-            <Grid.ColumnDefinitions>
-                <ColumnDefinition Width="*" />
-            </Grid.ColumnDefinitions>
-            <TextBox x:Name="_messageTextBox_"
-                     HorizontalAlignment="Stretch"
-                     TextWrapping="NoWrap"
-                     VerticalAlignment="Center"
-                     Margin="8,6,8,6"
-                     Background="White"
-                     KeyDown="_messageTextBox__KeyDown"/>
-        </Grid>
+        <StackPanel Grid.Row="3" Orientation="Vertical">
+            <Rectangle Grid.Row="0"
+                       Height="1"
+                       Margin="16,0,16,0"
+                       Fill="LightGray" />
+            <Grid MinHeight="52"
+                  MaxHeight="128"
+                  Margin="0,0,0,0"
+                  Background="{ThemeResource RingMessagePageBrush}">
+                <TextBox x:Name="_messageTextBox_"
+                         x:Uid="_messageTextBox_"
+                         MinHeight="24"
+                         Margin="16,0,16,0"
+                         HorizontalAlignment="Stretch"
+                         VerticalAlignment="Center"
+                         AcceptsReturn="True"
+                         Background="{ThemeResource RingMessagePageBrush}"
+                         IsSpellCheckEnabled="False"
+                         IsTabStop="True"
+                         KeyDown="_messageTextBox__KeyDown"
+                         ScrollViewer.VerticalScrollBarVisibility="Auto"
+                         Style="{StaticResource MessageSendBox}"
+                         TextChanged="_messageTextBox__TextChanged"
+                         TextWrapping="Wrap" />
+            </Grid>
+        </StackPanel>
     </Grid>
 </Page>
diff --git a/MessageTextPage.xaml.cpp b/MessageTextPage.xaml.cpp
index a5e04047fd6a96e8844907869020ce98221af883..fdbcd65c33e6116763a80a8964c0f37ab81f9764 100644
--- a/MessageTextPage.xaml.cpp
+++ b/MessageTextPage.xaml.cpp
@@ -1,6 +1,7 @@
 /**************************************************************************
 * Copyright (C) 2016 by Savoir-faire Linux                                *
 * Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com>              *
+* Author: Traczyk Andreas<andreas.traczyk@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    *
@@ -19,7 +20,7 @@
 #include "ContactListModel.h"
 
 #include "MainPage.xaml.h"
-
+#include "SmartPanel.xaml.h"
 #include "MessageTextPage.xaml.h"
 
 using namespace RingClientUWP::Views;
@@ -37,76 +38,168 @@ using namespace Windows::UI::Xaml::Input;
 using namespace Windows::UI::Xaml::Media;
 using namespace Windows::UI::Xaml::Navigation;
 using namespace Windows::ApplicationModel::Core;
-using namespace Platform;
 using namespace Windows::UI::Core;
-
+using namespace Windows::UI::Xaml::Media::Animation;
+using namespace Windows::UI::Xaml::Shapes;
 using namespace Windows::UI::Popups;
+using namespace Windows::ApplicationModel::DataTransfer;
+using namespace Windows::System::Threading;
 
 // refacto : the message text page should be
 MessageTextPage::MessageTextPage()
 {
     InitializeComponent();
 
-    /* bind the source to account only able to be used to contact the contact */
-    _associableAccountsList_->ItemsSource = AccountsViewModel::instance->accountsList;
-    _associableAccountsList_->SelectionChanged += ref new Windows::UI::Xaml::Controls::SelectionChangedEventHandler(this, &RingClientUWP::Views::MessageTextPage::OnSelectionChanged);
-
     /* connect to delegates */
-    RingD::instance->incomingAccountMessage += ref new IncomingAccountMessage([&](String^ accountId,
-    String^ fromRingId, String^ payload) {
+    RingD::instance->incomingAccountMessage += ref new IncomingAccountMessage([&](String^ accountId, String^ fromRingId, String^ payload)
+    {
         scrollDown();
     });
     RingD::instance->incomingMessage += ref new RingClientUWP::IncomingMessage(this, &RingClientUWP::Views::MessageTextPage::OnincomingMessage);
 
-}
+    RingD::instance->messageDataLoaded += ref new MessageDataLoaded([&]() { scrollDown(); });
 
-void
-RingClientUWP::Views::MessageTextPage::updatePageContent()
-{
-    auto item = SmartPanelItemsViewModel::instance->_selectedItem;
-    auto contact = item->_contact;
+    RingD::instance->messageStatusUpdated += ref new MessageStatusUpdated(this, &MessageTextPage::updateMessageStatus);
 
-    if (!contact) /* should never happen */
-        return;
+    RingD::instance->windowResized +=
+        ref new WindowResized([=](float width, float height)
+    {
+        if (RingD::instance->mainPage) {
+            bool isSmartPanelOpen = RingD::instance->mainPage->isSmartPanelOpen;
+            if (width <= 728 && (width > 638 && isSmartPanelOpen)) {
+                _contactButtonsGrid_->SetValue(Grid::ColumnSpanProperty, 3);
+                _contactButtonsGrid_->SetValue(Grid::ColumnProperty, static_cast<Object^>(0));
+                _contactButtonsGrid_->SetValue(Grid::RowProperty, 1);
+                _contactButtonsGrid_->Margin = Windows::UI::Xaml::Thickness(6.0, 0.0, 14.0, 6.0);
+                _contactButtonsGrid_->HorizontalAlignment = Windows::UI::Xaml::HorizontalAlignment::Left;
+            }
+            else {
+                _contactButtonsGrid_->SetValue(Grid::ColumnSpanProperty, 1);
+                _contactButtonsGrid_->SetValue(Grid::ColumnProperty, 2);
+                _contactButtonsGrid_->SetValue(Grid::RowProperty, static_cast<Object^>(0));
+                _contactButtonsGrid_->Margin = Windows::UI::Xaml::Thickness(0.0, 0.0, 14.0, 0.0);
+                _contactButtonsGrid_->HorizontalAlignment = Windows::UI::Xaml::HorizontalAlignment::Right;
+            }
+        }
+    });
 
-    /* show the name of contact on the page */
-    _title_->Text = contact->_name;
-    _profilName_->Text = contact->_displayName;
-    contact->_unreadMessages = 0;
+    RingD::instance->vCardUpdated += ref new VCardUpdated([&](Contact^ contact)
+    {
+        Utils::runOnUIThread([this, contact]() {
+            if (auto item = SmartPanelItemsViewModel::instance->findItem(contact)) {
+                updatePageContent(item);
+            }
+        });
+    });
 
-    String^ image_path = Utils::toPlatformString(RingD::instance->getLocalFolder()) + ".vcards\\" + contact->_vcardUID + ".png";
-    if (Utils::fileExists(Utils::toString(image_path))) {
-        auto uri = ref new Windows::Foundation::Uri(image_path);
-        _contactBarAvatar_->ImageSource = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage(uri);
-    }
-    else {
-        auto uri = ref new Windows::Foundation::Uri("ms-appx:///Assets/TESTS/contactAvatar.png");
-        _contactBarAvatar_->ImageSource = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage(uri);
-    }
+    lastMessageText = "";
 
-    /* show messages */
-    _messagesList_->ItemsSource = contact->_conversation->_messages;
+    conversation_ = ref new Vector<ConversationMessage^>();
+    converstationChunk_ = ref new Platform::Array<ConversationMessage^>(20);
+}
 
-    /* select the associated accountId stored with the contact */
-    auto accountIdAssociated = contact->_accountIdAssociated;
-    auto list = AccountsViewModel::instance->accountsList;
-    unsigned int index = 0;
-    bool found = true;
+void
+MessageTextPage::updateMessageStatus(String^ messageId, int status)
+{
+    MSG_("message status update [id: " + messageId + ", status: " + status.ToString() + "]");
+    if (status < 2)
+        return;
 
-    for (auto item : list)
-        if (item->accountID_ == accountIdAssociated) {
-            found = list->IndexOf(item, &index);
-            break;
+    // One does not simply begin a storyboard nested in a datatemplated item.
+    // We won't check the validity of the UIElement refs so an InvalidCast exception will be thrown
+    // if the xaml gets changed without adjusting this messy workaround.
+    auto items = _messagesList_->Items;
+    for (int i = 0; i < items->Size; ++i) {
+        if (auto message = dynamic_cast<ConversationMessage^>(items->GetAt(i))) {
+            if (message->MessageId == messageId) {
+                auto depObj = _messagesList_->ItemContainerGenerator->ContainerFromItem(items->GetAt(i));
+                auto gridElement = Utils::xaml::FindVisualChildByName(depObj, "_confirmationCheckGrid_");
+                auto grid = dynamic_cast<Grid^>(gridElement);
+                auto rect = dynamic_cast<Rectangle^>(grid->Children->GetAt(0));
+                auto eventTrigger = dynamic_cast<EventTrigger^>(rect->Triggers->GetAt(0));
+                auto beginStoryboard = dynamic_cast<BeginStoryboard^>(eventTrigger->Actions->GetAt(0));
+                if (beginStoryboard) {
+                    beginStoryboard->Storyboard->Begin();
+                    grid->Visibility = VIS::Visible;
+                }
+            }
         }
+    }
+}
 
-    if (found)
-        _associableAccountsList_->SelectedIndex = index;
-    else
-        ERR_("mismatch between accountIdAssociated and associable accounts!");
+void
+MessageTextPage::updatePageContent(SmartPanelItem^ item)
+{
+    if (auto selectedItem = (item ? item : SmartPanelItemsViewModel::instance->_selectedItem)) {
+        auto contact = selectedItem->_contact;
+
+        if (!contact) /* should never happen */
+            return;
+
+        /* show the name of contact on the page */
+        auto firstChoice = contact->_bestName2;
+        auto secondChoice = contact->_bestName3;
+        _contactName_->Text = firstChoice;
+        _tt_contactName_->Text = firstChoice;
+        if (firstChoice == contact->ringID_) {
+            _contactName2_->Visibility = VIS::Collapsed;
+        }
+        else {
+            _contactName2_->Visibility = VIS::Visible;
+            _contactName2_->Text = secondChoice;
+            _tt_contactName2_->Text = secondChoice;
+        }
 
-    /* scroll to the last message on the page*/
-    scrollDown();
+        //_contactBarAvatar_->ImageSource = RingClientUWP::ResourceMananger::instance->imageFromRelativePath(contact->_avatarImage);
+        if (contact->_avatarImage != " ") {
+            auto avatarImageUri = ref new Windows::Foundation::Uri(contact->_avatarImage);
+            _contactBarAvatar_->ImageSource = ref new BitmapImage(avatarImageUri);
+            _defaultContactBarAvatarGrid_->Visibility = VIS::Collapsed;
+            _contactBarAvatarGrid_->Visibility = VIS::Visible;
+        }
+        else {
+            _defaultContactBarAvatarGrid_->Visibility = VIS::Visible;
+            _contactBarAvatarGrid_->Visibility = VIS::Collapsed;
+            _defaultAvatar_->Fill = contact->_avatarColorBrush;
+            _defaultAvatarInitial_->Text = Utils::getUpperInitial(contact->_bestName2);
+        }
 
+        if (contact->_trustStatus == TrustStatus::INCOMING_CONTACT_REQUEST ||
+            contact->_trustStatus == TrustStatus::CONTACT_REQUEST_SENT ||
+            contact->_trustStatus == TrustStatus::UNKNOWN ||
+            contact->_trustStatus == TrustStatus::INGNORED)
+            _sendContactRequestBtn_->Visibility = VIS::Visible;
+        else
+            _sendContactRequestBtn_->Visibility = VIS::Collapsed;
+
+        if (item == nullptr) {
+            contact->_unreadMessages = 0;
+
+            /* show messages */
+            _messagesList_->ItemsSource = nullptr;
+            _fadeInMessagesPageInfoStoryBoard_->Begin();
+            Utils::runOnUIThreadDelayed(50, [this, contact]() {
+                auto start = std::chrono::steady_clock::now();
+                /*auto conversationSize = contact->_conversation->_messages->Size;
+                if (conversationSize > 20) {
+                    conversation_->Clear();
+                    contact->_conversation->_messages->GetMany(conversationSize - 20, converstationChunk_);
+                    for (auto message : converstationChunk_) {
+                        conversation_->Append(message);
+                    }
+                    _messagesList_->ItemsSource = conversation_;
+                }
+                else */{
+                    _messagesList_->ItemsSource = contact->_conversation->_messages;
+                }
+                _fadeInMessagesListStoryBoard_->Begin();
+                _easeUpMessagesListStoryBoard_->Begin();
+                scrollDown();
+                auto end = std::chrono::steady_clock::now();
+                auto diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
+            });
+        }
+    }
 }
 
 void RingClientUWP::Views::MessageTextPage::scrollDown()
@@ -121,37 +214,34 @@ RingClientUWP::Views::MessageTextPage::_sendBtn__Click(Platform::Object^ sender,
     sendMessage();
 }
 
-void
-RingClientUWP::Views::MessageTextPage::_messageTextBox__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
-{
-    if (e->Key == Windows::System::VirtualKey::Enter) {
-        sendMessage();
-    }
-}
-
 void
 RingClientUWP::Views::MessageTextPage::sendMessage()
 {
-    auto item = SmartPanelItemsViewModel::instance->_selectedItem;
-    auto contact = item->_contact;
+    if (auto item = SmartPanelItemsViewModel::instance->_selectedItem) {
+        auto contact = item->_contact;
 
-    auto txt = _messageTextBox_->Text;
+        auto message = _messageTextBox_->Text;
 
-    /* empty the textbox */
-    _messageTextBox_->Text = "";
+        IBuffer^ buffUTF8 = CryptographicBuffer::ConvertStringToBinary(message, BinaryStringEncoding::Utf8);
+        auto stdMessage = Utils::getData(buffUTF8);
+        MSG_(stdMessage);
 
-    if (!contact || txt->IsEmpty())
-        return;
+        if (!contact || message->IsEmpty())
+            return;
 
-    RingD::instance->sendAccountTextMessage(txt);
-    scrollDown();
+        /* empty the textbox */
+        _messageTextBox_->Text = "";
+
+        RingD::instance->sendAccountTextMessage(message);
+        scrollDown();
+    }
 }
 
 Object ^ RingClientUWP::Views::BubbleBackground::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
-    auto color1 = Windows::UI::ColorHelper::FromArgb(255, 0, 76, 96);
-    auto color2 = Windows::UI::ColorHelper::FromArgb(255, 58, 192, 210); // refacto : defines colors used by the application as globals
-    return ((bool)value) ? ref new SolidColorBrush(color1) : ref new SolidColorBrush(color2);
+    auto c1 = Utils::ColorFromString("#ffebefef");
+    auto c2 = Utils::ColorFromString("#ffcfebf5");
+    return ((bool)value) ? ref new SolidColorBrush(c1) : ref new SolidColorBrush(c2);
 }
 
 // we only do OneWay so the next function is not used
@@ -186,61 +276,35 @@ void RingClientUWP::Views::MessageTextPage::OnincomingMessage(Platform::String ^
 
 void RingClientUWP::Views::MessageTextPage::OnSelectionChanged(Platform::Object ^sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs ^e)
 {
-    auto account = dynamic_cast<Account^>(_associableAccountsList_->SelectedItem);
-    SmartPanelItemsViewModel::instance->_selectedItem->_contact->_accountIdAssociated = account->accountID_;
-}
-
-void RingClientUWP::Views::MessageTextPage::_deleteContact__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
-{
-    auto item = SmartPanelItemsViewModel::instance->_selectedItem;
-    auto contact = item->_contact;
-
-    auto messageDialog = ref new MessageDialog("Are you sure you want to remove this contact?", "Remove Contact");
-
-    messageDialog->Commands->Append(ref new UICommand("Cancel", ref new UICommandInvokedHandler([this](IUICommand^ command)
-    {})));
-    messageDialog->Commands->Append(ref new UICommand("Remove", ref new UICommandInvokedHandler([=](IUICommand^ command)
-    {
-        closeMessageTextPage();
-        String^ accountIdAssociated = SmartPanelItemsViewModel::instance->getAssociatedAccountId(item);
-        if (auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(accountIdAssociated)))
-            contactListModel->deleteContact(contact);
-        SmartPanelItemsViewModel::instance->removeItem(item);
-    })));
-
-    messageDialog->DefaultCommandIndex = 1;
-
-    messageDialog->ShowAsync();
 }
 
-
-void RingClientUWP::Views::MessageTextPage::_clearConversation__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+void RingClientUWP::Views::MessageTextPage::_clearConversationBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
-    auto item = SmartPanelItemsViewModel::instance->_selectedItem;
-    auto contact = item->_contact;
+    if (auto item = SmartPanelItemsViewModel::instance->_selectedItem) {
+        auto contact = item->_contact;
 
-    auto messageDialog = ref new MessageDialog("Are you sure you want to clear the conversation?", "Clear conversation");
+        auto messageDialog = ref new MessageDialog("Are you sure you want to clear the conversation?", "Clear conversation");
 
-    messageDialog->Commands->Append(ref new UICommand("Cancel", ref new UICommandInvokedHandler([this](IUICommand^ command)
-    {})));
-    messageDialog->Commands->Append(ref new UICommand("Clear", ref new UICommandInvokedHandler([=](IUICommand^ command)
-    {
-        contact->_conversation->_messages->Clear();
-        contact->saveConversationToFile();
-    })));
+        messageDialog->Commands->Append(ref new UICommand("Cancel", ref new UICommandInvokedHandler([this](IUICommand^ command)
+        {})));
+        messageDialog->Commands->Append(ref new UICommand("Clear", ref new UICommandInvokedHandler([contact](IUICommand^ command)
+        {
+            contact->_conversation->_messages->Clear();
+            contact->saveConversationToFile();
+        })));
 
-    messageDialog->DefaultCommandIndex = 1;
+        messageDialog->DefaultCommandIndex = 1;
 
-    messageDialog->ShowAsync();
+        messageDialog->ShowAsync();
+    }
 }
 
 
-void RingClientUWP::Views::MessageTextPage::_audioCall__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+void RingClientUWP::Views::MessageTextPage::_audioCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     auto button = dynamic_cast<Button^>(e->OriginalSource);
     if (button) {
-        auto item = SmartPanelItemsViewModel::instance->_selectedItem;
-        if (item) {
+        if (auto item = SmartPanelItemsViewModel::instance->_selectedItem) {
             auto contact = item->_contact;
             if (contact)
                 RingD::instance->placeCall(contact);
@@ -249,15 +313,77 @@ void RingClientUWP::Views::MessageTextPage::_audioCall__Click(Platform::Object^
 }
 
 
-void RingClientUWP::Views::MessageTextPage::_videoCall__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+void RingClientUWP::Views::MessageTextPage::_videoCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     auto button = dynamic_cast<Button^>(e->OriginalSource);
     if (button) {
-        auto item = SmartPanelItemsViewModel::instance->_selectedItem;
-        if (item) {
+        if (auto item = SmartPanelItemsViewModel::instance->_selectedItem) {
             auto contact = item->_contact;
             if (contact)
                 RingD::instance->placeCall(contact);
         }
     }
 }
+
+void
+MessageTextPage::_messageTextBox__TextChanged(Object^ sender, TextChangedEventArgs^ e)
+{
+    bool carriageReturnPressed = false;
+    if (_messageTextBox_->Text->Length() == (lastMessageText->Length() + 1) &&
+        _messageTextBox_->Text != "\r") {
+        unsigned cursorPos = 0;
+        auto strMessage = Utils::toString(_messageTextBox_->Text);
+        auto strLastMessage = Utils::toString(lastMessageText);
+        for (std::string::size_type i = 0; i < strLastMessage.size(); ++i) {
+            if (strMessage[i] != strLastMessage[i]) {
+                auto changed = strMessage.substr(i, 1);
+                if (changed == "\r") {
+                    carriageReturnPressed = true;
+                }
+                break;
+            }
+        }
+
+        if (strMessage.substr(strMessage.length() - 1) == "\r") {
+            if (lastMessageText->Length() != 0) {
+                carriageReturnPressed = true;
+            }
+        }
+    }
+
+    if (carriageReturnPressed && !(RingD::instance->isCtrlPressed || RingD::instance->isShiftPressed)) {
+        _messageTextBox_->Text = lastMessageText;
+        sendMessage();
+        lastMessageText = "";
+    }
+
+    DependencyObject^ child = VisualTreeHelper::GetChild(_messageTextBox_, 0);
+    auto sendBtnElement = Utils::xaml::FindVisualChildByName(child, "_sendBtn_");
+    auto sendBtn = dynamic_cast<Button^>(sendBtnElement);
+    if (_messageTextBox_->Text != "") {
+        sendBtn->IsEnabled = true;
+    }
+    else {
+        sendBtn->IsEnabled = false;
+    }
+
+    lastMessageText = _messageTextBox_->Text;
+}
+
+void
+MessageTextPage::_messageTextBox__KeyDown(Object^ sender, KeyRoutedEventArgs^ e)
+{
+}
+
+void
+MessageTextPage::_sendContactRequestBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    if (auto item = SmartPanelItemsViewModel::instance->_selectedItem) {
+        if (auto contact = item->_contact) {
+            auto accountId = Utils::toString(AccountListItemsViewModel::instance->getSelectedAccountId());
+            auto uri = Utils::toString(contact->ringID_);
+            auto vcard = Configuration::UserPreferences::instance->getVCard();
+            RingD::instance->sendContactRequest(accountId, uri, vcard->asString());
+        }
+    }
+}
diff --git a/MessageTextPage.xaml.h b/MessageTextPage.xaml.h
index 8dd8d7d61b0332e10691a777b31aaa4cc57c021f..d5e70c6b95f799603488ced8b7dbe7d3016d4aa9 100644
--- a/MessageTextPage.xaml.h
+++ b/MessageTextPage.xaml.h
@@ -1,6 +1,7 @@
 /**************************************************************************
 * Copyright (C) 2016 by Savoir-faire Linux                                *
 * Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com>              *
+* Author: Traczyk Andreas<andreas.traczyk@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    *
@@ -17,6 +18,7 @@
 **************************************************************************/
 #pragma once
 
+#include "TextBlockExtension.h"
 #include "MessageTextPage.g.h"
 
 namespace RingClientUWP
@@ -44,23 +46,29 @@ public ref class MessageTextPage sealed
 {
 public:
     MessageTextPage();
-    void updatePageContent();
+
     void scrollDown();
+    void updateMessageStatus(String^ messageId, int status);
 
 internal:
+    void updatePageContent(SmartPanelItem^ item = nullptr);
     event CloseMessageTextPage^ closeMessageTextPage;
 
 private:
+    String^ lastMessageText;
+    Vector<ConversationMessage^>^ conversation_;
+    Platform::Array<ConversationMessage^>^ converstationChunk_;
+
     void _sendBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
-    void _messageTextBox__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
     void sendMessage();
     void OnincomingMessage(Platform::String ^callId, Platform::String ^payload);
     void OnSelectionChanged(Platform::Object ^sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs ^e);
-
-    void _deleteContact__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
-    void _clearConversation__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
-    void _audioCall__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
-    void _videoCall__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _clearConversationBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _audioCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _videoCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _messageTextBox__TextChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::TextChangedEventArgs^ e);
+    void _sendContactRequestBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _messageTextBox__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
 };
 }
 }
diff --git a/Package.appxmanifest b/Package.appxmanifest
index 8fa1a09a3500f786786bfccc7a92dcdb8a30eccc..55e756bbf3545c57d74444e01000f496ad0f1373 100644
--- a/Package.appxmanifest
+++ b/Package.appxmanifest
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" IgnorableNamespaces="uap uap3 mp">
-  <Identity Name="Savoir-faireLinux.GNURing" Publisher="CN=8121A5F7-3CA1-4CAA-92B2-4F595B011941" Version="1.1.65.0" />
+  <Identity Name="Savoir-faireLinux.GNURing" Publisher="CN=8121A5F7-3CA1-4CAA-92B2-4F595B011941" Version="0.0.1.0" />
   <mp:PhoneIdentity PhoneProductId="2385953f-9019-423d-aa82-d1bbacfa258b" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
   <Properties>
     <DisplayName>GNU Ring</DisplayName>
@@ -28,7 +28,6 @@
     <Capability Name="internetClient" />
     <Capability Name="privateNetworkClientServer" />
     <uap3:Capability Name="backgroundMediaPlayback" />
-    <uap:Capability Name="userAccountInformation" />
     <DeviceCapability Name="microphone" />
     <DeviceCapability Name="webcam" />
   </Capabilities>
diff --git a/ResourceManager.cpp b/ResourceManager.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..af6918d9230b80b29a00b9db72e42e4ad29293dd
--- /dev/null
+++ b/ResourceManager.cpp
@@ -0,0 +1,105 @@
+/**************************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas <traczyk.andreas@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 <pch.h>
+
+#include "ResourceManager.h"
+
+using namespace RingClientUWP;
+
+using namespace Windows::UI::Core;
+using namespace Windows::ApplicationModel::Resources;
+
+String^
+getFriendlyResourceName(String^ path)
+{
+    return Utils::toPlatformString(Utils::fileNameOnly(Utils::toString(path)));
+}
+
+ResourceMananger::ResourceMananger()
+{
+    stringLoader = ref new ResourceLoader();
+}
+
+void
+ResourceMananger::preloadImage(String^ path)
+{
+    IOMSG_("attempting to preload image: " + path);
+    auto friendlyName = getFriendlyResourceName(path);
+    if (!preload.HasKey(friendlyName)) {
+        preload.Insert(friendlyName, nullptr);
+        IAsyncOperation<StorageFile^>^ getFileTask;
+        if (Utils::toString(path).find("ms-appx") == std::string::npos) {
+            getFileTask = StorageFile::GetFileFromPathAsync(path);
+        }
+        else {
+            auto uri = ref new Uri(path);
+            getFileTask = StorageFile::GetFileFromApplicationUriAsync(uri);
+        }
+        create_task(getFileTask)
+            .then([=](task<StorageFile^> t)
+        {
+            StorageFile^ storageFile;
+            try {
+                storageFile = t.get();
+                create_task(storageFile->OpenAsync(FileAccessMode::Read))
+                    .then([=](task<IRandomAccessStream^> fileStreamTask)
+                {
+                    try {
+                        auto fileStream = fileStreamTask.get();
+                        auto bmp = ref new BitmapImage();
+                        bmp->SetSource(fileStream);
+                        IOMSG_("preloading image: " + friendlyName);
+                        preload.Insert(friendlyName, bmp);
+                    }
+                    catch (Platform::Exception^ e) {
+                        EXC_(e);
+                    }
+                });
+            }
+            catch (Platform::Exception^ e) {
+                EXC_(e);
+            }
+        });
+    }
+}
+
+BitmapImage^
+ResourceMananger::imageFromRelativePath(String^ path)
+{
+    auto friendlyName = getFriendlyResourceName(path);
+    if (preload.HasKey(friendlyName)) {
+        IOMSG_("loading preloaded image: " + friendlyName);
+        return preload.Lookup(friendlyName);
+    }
+    else {
+        preloadImage(path);
+    }
+    auto uri = ref new Uri(path);
+    auto bmp = ref new BitmapImage();
+    bmp->UriSource = uri;
+    IOMSG_("loading image from disk: " + friendlyName);
+    return bmp;
+}
+
+String^
+ResourceMananger::getStringResource(String^ key)
+{
+    return stringLoader->GetString(key);
+}
\ No newline at end of file
diff --git a/CallsViewModel.h b/ResourceManager.h
similarity index 57%
rename from CallsViewModel.h
rename to ResourceManager.h
index 28e086473c38a5ea6d1195b8fd4810b116b69018..cc80f9aa140bbde1f686d681ee3d2a1fa3c01134 100644
--- a/CallsViewModel.h
+++ b/ResourceManager.h
@@ -1,8 +1,6 @@
-#pragma once
 /**************************************************************************
 * Copyright (C) 2016 by Savoir-faire Linux                                *
-* Author: J�ger Nicolas <nicolas.jager@savoirfairelinux.com>              *
-* Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com>          *
+* Author: Traczyk Andreas <traczyk.andreas@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    *
@@ -17,49 +15,47 @@
 * 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 <pch.h>
+
+using namespace Platform;
 using namespace Platform::Collections;
+using namespace Windows::Foundation;
+using namespace Windows::Foundation::Collections;
+using namespace Windows::Storage;
+using namespace Windows::Storage::Streams;
+using namespace Windows::System;
+using namespace Windows::UI::Xaml;
+using namespace Windows::UI::Xaml::Media;
+using namespace Windows::UI::Xaml::Media::Imaging;
+using namespace Windows::ApplicationModel::Resources;
 
 namespace RingClientUWP
 {
-/* delegate */
-delegate void CallRecieved(Call^ call);
-delegate void CallStatusUpdated(Call^ call);
-delegate void CallStarted();
-delegate void CallEnded();
 
-namespace ViewModel {
-public ref class CallsViewModel sealed
+public ref class ResourceMananger sealed
 {
-internal:
-    /* singleton */
-    static property CallsViewModel^ instance
-    {
-        CallsViewModel^ get()
-        {
-            static CallsViewModel^ instance_ = ref new CallsViewModel();
+public:
+    /* properties */
+    static property ResourceMananger^ instance {
+        ResourceMananger^ get() {
+            static ResourceMananger^ instance_ = ref new ResourceMananger();
             return instance_;
         }
     }
 
-    /* properties */
-    property Vector<String^>^ _callIdList
-    {
-        Vector<String^>^ get()
-        {
-            return callIdsList_;
-        }
-    }
+    void            preloadImage(String^ path);
+    BitmapImage^    imageFromRelativePath(String^ path);
 
-    /* events */
-    event CallRecieved^ callRecieved;
-    event CallStatusUpdated^ callStatusUpdated;
-    event CallStarted^ callStarted;
-    event CallEnded^ callEnded;
+    String^         getStringResource(String^ key);
 
 private:
-    CallsViewModel(); // singleton
-    Vector<String^>^ callIdsList_;
+    ResourceMananger();
+
+    Map<String^ , BitmapImage^> preload;
+    ResourceLoader^ stringLoader;
 
 };
-}
-}
+
+}
\ No newline at end of file
diff --git a/RingConsolePanel.xaml.cpp b/RingConsolePanel.xaml.cpp
index 7d58386acee1774c9cd08501c48d0b4e8996099d..723ff670c358fbfe2f8aeb6802724f59deace279 100644
--- a/RingConsolePanel.xaml.cpp
+++ b/RingConsolePanel.xaml.cpp
@@ -31,7 +31,11 @@ RingConsolePanel::RingConsolePanel()
     InitializeComponent();
 
     RingDebug::instance->messageToScreen += ref new debugMessageToScreen([this](Platform::String^ message) {
-        output(message);
+        CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
+            ref new DispatchedHandler([=]()
+        {
+            output(message);
+        }));
     });
 }
 
@@ -147,27 +151,6 @@ void RingConsolePanel::sendCommand()
         MSG_("id : "+Utils::toString(id));
         return;
     }
-    else if (input == "getContactsList") {
-        auto list = ContactListModel::instance->contactsList;
-        MSG_("list of calls returned by the daemon :");
-        for (auto contact : list) {
-            MSG_("name : " + Utils::toString(contact->_name));
-            MSG_("ringId : " + Utils::toString(contact->ringID_));
-        }
-        return;
-    }
-    else if (input == "placeCall") {
-        if (parameter1.empty()) {
-            MSG_("contact name missing");
-            return;
-        }
-        auto contact = ContactListModel::instance->findContactByName(Utils::toPlatformString(parameter1));
-        if (!contact) {
-            MSG_("contact "+parameter1+" not found");
-            return;
-        }
-        RingD::instance->placeCall(contact);
-    }
 
     MSG_(">> error, command \'" + input + "\' not found");
 }
diff --git a/RingD.cpp b/RingD.cpp
index b969492f56a645eb68010e0f3440370ca01df8a6..5734526e2faf5c4526803d1e4f8679dbc2061d9f 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -29,11 +29,9 @@
 #include "fileutils.h"
 #include "account_schema.h"
 #include "account_const.h"
-#include "string_utils.h" // used to get some const expr like TRUE_STR
+#include "string_utils.h"
 #include "gnutls\gnutls.h"
-#include "media_const.h" // used to get some const expr like MEDIA_TYPE_VIDEO
-
-#include "SmartPanel.xaml.h"
+#include "media_const.h"
 
 using namespace Windows::ApplicationModel::Core;
 using namespace Windows::Storage;
@@ -42,43 +40,82 @@ using namespace Windows::Media;
 using namespace Windows::Media::MediaProperties;
 using namespace Windows::Media::Capture;
 using namespace Windows::System::Threading;
+using namespace Windows::Globalization::DateTimeFormatting;
+using namespace Windows::UI::ViewManagement;
+using namespace Windows::System;
 
 using namespace RingClientUWP;
 using namespace RingClientUWP::Utils;
 using namespace RingClientUWP::ViewModel;
 
-using namespace Windows::UI::ViewManagement;
-
-using namespace Windows::System;
-
 void
-RingClientUWP::RingD::reloadAccountList()
+RingD::InternetConnectionChanged(Platform::Object^ sender)
 {
+    hasInternet_ = Utils::hasInternet();
+    networkChanged();
+    connectivityChanged();
+}
+
+RingD::AccountDetailsBlob
+RingD::getAllAccountDetails()
+{
+    RingD::AccountDetailsBlob allAccountDetails;
     std::vector<std::string> accountList = DRing::getAccountList();
+    std::for_each(std::cbegin(accountList), std::cend(accountList), [&](const std::string& acc) {
+        allAccountDetails[acc] = DRing::getAccountDetails(acc);
+    });
+    return allAccountDetails;
+}
 
-    /* if for any reason there is no account at all, screen the wizard */
-    if (accountList.size() == 0) {
-        summonWizard();
-        return;
+void
+RingD::subscribeBuddies()
+{
+    for (auto account : AccountsViewModel::instance->accountsList) {
+        if (Utils::hasInternet()) {
+            auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(account->accountID_));
+            for (auto contact : contactListModel->_contactsList) {
+                if (!contact->subscribed_) {
+                    MSG_("account: " + account->accountID_ + " subscribing to buddy presence for ringID: " + contact->ringID_);
+                    subscribeBuddy(Utils::toString(account->accountID_), Utils::toString(contact->ringID_), true);
+                    contact->subscribed_ = true;
+                }
+            }
+        }
     }
+}
 
-    std::vector<std::string>::reverse_iterator rit = accountList.rbegin();
-
-    for (; rit != accountList.rend(); ++rit) {
-        std::map<std::string,std::string> accountDetails = DRing::getAccountDetails(*rit);
+void
+RingD::parseAccountDetails(const AccountDetailsBlob& allAccountDetails)
+{
+    std::for_each(std::cbegin(allAccountDetails), std::cend(allAccountDetails),
+        [=](std::pair<std::string, AccountDetails> acc) {
+        auto accountId = acc.first;
+        auto accountDetails = acc.second;
 
         auto type = accountDetails.find(DRing::Account::ConfProperties::TYPE)->second;
         if (type == "RING") {
             auto  ringID = accountDetails.find(DRing::Account::ConfProperties::USERNAME)->second;
             if (!ringID.empty())
                 ringID = ringID.substr(5);
-
+            bool active = (accountDetails.find(DRing::Account::ConfProperties::ENABLED)->second == ring::TRUE_STR)
+                ? true
+                : false;
             bool upnpState = (accountDetails.find(DRing::Account::ConfProperties::UPNP_ENABLED)->second == ring::TRUE_STR)
-                             ? true
-                             : false;
+                ? true
+                : false;
+            bool autoAnswer = (accountDetails.find(DRing::Account::ConfProperties::AUTOANSWER)->second == ring::TRUE_STR)
+                ? true
+                : false;
+            bool dhtPublicInCalls = (accountDetails.find(DRing::Account::ConfProperties::DHT::PUBLIC_IN_CALLS)->second == ring::TRUE_STR)
+                ? true
+                : false;
+            bool turnEnabled = (accountDetails.find(DRing::Account::ConfProperties::TURN::ENABLED)->second == ring::TRUE_STR)
+                ? true
+                : false;
+            auto turnAddress = accountDetails.find(DRing::Account::ConfProperties::TURN::SERVER)->second;
             auto alias = accountDetails.find(DRing::Account::ConfProperties::ALIAS)->second;
             auto deviceId = accountDetails.find(DRing::Account::ConfProperties::RING_DEVICE_ID)->second;
-            auto accountId = *rit;
+            auto deviceName = accountDetails.find(DRing::Account::ConfProperties::RING_DEVICE_NAME)->second;
 
             auto account = AccountsViewModel::instance->findItem(Utils::toPlatformString(accountId));
 
@@ -87,16 +124,77 @@ RingClientUWP::RingD::reloadAccountList()
                 account->_upnpState = upnpState;
                 account->accountType_ = Utils::toPlatformString(type);
                 account->ringID_ = Utils::toPlatformString(ringID);
+                // load contact requests for the account
+                auto contactRequests = DRing::getTrustRequests(accountId);
+                if (auto contactListModel = AccountsViewModel::instance->getContactListModel(std::string(accountId))) {
+                    for (auto& cr : contactRequests) {
+                        auto ringId = cr.at("from");
+                        auto timeReceived = cr.at("received");
+                        auto payload = cr.at("payload");
+                        auto fromP = Utils::toPlatformString(ringId);
+                        auto contact = contactListModel->findContactByRingId(fromP);
+                        if (contact == nullptr) {
+                            contact = contactListModel->addNewContact(fromP, fromP, TrustStatus::INCOMING_CONTACT_REQUEST, false);
+
+                            contactListModel->saveContactsToFile();
+                            AccountsViewModel::instance->raiseUnreadContactRequest();
+
+                            SmartPanelItemsViewModel::instance->refreshFilteredItemsList();
+                            SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem);
+                        }
+                        else if (ContactRequestItemsViewModel::instance->findItem(contact) == nullptr) {
+                            // The name is the ring id for now
+                            contact->_name = Utils::toPlatformString(ringId);
+                            // The visible ring id will potentially be replaced by a username after a lookup
+                            RingD::instance->lookUpAddress(accountId, Utils::toPlatformString(ringId));
+
+                            auto vcard = contact->getVCard();
+                            auto parsedPayload = VCardUtils::parseContactRequestPayload(payload);
+                            std::string vcpart;
+                            try {
+                                vcpart.assign(parsedPayload.at("VCARD"));
+                            }
+                            catch (const std::exception& e) {
+                                MSG_(e.what());
+                            }
+                            if (!vcpart.empty()) {
+                                vcard->setData(vcpart);
+                                vcard->completeReception();
+                                contact->_displayName = Utils::toPlatformString(vcard->getPart("FN"));
+                            }
+
+                            auto newContactRequest = ref new ContactRequestItem();
+                            newContactRequest->_contact = contact;
+                            ContactRequestItemsViewModel::instance->itemsList->InsertAt(0, newContactRequest);
+
+                            ContactRequestItemsViewModel::instance->refreshFilteredItemsList();
+                            ContactRequestItemsViewModel::instance->update(ViewModel::NotifyStrings::notifyContactRequestItem);
+                        }
+                    }
+                }
                 accountUpdated(account);
             }
             else {
-                if (!ringID.empty())
-                    RingClientUWP::ViewModel::AccountsViewModel::instance->addRingAccount(alias, ringID, accountId, deviceId, upnpState);
+                if (!ringID.empty()) {
+                    AccountsViewModel::instance->addRingAccount(alias,
+                        ringID,
+                        accountId,
+                        deviceId,
+                        deviceName,
+                        active,
+                        upnpState,
+                        autoAnswer,
+                        dhtPublicInCalls,
+                        turnEnabled,
+                        turnAddress);
+                }
             }
         }
         else { /* SIP */
             auto alias = accountDetails.find(DRing::Account::ConfProperties::ALIAS)->second;
-            auto accountId = *rit;
+            bool active = (accountDetails.find(DRing::Account::ConfProperties::ENABLED)->second == ring::TRUE_STR)
+                ? true
+                : false;
             auto sipHostname = accountDetails.find(DRing::Account::ConfProperties::HOSTNAME)->second;
             auto sipUsername = accountDetails.find(DRing::Account::ConfProperties::USERNAME)->second;
             auto sipPassword = accountDetails.find(DRing::Account::ConfProperties::PASSWORD)->second;
@@ -112,15 +210,21 @@ RingClientUWP::RingD::reloadAccountList()
                 accountUpdated(account);
             }
             else {
-                RingClientUWP::ViewModel::AccountsViewModel::instance->addSipAccount(alias, accountId, sipHostname, sipUsername, sipPassword);
+                AccountsViewModel::instance->addSipAccount(alias,
+                    accountId,
+                    active,
+                    sipHostname,
+                    sipUsername,
+                    sipPassword);
             }
-
-            sipPassword = ""; // avoid to keep password in memory
         }
-    }
+    });
+}
 
-    // load user preferences
-    Configuration::UserPreferences::instance->load();
+void
+RingD::connectivityChanged()
+{
+    DRing::connectivityChanged();
 }
 
 /* nb: send message during conversation not chat video message */
@@ -139,21 +243,20 @@ void RingClientUWP::RingD::sendAccountTextMessage(String^ message)
     std::string accountId3(accountId2.begin(), accountId2.end());
 
     /* payload(s) */
-    std::wstring message2(message->Begin());
-    std::string message3(message2.begin(), message2.end());
+    IBuffer^ buffUTF8 = CryptographicBuffer::ConvertStringToBinary(message, BinaryStringEncoding::Utf8);
+    auto stdMessage = Utils::getData(buffUTF8);
     std::map<std::string, std::string> payloads;
-    payloads["text/plain"] = message3;
+    payloads["text/plain"] = stdMessage;
 
     /* daemon */
-    auto sent = DRing::sendAccountTextMessage(accountId3, toRingId3, payloads);
+    auto sentToken = DRing::sendAccountTextMessage(accountId3, toRingId3, payloads);
 
     /* conversation */
-    if (sent) {
-        contact->_conversation->addMessage(""/* date not yet used*/, MSG_FROM_ME, message);
+    if (sentToken) {
+        contact->_conversation->addMessage(MSG_FROM_ME, message, std::time(nullptr), false, sentToken.ToString());
 
         /* save contacts conversation to disk */
         contact->saveConversationToFile();
-
     } else {
         WNG_("message not sent, see daemon outputs");
     }
@@ -182,9 +285,20 @@ void RingClientUWP::RingD::sendSIPTextMessage(String^ message)
     std::map<std::string, std::string> payloads;
     payloads["text/plain"] = message3;
 
-    /* daemon */
-    DRing::sendTextMessage(callId3, payloads, accountId3, true /*not used*/);
-    contact->_conversation->addMessage(""/* date not yet used*/, MSG_FROM_ME, message);
+    auto task = ref new RingD::Task(Request::SendSIPMessage);
+
+    task->_callid_new = callId3;
+    task->_accountId_new = accountId3;
+    task->_payload2 = payloads;
+
+    tasksList_.push(task);
+
+    // No id generated for sip messages within a conversation, so let's generate one
+    // so we can track message order.
+    auto messageId = Utils::toPlatformString(Utils::genID(0LL, 9999999999999999999LL));
+    contact->_conversation->addMessage(MSG_FROM_ME, message, std::time(nullptr), false, messageId);
+
+    /* save contacts conversation to disk */
     contact->saveConversationToFile();
 }
 
@@ -196,8 +310,13 @@ void RingClientUWP::RingD::sendSIPTextMessageVCF(std::string callID, std::map<st
     std::wstring accountId2(accountId->Begin());
     std::string accountId3(accountId2.begin(), accountId2.end());
 
-    /* daemon */
-    DRing::sendTextMessage(callID, message, accountId3, true /*not used*/);
+    auto task = ref new RingD::Task(Request::SendSIPMessage);
+
+    task->_callid_new = callID;
+    task->_accountId_new = accountId3;
+    task->_payload2 = message;
+
+    tasksList_.push(task);
 }
 
 void
@@ -205,8 +324,9 @@ RingD::createRINGAccount(String^ alias, String^ archivePassword, bool upnp, Stri
 {
     editModeOn_ = true;
 
-    auto frame = dynamic_cast<Frame^>(Window::Current->Content);
-    dynamic_cast<RingClientUWP::MainPage^>(frame->Content)->showLoadingOverlay(true, true);
+    showLoadingOverlay(ResourceMananger::instance->getStringResource("_m_creating_account_"), SuccessColor);
+
+    isAddingAccount = true;
 
     auto task = ref new RingD::Task(Request::AddRingAccount);
 
@@ -223,7 +343,9 @@ RingD::createSIPAccount(String^ alias, String^ sipPassword, String^ sipHostname,
 {
     editModeOn_ = true;
 
-    auto frame = dynamic_cast<Frame^>(Window::Current->Content);
+    showLoadingOverlay(ResourceMananger::instance->getStringResource("_m_creating_account_"), SuccessColor);
+
+    isAddingAccount = true;
 
     auto task = ref new RingD::Task(Request::AddSIPAccount);
 
@@ -257,6 +379,7 @@ void RingClientUWP::RingD::placeCall(Contact^ contact)
     auto task = ref new RingD::Task(Request::PlaceCall);
     task->_accountId_new = Utils::toString(contact->_accountIdAssociated);
     task->_ringId_new = Utils::toString(contact->ringID_);
+    task->_sipUsername = contact->_name;
     tasksList_.push(task);
 
 }
@@ -275,9 +398,21 @@ void RingClientUWP::RingD::unPauseCall(const std::string & callId)
     tasksList_.push(task);
 }
 
-void RingClientUWP::RingD::raiseWindowResized()
+void RingClientUWP::RingD::raiseWindowResized(float width, float height)
+{
+    windowResized(width, height);
+}
+
+void
+RingD::raiseVCardUpdated(Contact^ contact)
+{
+    vCardUpdated(contact);
+}
+
+void
+RingD::raiseShareRequested()
 {
-    windowResized();
+    shareRequested();
 }
 
 void RingClientUWP::RingD::cancelOutGoingCall2(String ^ callId)
@@ -305,7 +440,7 @@ void RingClientUWP::RingD::unPauseCall(String ^ callId) // do not use it, rm dur
     tasksList_.push(ref new RingD::Task(Request::UnPauseCall, callId));
 }
 
-void RingClientUWP::RingD::askToRefreshKnownDevices(String^ accountId)
+void RingClientUWP::RingD::getKnownDevices(String^ accountId)
 {
     auto task = ref new RingD::Task(Request::GetKnownDevices);
     task->_accountId = accountId;
@@ -343,8 +478,6 @@ void RingClientUWP::RingD::updateAccount(String^ accountId)
 {
     editModeOn_ = true;
 
-    auto frame = dynamic_cast<Frame^>(Window::Current->Content);
-
     auto task = ref new RingD::Task(Request::UpdateAccount);
     task->_accountId_new = Utils::toString(accountId);
 
@@ -353,71 +486,124 @@ void RingClientUWP::RingD::updateAccount(String^ accountId)
 
 void RingClientUWP::RingD::deleteAccount(String ^ accountId)
 {
-    editModeOn_ = true;
+    isDeletingAccount = true;
 
-    auto frame = dynamic_cast<Frame^>(Window::Current->Content);
+    editModeOn_ = true;
 
     auto task = ref new RingD::Task(Request::DeleteAccount);
-    task->_accountId = accountId;
+    task->_accountId_new = Utils::toString(accountId);
 
     tasksList_.push(task);
 }
 
 void RingClientUWP::RingD::registerThisDevice(String ^ pin, String ^ archivePassword)
 {
+    isAddingDevice = true;
     tasksList_.push(ref new RingD::Task(Request::RegisterDevice, pin, archivePassword));
     archivePassword = "";
     pin = "";
 }
 
 void
-ShowCallToast(String^ callId, String^ from = nullptr)
-{
-    String^ payload =
-        "<toast scenario='incomingCall'> "
-            "<visual> "
-                "<binding template='ToastGeneric'>"
-                    "<text>GNU Ring - Incoming call"+ (from?(" from " + from):"") +"</text>"
-                "</binding>"
-            "</visual>"
-            /*"<actions>"
-                "<action arguments = '" + callId + "' content = 'Accept' />"
-            "</actions>"*/
-            "<audio src='ms-appx:///Assets/default.wav' loop='true'/>"
-        "</toast>";
+RingD::ShowCallToast(bool background, String^ callId, String^ name)
+{
+    auto item = SmartPanelItemsViewModel::instance->findItem(callId);
+
+    if (!item)
+        return;
+
+    auto bestName = name != nullptr ? name : item->_contact->_bestName2;
+    String^ avatarUri = item->_contact->_avatarImage;
+    if (avatarUri == nullptr || avatarUri == L" ")
+        avatarUri = ref new String(L"ms-appx:///Assets/TESTS/contactAvatar.png");
+
+    String^ xml =
+        "<toast scenario='incomingCall'>"
+        "<visual> "
+        "<binding template='ToastGeneric'>"
+        "<image placement='appLogoOverride' hint-crop='circle' src='";
+
+    xml += avatarUri + "'/>";
+
+    xml += "<text>" + bestName + "</text>";
+
+    auto acceptArgString = "a:" + callId;
+    auto refuseArgString = "r:" + callId;
+
+    xml +=
+        "</binding>"
+        "</visual>"
+        "<actions>"
+        "<action activationType='foreground' arguments= '" + acceptArgString + "' content='Accept' />"
+        "<action activationType='foreground' arguments= '" + refuseArgString + "' content='Refuse' />"
+        "</actions>"
+        "<audio silent='true' loop='true'/></toast>";
 
     auto doc = ref new XmlDocument();
-    doc->LoadXml(payload);
+    doc->LoadXml(xml);
 
-    auto toast = ref new ToastNotification(doc);
-    ToastNotificationManager::CreateToastNotifier()->Show(toast);
+    toastCall = ref new ToastNotification(doc);
+    toastCall->Dismissed += ref new TypedEventHandler<ToastNotification ^, ToastDismissedEventArgs ^>(
+        [this](ToastNotification ^sender, ToastDismissedEventArgs ^args) {callToastPopped_ = false; });
+    toastCall->Failed += ref new TypedEventHandler<ToastNotification ^, ToastFailedEventArgs ^>(
+        [this](ToastNotification ^sender, ToastFailedEventArgs ^args) {callToastPopped_ = false; });
+    toaster->Show(toastCall);
+    callToastPopped_ = true;
 }
 
 void
-ShowMsgToast(String^ from, String^ payload)
+RingD::ShowIMToast(bool background, String^ from, String^ payload, String^ name)
 {
+    auto item = SmartPanelItemsViewModel::instance->findItemByRingID(from);
+
+    if (!item)
+        return;
+
+    IBuffer^ buffUTF8 = CryptographicBuffer::ConvertStringToBinary(payload, BinaryStringEncoding::Utf8);
+    auto binMessage = Utils::toPlatformString(Utils::getData(buffUTF8));
+
+    auto bestName = name != nullptr ? name : item->_contact->_bestName2;
+    String^ avatarUri = item->_contact->_avatarImage;
+    if (avatarUri == nullptr || avatarUri == L" ")
+        avatarUri = ref new String(L"ms-appx:///Assets/TESTS/contactAvatar.png");
+
     String^ xml =
-        "<toast scenario='incomingMessage'> "
-            "<visual> "
-                "<binding template='ToastGeneric'>"
-                    "<text>" + from + " : " + payload + "</text>"
-                "</binding>"
-            "</visual>"
-            "<actions>"
-                "<action arguments = '" + from + "'/>"
-            "</actions>"
-            "<audio src='ms-appx:///Assets/message_notification_sound.wav' loop='false'/>"
-        "</toast>";
+        "<toast scenario='incomingMessage' duration='short'>"
+        "<visual> "
+        "<binding template='ToastGeneric'>"
+        "<image placement='appLogoOverride' hint-crop='circle' src='";
+
+    xml += avatarUri + "'/>";
+
+    xml += "<text>" + bestName + "</text>";
+
+    xml += "<text>" + binMessage + "</text>";
+
+    xml +=
+        "</binding>"
+        "</visual>";
+        /*"<actions>"
+        "<input id='replyTextBox' type='text' placeholderContent='Type a reply'/>"
+        "<action content='Reply' arguments='action=reply&amp;convId=9318' activationType='background' hint-inputId='replyTextBox'/>"
+        "</actions>";*/
+
+    xml += "<audio src='ms-appx:///Assets/ringtone_notify.wav' loop='false'/></toast>";
 
     auto doc = ref new XmlDocument();
     doc->LoadXml(xml);
 
-    auto toast = ref new ToastNotification(doc);
-    ToastNotificationManager::CreateToastNotifier()->Show(toast);
+    toastText = ref new ToastNotification(doc);
+    toaster->Show(toastText);
 }
 
 void
-RingD::HandleIncomingMessage(   const std::string& callId,
+RingD::HideToast(ToastNotification^ toast)
+{
+    toaster->Hide(toast);
+}
+
+void
+RingD::handleIncomingMessage(   const std::string& callId,
                                 const std::string& accountId,
                                 const std::string& from,
                                 const std::map<std::string, std::string>& payloads)
@@ -459,11 +645,10 @@ RingD::registerCallbacks()
     dispatcher = CoreApplication::MainView->CoreWindow->Dispatcher;
 
     callHandlers = {
-        // use IncomingCall only to register the call client sided, use StateChange to determine the impact on the UI
         DRing::exportable_callback<DRing::CallSignal::IncomingCall>([this](
-            const std::string& accountId,
-            const std::string& callId,
-            const std::string& from)
+                    const std::string& accountId,
+                    const std::string& callId,
+                    const std::string& from)
         {
             MSG_("<IncomingCall>");
             MSG_("accountId = " + accountId);
@@ -480,19 +665,36 @@ RingD::registerCallbacks()
             CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
                 CoreDispatcherPriority::High, ref new DispatchedHandler([=]()
             {
-                incomingCall(accountId2, callId2, from2);
-                stateChange(callId2, CallStatus::INCOMING_RINGING, 0);
-
+                auto account = AccountListItemsViewModel::instance->findItem(accountId2)->_account;
                 if (auto contactListModel = AccountsViewModel::instance->getContactListModel(std::string(accountId))) {
-                    auto contact = contactListModel->findContactByRingId(from2);
+                    Contact^ contact;
+                    if (account->accountType_ == "RING")
+                        contact = contactListModel->findContactByRingId(from2);
+                    else if (account->accountType_ == "SIP")
+                        contact = contactListModel->findContactByName(from2);
                     if (contact) {
                         auto item = SmartPanelItemsViewModel::instance->findItem(contact);
                         if (item)
                             item->_callId = callId2;
                     }
                 }
+
+                if (account->_autoAnswer) {
+                    incomingCall(accountId2, callId2, from2);
+                    acceptIncommingCall(callId2);
+                    stateChange(callId2, CallStatus::AUTO_ANSWERING, 0);
+                }
+                else {
+                    incomingCall(accountId2, callId2, from2);
+                    stateChange(callId2, CallStatus::INCOMING_RINGING, 0);
+                }
             }));
         }),
+        DRing::exportable_callback<DRing::CallSignal::SmartInfo>([this](
+            const std::map<std::string, std::string>& info)
+        {
+            Utils::runOnUIThread([this, info]() {updateSmartInfo(info); });
+        }),
         DRing::exportable_callback<DRing::CallSignal::PeerHold>([this](
                     const std::string& callId,
                     bool state)
@@ -551,46 +753,42 @@ RingD::registerCallbacks()
             MSG_("state = " + state);
             MSG_("code = " + std::to_string(code));
 
+            auto item = SmartPanelItemsViewModel::instance->findItem(Utils::toPlatformString(callId));
+            if (item == nullptr)
+                return;
+
             auto callId2 = toPlatformString(callId);
             auto state2 = toPlatformString(state);
 
             auto state3 = translateCallStatus(state2);
 
-            if (state3 == CallStatus::OUTGOING_RINGING ||
-                    state3 == CallStatus::INCOMING_RINGING) {
-                try {
-                    Configuration::UserPreferences::instance->sendVCard(callId);
-                }
-                catch (Exception^ e) {
-                    EXC_(e);
-                }
-            }
-
-            if (state3 == CallStatus::INCOMING_RINGING) {
-                if (isInBackground) {
-                    ringtone_->Start();
-                    ShowCallToast(callId2);
-                }
-                else
-                    ringtone_->Start();
-            }
-
-            if (state3 == CallStatus::IN_PROGRESS) {
-                ringtone_->Stop();
-            }
-
-            if (state3 == CallStatus::ENDED ||
-                (state3 == CallStatus::NONE && code == 106) ) {
-                DRing::hangUp(callId); // solve a bug in the daemon API.
-                ringtone_->Stop();
-            }
-
             CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
                 CoreDispatcherPriority::High, ref new DispatchedHandler([=]()
             {
                 stateChange(callId2, state3, code);
             }));
         }),
+        DRing::exportable_callback<DRing::CallSignal::IncomingMessage>([&](
+                    const std::string& callId,
+                    const std::string& from,
+                    const std::map<std::string, std::string>& payloads)
+        {
+            MSG_("<IncomingMessage>");
+            MSG_("callId = " + callId);
+            MSG_("from = " + from);
+
+            handleIncomingMessage(callId, "", from, payloads);
+        }),
+        DRing::exportable_callback<DRing::DebugSignal::MessageSend>([&](const std::string& msg)
+        {
+            if (debugModeOn_) {
+                DMSG_(msg);
+            }
+        })
+    };
+    registerCallHandlers(callHandlers);
+
+    configurationHandlers = {
         DRing::exportable_callback<DRing::ConfigurationSignal::IncomingAccountMessage>([&](
                     const std::string& accountId,
                     const std::string& from,
@@ -600,18 +798,38 @@ RingD::registerCallbacks()
             MSG_("accountId = " + accountId);
             MSG_("from = " + from);
 
-            HandleIncomingMessage("", accountId, from, payloads);
+            handleIncomingMessage("", accountId, from, payloads);
         }),
-        DRing::exportable_callback<DRing::CallSignal::IncomingMessage>([&](
-                    const std::string& callId,
-                    const std::string& from,
-                    const std::map<std::string, std::string>& payloads)
+        DRing::exportable_callback<DRing::ConfigurationSignal::AccountMessageStatusChanged>([this](
+                    const std::string& account_id,
+                    uint64_t message_id,
+                    const std::string& to,
+                    int state)
         {
-            MSG_("<IncomingMessage>");
-            MSG_("callId = " + callId);
-            MSG_("from = " + from);
+            MSG_("<AccountMessageStatusChanged>");
+            MSG_("account_id = " + account_id);
+            MSG_("message_id = " + message_id);
+            MSG_("to = " + Utils::toPlatformString(to));
+            MSG_("state = " + state.ToString());
+            dispatcher->RunAsync(CoreDispatcherPriority::High,
+                ref new DispatchedHandler([=]() {
 
-            HandleIncomingMessage(callId, "", from, payloads);
+                // acquittement de message
+                auto contactListModel = AccountsViewModel::instance->getContactListModel(std::string(account_id));
+                if (auto contact = contactListModel->findContactByRingId(Utils::toPlatformString(to))) {
+                    auto conversation = contact->_conversation;
+                    if (conversation) {
+                        for (const auto& msg : conversation->_messages) {
+                            if (msg->MessageIdInteger == message_id &&
+                                state == Utils::toUnderlyingValue(DRing::Account::MessageStates::SENT)) {
+                                messageStatusUpdated(msg->MessageId, state);
+                                msg->IsReceived = true;
+                                contact->saveConversationToFile();
+                            }
+                        }
+                    }
+                }
+            }));
         }),
         DRing::exportable_callback<DRing::ConfigurationSignal::RegistrationStateChanged>([this](
                     const std::string& account_id, const std::string& state,
@@ -619,101 +837,311 @@ RingD::registerCallbacks()
         {
             MSG_("<RegistrationStateChanged>: ID = " + account_id + " state = " + state);
             if (state == DRing::Account::States::REGISTERED) {
-                CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
-                ref new DispatchedHandler([=]() {
-                    reloadAccountList();
-                    // enleves ce qui suit et utilises des evenements.
-                    registrationStateRegistered();
-                    // mettre a jour le wizard
-                    /*if (editModeOn_) {
-                        auto frame = dynamic_cast<Frame^>(Window::Current->Content);
-                        dynamic_cast<RingClientUWP::MainPage^>(frame->Content)->showLoadingOverlay(false, false);
-                        editModeOn_ = false;
-                    }*/
-                    setLoadingStatusText("Registration successful", "#ff00ff00");
-                }));
+                auto allAccountDetails = getAllAccountDetails();
+                Utils::runOnUIThread([this, account_id, allAccountDetails]() {
+                    if (auto account = AccountsViewModel::instance->findItem(Utils::toPlatformString(account_id)))
+                        account->_registrationState = RegistrationState::REGISTERED;
+                    parseAccountDetails(allAccountDetails);
+                    subscribeBuddies();
+                    if (isAddingAccount)
+                        OnaccountAdded();
+                    else if (isUpdatingAccount)
+                        OnaccountUpdated();
+                });
+            }
+            else if (state == DRing::Account::States::UNREGISTERED) {
+                auto allAccountDetails = getAllAccountDetails();
+                Utils::runOnUIThread([this, account_id, allAccountDetails]() {
+                    if (auto account = AccountsViewModel::instance->findItem(Utils::toPlatformString(account_id)))
+                        account->_registrationState = RegistrationState::UNREGISTERED;
+                    parseAccountDetails(allAccountDetails);
+                    registrationStateUnregistered(account_id);
+                    if (isAddingAccount)
+                        OnaccountAdded();
+                    else if (isUpdatingAccount)
+                        OnaccountUpdated();
+                });
             }
             else if (state == DRing::Account::States::TRYING) {
-                CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
-                ref new DispatchedHandler([=]() {
-                    setLoadingStatusText("Attempting to register account...", "#ff00f0f0");
-                }));
+                auto allAccountDetails = getAllAccountDetails();
+                Utils::runOnUIThread([this, account_id, allAccountDetails]() {
+                    if (auto account = AccountsViewModel::instance->findItem(Utils::toPlatformString(account_id)))
+                        account->_registrationState = RegistrationState::TRYING;
+                    parseAccountDetails(allAccountDetails);
+                    subscribeBuddies();
+                    Configuration::UserPreferences::instance->load();
+                    registrationStateTrying(account_id);
+                    if (isAddingAccount)
+                        OnaccountAdded();
+                    else if (isUpdatingAccount)
+                        OnaccountUpdated();
+                });
             }
             else if (state == DRing::Account::States::ERROR_GENERIC
-                     || state == DRing::Account::States::ERROR_AUTH
-                     || state == DRing::Account::States::ERROR_NETWORK
-                     || state == DRing::Account::States::ERROR_HOST
-                     || state == DRing::Account::States::ERROR_CONF_STUN
-                     || state == DRing::Account::States::ERROR_EXIST_STUN
-                     || state == DRing::Account::States::ERROR_SERVICE_UNAVAILABLE
-                     || state == DRing::Account::States::ERROR_NOT_ACCEPTABLE
-                     || state == DRing::Account::States::ERROR_NEED_MIGRATION
-                     || state == DRing::Account::States::REQUEST_TIMEOUT) {
-                CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
-                ref new DispatchedHandler([=]() {
-                    reloadAccountList();
+                || state == DRing::Account::States::ERROR_AUTH
+                || state == DRing::Account::States::ERROR_NETWORK
+                || state == DRing::Account::States::ERROR_HOST
+                || state == DRing::Account::States::ERROR_CONF_STUN
+                || state == DRing::Account::States::ERROR_EXIST_STUN
+                || state == DRing::Account::States::ERROR_SERVICE_UNAVAILABLE
+                || state == DRing::Account::States::ERROR_NOT_ACCEPTABLE
+                || state == DRing::Account::States::ERROR_NEED_MIGRATION
+                || state == DRing::Account::States::REQUEST_TIMEOUT) {
+                auto allAccountDetails = getAllAccountDetails();
+                Utils::runOnUIThread([this, account_id, allAccountDetails]() {
+                    parseAccountDetails(allAccountDetails);
                     registrationStateErrorGeneric(account_id);
-                    setLoadingStatusText(Utils::toPlatformString("Failed to register account: " + state), "#ffff0000");
-                    // ajoute cet event dans le wizard
-                }));
+                    if (isAddingAccount)
+                        OnaccountAdded();
+                });
             }
         }),
         DRing::exportable_callback<DRing::ConfigurationSignal::AccountsChanged>([this]()
         {
             MSG_("<AccountsChanged>");
-            CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
-            ref new DispatchedHandler([=]() {
-                reloadAccountList();
-                /*if (editModeOn_) {
-                    auto frame = dynamic_cast<Frame^>(Window::Current->Content);
-                    dynamic_cast<RingClientUWP::MainPage^>(frame->Content)->showLoadingOverlay(false, false);
-                    editModeOn_ = false;
+            if (isDeletingAccount) {
+                /*if (AccountListItemsViewModel::instance->itemsList->Size != 0) {
+                    accountUpdated(nullptr);
                 }*/
+                OnaccountDeleted();
+            }
+            else {
+                auto allAccountDetails = getAllAccountDetails();
+                Utils::runOnUIThread([this, allAccountDetails]() {
+                    parseAccountDetails(allAccountDetails);
+                });
+            }
+        }),
+        DRing::exportable_callback<DRing::ConfigurationSignal::GetAppDataPath>([this](
+                    const std::string& name, std::vector<std::string>* paths)
+        {
+            paths->emplace_back(localFolder_);
+        }),
+        DRing::exportable_callback<DRing::ConfigurationSignal::GetDeviceName>([this](
+                    std::vector<std::string>* hostNames)
+        {
+            hostNames->emplace_back(Utils::getHostName());
+        }),
+        DRing::exportable_callback<DRing::ConfigurationSignal::KnownDevicesChanged>([&](
+                    const std::string& accountId, const std::map<std::string, std::string>& devices)
+        {
+            dispatcher->RunAsync(CoreDispatcherPriority::High,
+            ref new DispatchedHandler([=]() {
+                if (isAddingDevice) {
+                    isAddingDevice = false;
+                    hideLoadingOverlay("This device has been successfully added", SuccessColor);
+                }
+                MSG_("<KnownDevicesChanged>");
+                getKnownDevices(Utils::toPlatformString(accountId));
             }));
         }),
-        DRing::exportable_callback<DRing::DebugSignal::MessageSend>([&](const std::string& msg)
+        DRing::exportable_callback<DRing::ConfigurationSignal::ExportOnRingEnded>([&](
+                    const std::string& accountId, int status, const std::string& pin)
         {
-            if (debugModeOn_) {
-                dispatcher->RunAsync(CoreDispatcherPriority::High,
-                ref new DispatchedHandler([=]() {
-                    std::string displayMsg = msg.substr(56);
-                    setLoadingStatusText(Utils::toPlatformString(displayMsg.substr(0,40) + "..."), "#ff000000");
-                    DMSG_(msg);
-                }));
-            }
-        })
-    };
-    registerCallHandlers(callHandlers);
+            auto accountId2 = Utils::toPlatformString(accountId);
+            auto pin2 = (pin.empty()) ? "Error bad password" : "Your generated PIN : " + Utils::toPlatformString(pin);
+            dispatcher->RunAsync(CoreDispatcherPriority::High,
+            ref new DispatchedHandler([=]() {
+                exportOnRingEnded(accountId2, pin2);
+            }));
+        }),
+        DRing::exportable_callback<DRing::ConfigurationSignal::RegisteredNameFound>([this](
+                    const std::string &accountId, int status, const std::string &address, const std::string &name)
+        {
+            MSG_("<RegisteredNameFound>" + name + " : " + address + " status=" +std::to_string(status));
+            if (accountId.empty() && address.empty() && name.empty())
+                return;
+            CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,
+            ref new DispatchedHandler([=]() {
+                switch (status)
+                {
+                case 0: // everything went fine. Name/address pair was found.
+                    registeredNameFound(LookupStatus::SUCCESS, accountId, address, name);
+                    break;
+                case 1: // provided name is not valid.
+                    registeredNameFound(LookupStatus::INVALID_NAME, accountId, address, name);
+                    break;
+                case 2: // everything went fine. Name/address pair was not found.
+                    registeredNameFound(LookupStatus::NOT_FOUND, accountId, address, name);
+                    break;
+                case 3: // An error happened
+                    registeredNameFound(LookupStatus::ERRORR, accountId, address, name);
+                    break;
+                }
+            }));
+        }),
+        DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>([this](
+                    const std::string& accountId, const std::map<std::string, std::string>& details)
+        {
+            ref new DispatchedHandler([=]() {
+                volatileDetailsChanged(accountId, details);
+            });
+        }),
+        DRing::exportable_callback<DRing::ConfigurationSignal::IncomingTrustRequest>([&](
+                    const std::string& account_id,
+                    const std::string& from,
+                    const std::vector<uint8_t>& payload,
+                    time_t received)
+        {
+            dispatcher->RunAsync(CoreDispatcherPriority::High,
+            ref new DispatchedHandler([=]() {
+                auto payloadString = std::string(payload.begin(), payload.end());
+                MSG_("IncomingTrustRequest");
+                MSG_("account_id = " + account_id);
+                MSG_("from = " + from);
+                MSG_("received = " + received.ToString());
+                MSG_("payload = " + payloadString);
+
+                // First check if this TR has a corresponding contact. If not, add a contact
+                // to the account's contact list with a trust status flag indicating that
+                // it should be treated as a TR, and only appear in the contact request list.
+                if (auto contactListModel = AccountsViewModel::instance->getContactListModel(std::string(account_id))) {
+                    auto fromP = Utils::toPlatformString(from);
+                    auto contact = contactListModel->findContactByRingId(fromP);
+
+                    // If the contact exists, we should check to see if we have previously
+                    // sent a TR to the peer. If, so we can accept this TR immediately.
+                    // Otherwise, if it is not already been trusted, we can ignore it completely.
+                    if (contact) {
+                        if (contact->_trustStatus == TrustStatus::CONTACT_REQUEST_SENT) {
+                            // get the vcard first
+                            auto vcard = contact->getVCard();
+                            auto parsedPayload = VCardUtils::parseContactRequestPayload(payloadString);
+                            vcard->setData(parsedPayload.at("VCARD"));
+                            vcard->completeReception();
+
+                            DRing::acceptTrustRequest(account_id, from);
+                            MSG_("Auto accepted IncomingTrustRequest");
+                            return;
+                        }
+                        else if (contact->_trustStatus != TrustStatus::UNKNOWN) {
+                            MSG_("IncomingTrustRequest ignored");
+                            return;
+                        }
+                    }
+                    else {
+                        // No contact found, so add a new contact with the INCOMNG_CONTACT_REQUEST trust status flag
+                        contact = contactListModel->addNewContact("", fromP, TrustStatus::INCOMING_CONTACT_REQUEST, false);
+                    }
 
-    getAppPathHandler =
-    {
-        DRing::exportable_callback<DRing::ConfigurationSignal::GetAppDataPath>
-        ([this](const std::string& name, std::vector<std::string>* paths) {
-            paths->emplace_back(localFolder_);
-        })
-    };
-    registerCallHandlers(getAppPathHandler);
+                    // The visible ring id will potentially be replaced by a username after a lookup
+                    RingD::instance->lookUpAddress(account_id, Utils::toPlatformString(from));
 
-    /*getAppUserNameHandler =
-    {
-        DRing::exportable_callback<DRing::ConfigurationSignal::GetAppUserName>
-        ([this](std::vector<std::string>* unames) {
+                    auto vcard = contact->getVCard();
+                    auto parsedPayload = VCardUtils::parseContactRequestPayload(payloadString);
+                    vcard->setData(parsedPayload.at("VCARD"));
+                    vcard->completeReception();
+
+                    // The name is the ring id for now
+                    contact->_name = Utils::toPlatformString(from);
+                    contact->_displayName = Utils::toPlatformString(vcard->getPart("FN"));
+
+                    contactListModel->saveContactsToFile();
+                    AccountsViewModel::instance->raiseUnreadContactRequest();
+
+                    SmartPanelItemsViewModel::instance->refreshFilteredItemsList();
+                    SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem);
+
+                    // Add a corresponding contact request control item to the list.
+                    auto newContactRequest = ref new ContactRequestItem();
+                    newContactRequest->_contact = contact;
+                    ContactRequestItemsViewModel::instance->itemsList->InsertAt(0, newContactRequest);
+
+                    ContactRequestItemsViewModel::instance->refreshFilteredItemsList();
+                    ContactRequestItemsViewModel::instance->update(ViewModel::NotifyStrings::notifyContactRequestItem);
+                }
+            }));
+        }),
+        DRing::exportable_callback<DRing::ConfigurationSignal::ContactAdded>([&](
+                    const std::string& account_id, const std::string& uri, bool confirmed)
+        {
+            dispatcher->RunAsync(CoreDispatcherPriority::High,
+            ref new DispatchedHandler([=]() {
+                MSG_("ContactAdded");
+                MSG_("account_id = " + account_id);
+                MSG_("uri = " + uri);
+                MSG_("confirmed = " + confirmed.ToString());
+
+                // If confirmed is false, we have just sent the TR and nothing need be done.
+                // If confirmed is true, the sent TR has been accepted and we can change the
+                // TrustStatus flag for the contact under the account_id, that matches the uri
+                if (confirmed) {
+                    if (auto contactListModel = AccountsViewModel::instance->getContactListModel(std::string(account_id))) {
+                        auto contact = contactListModel->findContactByRingId(Utils::toPlatformString(uri));
+                        if (contact == nullptr) {
+                            contact = contactListModel->addNewContact(  Utils::toPlatformString(uri),
+                                                                        Utils::toPlatformString(uri),
+                                                                        TrustStatus::TRUSTED, false);
+                            RingD::instance->lookUpAddress(account_id, Utils::toPlatformString(uri));
+                        }
+                        else {
+                            contact->_trustStatus = TrustStatus::TRUSTED;
+                        }
+
+                        SmartPanelItemsViewModel::instance->refreshFilteredItemsList();
+                        SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem);
+                        ContactRequestItemsViewModel::instance->update(ViewModel::NotifyStrings::notifyContactRequestItem);
+
+                        AccountsViewModel::instance->raiseContactDataModified(Utils::toPlatformString(uri), contact);
+
+                        contactListModel->saveContactsToFile();
+                    }
+                }
+            }));
+        }),
+        DRing::exportable_callback<DRing::ConfigurationSignal::ContactRemoved>([&](
+                    const std::string& account_id, const std::string& uri, bool banned)
+        {
+            dispatcher->RunAsync(CoreDispatcherPriority::High,
+            ref new DispatchedHandler([=]() {
+                MSG_("ContactRemoved");
+                MSG_("account_id = " + account_id);
+                MSG_("uri = " + uri);
+                MSG_("banned = " + banned.ToString());
+
+                // It's currently not clear to me how this signal is pertinent to the UWP client
+            }));
+        }),
+        DRing::exportable_callback<DRing::ConfigurationSignal::DeviceRevocationEnded>([&](
+                    const std::string& accountId, const std::string& device, int status)
+        {
+            MSG_("<DeviceRevocationEnded>");
+            MSG_("account_id = " + accountId);
+            MSG_("device = " + device);
+            MSG_("status = " + status.ToString());
+            switch (Utils::toEnum<DeviceRevocationResult>(status)) {
+            case DeviceRevocationResult::INVALID_CERTIFICATE:
+                hideLoadingOverlay("Certificate error while revoking device ID: " + Utils::toPlatformString(device), ErrorColor);
+                break;
+            case DeviceRevocationResult::INVALID_PASSWORD:
+                hideLoadingOverlay("Incorrect account password. Can't revoke device ID: " + Utils::toPlatformString(device), ErrorColor);
+                break;
+            case DeviceRevocationResult::SUCCESS:
+                getKnownDevices(Utils::toPlatformString(accountId));
+                hideLoadingOverlay("Device with ID: " + Utils::toPlatformString(device) + " has been successfully revoked", SuccessColor);
+                break;
+            }
+        })/*,
+        DRing::exportable_callback<DRing::ConfigurationSignal::GetAppUserName>([this](
+                    std::vector<std::string>* unames)
+        {
             unames->emplace_back(Utils::toString(
                 UserModel::instance->firstName +
                 "." +
                 UserModel::instance->lastName));
-        })
+        })*/
     };
-    registerCallHandlers(getAppUserNameHandler);*/
+    registerConfHandlers(configurationHandlers);
 
-    incomingVideoHandlers =
-    {
-        DRing::exportable_callback<DRing::VideoSignal::DeviceEvent>
-        ([this]() {
+    using namespace Video;
+    videoHandlers = {
+        DRing::exportable_callback<DRing::VideoSignal::DeviceEvent>([this]()
+        {
             MSG_("<DeviceEvent>");
         }),
-        DRing::exportable_callback<DRing::VideoSignal::DecodingStarted>
-        ([&](const std::string &id, const std::string &shmPath, int width, int height, bool isMixer) {
+        DRing::exportable_callback<DRing::VideoSignal::DecodingStarted>([&](
+                    const std::string &id, const std::string &shmPath, int width, int height, bool isMixer)
+        {
             dispatcher->RunAsync(CoreDispatcherPriority::High,
             ref new DispatchedHandler([=]() {
                 Video::VideoManager::instance->rendererManager()->startedDecoding(
@@ -724,27 +1152,24 @@ RingD::registerCallbacks()
                 incomingVideoMuted(callId2, false);
             }));
         }),
-        DRing::exportable_callback<DRing::VideoSignal::DecodingStopped>
-        ([&](const std::string &id, const std::string &shmPath, bool isMixer) {
+        DRing::exportable_callback<DRing::VideoSignal::DecodingStopped>([&](
+                    const std::string &id, const std::string &shmPath, bool isMixer)
+        {
             dispatcher->RunAsync(CoreDispatcherPriority::High,
             ref new DispatchedHandler([=]() {
                 Video::VideoManager::instance->rendererManager()->removeRenderer(Utils::toPlatformString(id));
                 auto callId2 = Utils::toPlatformString(id);
                 incomingVideoMuted(callId2, true);
             }));
-        })
-    };
-    registerVideoHandlers(incomingVideoHandlers);
-
-    using namespace Video;
-    outgoingVideoHandlers =
-    {
-        DRing::exportable_callback<DRing::VideoSignal::DeviceAdded>
-        ([this](const std::string& device) {
+        }),
+            DRing::exportable_callback<DRing::VideoSignal::DeviceAdded>([this](
+                        const std::string& device)
+        {
             MSG_("<DeviceAdded>");
         }),
-        DRing::exportable_callback<DRing::VideoSignal::ParametersChanged>
-        ([&](const std::string& device) {
+        DRing::exportable_callback<DRing::VideoSignal::ParametersChanged>([&](
+                    const std::string& device)
+        {
             dispatcher->RunAsync(CoreDispatcherPriority::High,
             ref new DispatchedHandler([=]() {
                 MSG_("<ParametersChanged>");
@@ -756,16 +1181,17 @@ RingD::registerCallbacks()
                     stoi(settings["rate"]));
             }));
         }),
-        DRing::exportable_callback<DRing::VideoSignal::StartCapture>
-        ([&](const std::string& device) {
+        DRing::exportable_callback<DRing::VideoSignal::StartCapture>([&](
+                    const std::string& device)
+        {
             dispatcher->RunAsync(CoreDispatcherPriority::High,
             ref new DispatchedHandler([=]() {
                 VideoManager::instance->captureManager()->InitializeCameraAsync(false);
                 VideoManager::instance->captureManager()->videoFrameCopyInvoker->Start();
             }));
         }),
-        DRing::exportable_callback<DRing::VideoSignal::StopCapture>
-        ([&]() {
+        DRing::exportable_callback<DRing::VideoSignal::StopCapture>([&]()
+        {
             dispatcher->RunAsync(CoreDispatcherPriority::High,
             ref new DispatchedHandler([=]() {
                 VideoManager::instance->captureManager()->StopPreviewAsync();
@@ -775,56 +1201,58 @@ RingD::registerCallbacks()
             }));
         })
     };
-    registerVideoHandlers(outgoingVideoHandlers);
+    registerVideoHandlers(videoHandlers);
 
-    nameRegistrationHandlers =
-    {
-        DRing::exportable_callback<DRing::ConfigurationSignal::KnownDevicesChanged>([&](const std::string& accountId, const std::map<std::string, std::string>& devices)
+    presenceHandlers = {
+        DRing::exportable_callback<DRing::PresenceSignal::NewBuddyNotification>([&](
+                    const std::string& account_id, const std::string& buddy_uri, int status, const std::string& /*line_status*/)
         {
             dispatcher->RunAsync(CoreDispatcherPriority::High,
-            ref new DispatchedHandler([=]() {
-                MSG_("KnownDevicesChanged ---> C PAS FINI");
-            }));
-        }),
-        DRing::exportable_callback<DRing::ConfigurationSignal::ExportOnRingEnded>([&](const std::string& accountId, int status, const std::string& pin)
-        {
-            auto accountId2 = Utils::toPlatformString(accountId);
-            auto pin2 = (pin.empty()) ? "Error bad password" : "Your generated pin : " + Utils::toPlatformString(pin);
-            dispatcher->RunAsync(CoreDispatcherPriority::High,
-            ref new DispatchedHandler([=]() {
-                exportOnRingEnded(accountId2, pin2);
-            }));
-        }),
-        DRing::exportable_callback<DRing::ConfigurationSignal::RegisteredNameFound>(
-        [this](const std::string &accountId, int status, const std::string &address, const std::string &name) {
-            //MSG_("<RegisteredNameFound>" + name + " : " + address + " status=" +std::to_string(status));
-            CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,
-            ref new DispatchedHandler([=]() {
-                switch (status)
-                {
-                case 0: // everything went fine. Name/address pair was found.
-                    registeredNameFound(LookupStatus::SUCCESS, address, name);
-                    break;
-                case 1: // provided name is not valid.
-                    registeredNameFound(LookupStatus::INVALID_NAME, address, name);
-                    break;
-                case 2: // everything went fine. Name/address pair was not found.
-                    registeredNameFound(LookupStatus::NOT_FOUND, address, name);
-                    break;
-                case 3: // An error happened
-                    registeredNameFound(LookupStatus::ERRORR, address, name);
-                    break;
-                }
+                ref new DispatchedHandler([=]() {
+                MSG_("NewBuddyNotification");
+                MSG_("account_id = " + account_id);
+                MSG_("uri = " + buddy_uri);
+                MSG_("status = " + status);
+                // react to presence
+                dispatcher->RunAsync(CoreDispatcherPriority::High,
+                    ref new DispatchedHandler([=]() {
+                    newBuddyNotification(account_id, buddy_uri, status);
+                }));
             }));
-        }),
-        DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>(
-        [this](const std::string& accountId, const std::map<std::string, std::string>& details) {
-            ref new DispatchedHandler([=]() {
-                volatileDetailsChanged(accountId, details);
-            });
         })
     };
-    registerConfHandlers(nameRegistrationHandlers);
+    registerPresHandlers(presenceHandlers);
+}
+
+void
+RingD::OnaccountAdded()
+{
+    isAddingAccount = false;
+    hideLoadingOverlay("Account created successfully", SuccessColor, 2000);
+    // new account will be at index(0)
+    Configuration::UserPreferences::instance->raiseSelectIndex(0);
+    Configuration::UserPreferences::instance->save();
+}
+
+void
+RingD::OnaccountUpdated()
+{
+    isUpdatingAccount = false;
+    hideLoadingOverlay("Account updated successfully", SuccessColor, 500);
+}
+
+void
+RingD::OnaccountDeleted()
+{
+    isDeletingAccount = false;
+    if (AccountListItemsViewModel::instance->itemsList->Size == 0) {
+        auto configFile = RingD::instance->getLocalFolder() + ".config\\dring.yml";
+        Utils::fileDelete(configFile);
+        Utils::runOnUIThreadDelayed(100,[this]() {summonWizard(); });
+    }
+    else {
+        hideLoadingOverlay("Account deleted successfully", SuccessColor, 500);
+    }
 }
 
 void
@@ -838,6 +1266,8 @@ RingD::init()
         return;
     }
 
+    setOverlayStatusText("Starting Ring...", "#ff000000");
+
     gnutls_global_init();
     RingD::instance->registerCallbacks();
     RingD::instance->initDaemon( DRing::DRING_FLAG_CONSOLE_LOG | DRing::DRING_FLAG_DEBUG );
@@ -871,6 +1301,13 @@ RingD::startDaemon()
 
     IAsyncAction^ action = ThreadPool::RunAsync(ref new WorkItemHandler([=](IAsyncAction^ spAction)
     {
+        CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,
+            ref new DispatchedHandler([=]() {
+            if (!isInWizard) {
+                setOverlayStatusText("Loading from config...", "#ff000000");
+            }
+        }));
+
         daemonRunning_ = DRing::start();
 
         auto vcm = Video::VideoManager::instance->captureManager();
@@ -907,10 +1344,6 @@ RingD::startDaemon()
             case StartingStatus::NORMAL:
             default:
             {
-                CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,
-                ref new DispatchedHandler([=]() {
-                    reloadAccountList();
-                }));
                 break;
             }
             }
@@ -921,6 +1354,10 @@ RingD::startDaemon()
                 fileDelete(tokenFile);
             }
 
+            if (!isInWizard) {
+                hideLoadingOverlay("Ring started successfully", SuccessColor, 1000);
+            }
+
             while (daemonRunning) {
                 DRing::pollEvents();
                 dequeueTasks();
@@ -932,11 +1369,54 @@ RingD::startDaemon()
 
 RingD::RingD()
 {
+    toaster = ToastNotificationManager::CreateToastNotifier();
+
+    NetworkInformation::NetworkStatusChanged += ref new NetworkStatusChangedEventHandler(this, &RingD::InternetConnectionChanged);
+    this->stateChange += ref new StateChange(this, &RingD::onStateChange);
     ringtone_ = ref new Ringtone("default.wav");
     localFolder_ = Utils::toString(ApplicationData::Current->LocalFolder->Path);
     callIdsList_ = ref new Vector<String^>();
     currentCallId = nullptr;
-    WriteLine("XBOX: " + isOnXBox.ToString());
+}
+
+void
+RingD::onStateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code)
+{
+    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
+        CoreDispatcherPriority::High, ref new DispatchedHandler([=]()
+    {
+        if (state == CallStatus::OUTGOING_RINGING ||
+            state == CallStatus::IN_PROGRESS) {
+            try {
+                Configuration::UserPreferences::instance->sendVCard(Utils::toString(callId));
+            }
+            catch (Exception^ e) {
+                EXC_(e);
+            }
+        }
+
+        if (state == CallStatus::INCOMING_RINGING) {
+            ringtone_->Start();
+        }
+
+        if (state == CallStatus::IN_PROGRESS) {
+            ringtone_->Stop();
+            if (callToastPopped_) {
+                HideToast(toastCall);
+                callToastPopped_ = false;
+            }
+        }
+
+        if (state == CallStatus::ENDED ||
+            (state == CallStatus::NONE && code == 106)) {
+            if (callToastPopped_) {
+                HideToast(toastCall);
+                callToastPopped_ = false;
+            }
+            DRing::hangUp(Utils::toString(callId));
+            ringtone_->Stop();
+        }
+    }));
 }
 
 std::string
@@ -945,6 +1425,24 @@ RingD::getLocalFolder()
     return localFolder_ + Utils::toString("\\");
 }
 
+void
+RingD::showLoadingOverlay(String^ text, String^ color)
+{
+    Utils::runOnUIThread([=]() {
+        setOverlayStatusText(text, color);
+        mainPage->showLoadingOverlay(true, true);
+    });
+}
+
+void
+RingD::hideLoadingOverlay(String^ text, String^ color, int delayInMilliseconds)
+{
+    Utils::runOnUIThread([=]() { setOverlayStatusText(text, color); });
+    Utils::runOnUIThreadDelayed(delayInMilliseconds, [=]() {
+        mainPage->showLoadingOverlay(false, false);
+    });
+}
+
 void
 RingD::dequeueTasks()
 {
@@ -956,15 +1454,25 @@ RingD::dequeueTasks()
             break;
         case Request::PlaceCall:
         {
-            auto callId = DRing::placeCall(task->_accountId_new, "ring:" + task->_ringId_new);
+            auto selectedAccount = AccountListItemsViewModel::instance->_selectedItem->_account;
+            std::string callId;
+            if (selectedAccount->accountType_ == "RING")
+                callId = DRing::placeCall(task->_accountId_new, "ring:" + task->_ringId_new);
+            else if (selectedAccount->accountType_ == "SIP")
+                callId = DRing::placeCall(task->_accountId_new, "sip:" + Utils::toString(task->_sipUsername));
             CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
-            ref new DispatchedHandler([=]() {
+                ref new DispatchedHandler([=]() {
                 if (auto contactListModel = AccountsViewModel::instance->getContactListModel(task->_accountId_new)) {
-                    auto contact = contactListModel->findContactByRingId(Utils::toPlatformString(task->_ringId_new));
-                    auto item = SmartPanelItemsViewModel::instance->findItem(contact);
-                    item->_callId = Utils::toPlatformString(callId);
-                    if (!callId.empty())
-                        callPlaced(Utils::toPlatformString(callId));
+                    Contact^ contact;
+                    if (selectedAccount->accountType_ == "RING")
+                        contact = contactListModel->findContactByRingId(Utils::toPlatformString(task->_ringId_new));
+                    else if (selectedAccount->accountType_ == "SIP")
+                        contact = contactListModel->findContactByName(task->_sipUsername);
+                    if (auto item = SmartPanelItemsViewModel::instance->findItem(contact)) {
+                        item->_callId = Utils::toPlatformString(callId);
+                        if (!callId.empty())
+                            callPlaced(Utils::toPlatformString(callId));
+                    }
                 }
             }));
         }
@@ -1044,33 +1552,21 @@ RingD::dequeueTasks()
 
             std::map<std::string, std::string> deviceDetails;
             deviceDetails.insert(std::make_pair(DRing::Account::ConfProperties::TYPE, "RING"));
-            //deviceDetails.insert(std::make_pair(DRing::Account::ConfProperties::UPNP_ENABLED, "true"));
-            //deviceDetails.insert(std::make_pair(DRing::Account::ConfProperties::ALIAS, "MonSuperUsername"));
             deviceDetails.insert(std::make_pair(DRing::Account::ConfProperties::ARCHIVE_PIN, pin));
             deviceDetails.insert(std::make_pair(DRing::Account::ConfProperties::ARCHIVE_PASSWORD, password));
-            DRing::addAccount(deviceDetails);
 
-            CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
-            ref new DispatchedHandler([=]() {
-                auto frame = dynamic_cast<Frame^>(Window::Current->Content);
-                dynamic_cast<RingClientUWP::MainPage^>(frame->Content)->showLoadingOverlay(true, true);
-            }));
+            DRing::addAccount(deviceDetails);
         }
         break;
         case Request::GetKnownDevices:
         {
-            auto accountId = task->_accountId;
-            auto accountId2 = Utils::toString(accountId);
-
-            auto devicesList = DRing::getKnownRingDevices(accountId2);
+            auto devicesList = DRing::getKnownRingDevices(Utils::toString(task->_accountId));
             if (devicesList.empty())
                 break;
 
-            auto devicesList2 = translateKnownRingDevices(devicesList);
-
             CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,
             ref new DispatchedHandler([=]() {
-                devicesListRefreshed(devicesList2);
+                devicesListRefreshed(Utils::convertMap(devicesList));
             }));
             break;
         }
@@ -1091,17 +1587,21 @@ RingD::dequeueTasks()
             std::map<std::string, std::string> accountDetails = DRing::getAccountDetails(task->_accountId_new);
             std::map<std::string, std::string> accountDetailsOld(accountDetails);
 
-
-
             accountDetails[DRing::Account::ConfProperties::ALIAS] = Utils::toString(account->name_);
+            accountDetails[DRing::Account::ConfProperties::ENABLED] = (account->_active) ? ring::TRUE_STR : ring::FALSE_STR;
+            accountDetails[DRing::Account::ConfProperties::RING_DEVICE_NAME] = Utils::toString(account->_deviceName);
 
             if (accountDetails[DRing::Account::ConfProperties::TYPE] == "RING") {
+                accountDetails[DRing::Account::ConfProperties::UPNP_ENABLED] = (account->_upnpState) ? ring::TRUE_STR : ring::FALSE_STR;
+                accountDetails[DRing::Account::ConfProperties::AUTOANSWER] = (account->_autoAnswer) ? ring::TRUE_STR : ring::FALSE_STR;
+                accountDetails[DRing::Account::ConfProperties::DHT::PUBLIC_IN_CALLS] = (account->_dhtPublicInCalls) ? ring::TRUE_STR : ring::FALSE_STR;
+                accountDetails[DRing::Account::ConfProperties::TURN::ENABLED] = (account->_turnEnabled) ? ring::TRUE_STR : ring::FALSE_STR;
+                accountDetails[DRing::Account::ConfProperties::TURN::SERVER] = Utils::toString(account->_turnAddress);
                 if (accountDetails == accountDetailsOld)
                     break;
-
-                accountDetails[DRing::Account::ConfProperties::UPNP_ENABLED] = (account->_upnpState) ? ring::TRUE_STR : ring::FALSE_STR;
                 CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
                 ref new DispatchedHandler([=]() {
+                    setOverlayStatusText(ResourceMananger::instance->getStringResource("_m_updating_account_"), SuccessColor);
                     auto frame = dynamic_cast<Frame^>(Window::Current->Content);
                     dynamic_cast<RingClientUWP::MainPage^>(frame->Content)->showLoadingOverlay(true, true);
                 }));
@@ -1110,9 +1610,14 @@ RingD::dequeueTasks()
                 accountDetails[DRing::Account::ConfProperties::HOSTNAME] = Utils::toString(account->_sipHostname);
                 accountDetails[DRing::Account::ConfProperties::PASSWORD] = Utils::toString(account->_sipPassword);
                 accountDetails[DRing::Account::ConfProperties::USERNAME] = Utils::toString(account->_sipUsername);
+                if (accountDetails == accountDetailsOld)
+                    break;
             }
 
+            isUpdatingAccount = true;
             DRing::setAccountDetails(Utils::toString(account->accountID_), accountDetails);
+            Configuration::UserPreferences::instance->save();
+
             break;
         }
         case Request::DeleteAccount:
@@ -1122,13 +1627,11 @@ RingD::dequeueTasks()
 
             std::map<std::string, std::string> accountDetails = DRing::getAccountDetails(task->_accountId_new);
 
-            if (accountDetails[DRing::Account::ConfProperties::TYPE] == "RING")
-                CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
-                ref new DispatchedHandler([=]() {
+            Utils::runOnUIThread([this]() {
+                setOverlayStatusText(ResourceMananger::instance->getStringResource("_m_deleting_account_"), "#ffff0000");
                 auto frame = dynamic_cast<Frame^>(Window::Current->Content);
                 dynamic_cast<RingClientUWP::MainPage^>(frame->Content)->showLoadingOverlay(true, true);
-            }));
-
+            });
 
             DRing::removeAccount(accountId2);
             break;
@@ -1174,12 +1677,12 @@ RingD::dequeueTasks()
         case Request::LookUpName:
         {
             auto alias = task->_alias;
-            DRing::lookupName("", "", Utils::toString(alias));
+            DRing::lookupName(task->_accountId_new, "", Utils::toString(alias));
             break;
         }
         case Request::LookUpAddress:
         {
-            DRing::lookupAddress("", "", Utils::toString(task->_address));
+            DRing::lookupAddress(task->_accountId_new, "", Utils::toString(task->_address));
             break;
         }
         case Request::RegisterName:
@@ -1199,16 +1702,35 @@ RingD::dequeueTasks()
                 }));
             }
 
-
-            //const wchar_t* toto = task->_accountId->Data();
-            //auto accountId = ref new String(toto);// Utils::toString(task->_accountId);
-            //auto accountDetails = DRing::getAccountDetails(Utils::toString(accountId));
-
-            //if (accountDetails[DRing::Account::ConfProperties::USERNAME].empty())
-            //    registerName(task->_accountId, task->_password, task->_registeredName);
-            //else
-            //    DRing::registerName(Utils::toString(task->_accountId), Utils::toString(task->_password), Utils::toString(task->_registeredName));
-
+            break;
+        }
+        case Request::SubscribeBuddy:
+        {
+            DRing::subscribeBuddy(task->_accountId_new, task->_ringId_new, true);
+            break;
+        }
+        case Request::SendContactRequest:
+        {
+            std::vector<uint8_t> payload(task->_payload.begin(), task->_payload.end());
+            DRing::sendTrustRequest(task->_accountId_new, task->_ringId_new, payload);
+            break;
+        }
+        case Request::RemoveContact:
+        {
+            DRing::removeContact(task->_accountId_new, task->_ringId_new, false);
+            break;
+        }
+        case Request::RevokeDevice:
+        {
+            auto msg = ResourceMananger::instance->getStringResource("_m_revoking_device_");
+            showLoadingOverlay(msg + Utils::toPlatformString(task->_deviceId), SuccessColor);
+            DRing::revokeDevice(task->_accountId_new, task->_password_new, task->_deviceId);
+            MSG_("revoking device, (id=" + task->_deviceId + ")");
+            break;
+        }
+        case Request::SendSIPMessage:
+        {
+            DRing::sendTextMessage(task->_callid_new, task->_payload2, task->_accountId_new, true /*not used*/);
             break;
         }
         default:
@@ -1274,14 +1796,6 @@ void RingClientUWP::RingD::muteAudio(const std::string& callId, bool muted)
     tasksList_.push(task);
 }
 
-void RingClientUWP::RingD::lookUpName(String ^ name)
-{
-    auto task = ref new RingD::Task(Request::LookUpName);
-    task->_alias = name;
-
-    tasksList_.push(task);
-}
-
 void
 RingD::registerName(String^ accountId, String^ password, String^ username)
 {
@@ -1293,6 +1807,16 @@ RingD::registerName(String^ accountId, String^ password, String^ username)
     tasksList_.push(task);
 }
 
+void
+RingD::subscribeBuddy(const std::string& accountId, const std::string& uri, bool flag)
+{
+    auto task = ref new RingD::Task(Request::SubscribeBuddy);
+    task->_accountId_new = accountId;
+    task->_ringId_new = uri;
+
+    tasksList_.push(task);
+}
+
 void RingClientUWP::RingD::registerName_new(const std::string & accountId, const std::string & password, const std::string & username)
 {
     auto task = ref new RingD::Task(Request::RegisterName);
@@ -1303,16 +1827,59 @@ void RingClientUWP::RingD::registerName_new(const std::string & accountId, const
     tasksList_.push(task);
 }
 
+void
+RingD::removeContact(const std::string& accountId, const std::string& uri)
+{
+    auto task = ref new RingD::Task(Request::RemoveContact);
+    task->_accountId_new = accountId;
+    task->_ringId_new = uri;
+    tasksList_.push(task);
+}
+
+void
+RingD::sendContactRequest(const std::string& accountId, const std::string& uri, const std::string& payload)
+{
+    auto task = ref new RingD::Task(Request::SendContactRequest);
+    task->_accountId_new = accountId;
+    task->_ringId_new = uri;
+    task->_payload = payload;
+    tasksList_.push(task);
+}
+
 std::map<std::string, std::string>
 RingClientUWP::RingD::getVolatileAccountDetails(Account^ account)
 {
     return DRing::getVolatileAccountDetails(Utils::toString(account->accountID_));
 }
 
-void RingClientUWP::RingD::lookUpAddress(String^ address)
+void
+RingD::lookUpName(const std::string& accountId, String ^ name)
+{
+    auto task = ref new RingD::Task(Request::LookUpName);
+    task->_alias = name;
+    task->_accountId_new = accountId;
+
+    tasksList_.push(task);
+}
+
+void
+RingD::lookUpAddress(const std::string& accountId, String^ address)
 {
     auto task = ref new RingD::Task(Request::LookUpAddress);
     task->_address = address;
+    task->_accountId_new = accountId;
+
+    tasksList_.push(task);
+}
+
+void
+RingD::revokeDevice(const std::string& accountId, const std::string& password, const std::string& deviceId)
+{
+    auto task = ref new RingD::Task(Request::RevokeDevice);
+
+    task->_accountId_new = accountId;
+    task->_password_new = password;
+    task->_deviceId = deviceId;
 
     tasksList_.push(task);
 }
@@ -1356,18 +1923,16 @@ RingD::getUserName()
     return nullptr;
 }
 
-Vector<String^>^ RingClientUWP::RingD::translateKnownRingDevices(const std::map<std::string, std::string> devices)
+void
+RingD::startSmartInfo(int refresh)
 {
-    auto devicesList = ref new Vector<String^>();
-
-    for (auto i : devices) {
-        MSG_("devices.first = " + i.first);
-        MSG_("devices.second = " + i.second);
-        auto deviceName = Utils::toPlatformString(i.second);
-        devicesList->Append(deviceName);
-    }
+    DRing::startSmartInfo(refresh);
+}
 
-    return devicesList;
+void
+RingD::stopSmartInfo()
+{
+    DRing::stopSmartInfo();
 }
 
 void RingClientUWP::RingD::setFullScreenMode()
@@ -1395,3 +1960,9 @@ void RingClientUWP::RingD::toggleFullScreen()
     else
         setFullScreenMode();
 }
+
+void
+RingD::raiseMessageDataLoaded()
+{
+    messageDataLoaded();
+}
diff --git a/RingD.h b/RingD.h
index f6e51f8d1cb8248f9149c2a053be1685a0ba71ae..dc5cdeaa7ceb4ba10a3c6670ab2f4447ee4c66ef 100644
--- a/RingD.h
+++ b/RingD.h
@@ -30,34 +30,40 @@ using namespace Windows::UI::ViewManagement;
 namespace RingClientUWP
 {
 
-// its ok to keep this enum here and to use it with the wizard, because in pch.h headers are a-z sorted,
-// but it would be much more consistent to move this enum in globals.h when merged
-
 public enum class StartingStatus { NORMAL, REGISTERING_ON_THIS_PC, REGISTERING_THIS_DEVICE };
 
-/* delegate */
+/* delegates */
 delegate void IncomingCall(String^ accountId, String^ callId, String^ from);
 delegate void StateChange(String^ callId, CallStatus state, int code);
 delegate void IncomingAccountMessage(String^ accountId, String^ from, String^ payload);
 delegate void CallPlaced(String^ callId);
 delegate void IncomingMessage(String^ callId, String^ payload);
-delegate void DevicesListRefreshed(Vector<String^>^ devicesList);
+delegate void DevicesListRefreshed(Map<String^, String^>^ deviceMap);
 delegate void ExportOnRingEnded(String^ accountId, String^ pin);
 delegate void SummonWizard();
 delegate void AccountUpdated(Account^ account);
 delegate void IncomingVideoMuted(String^ callId, bool state);
-delegate void RegisteredNameFound(LookupStatus status, const std::string& address, const std::string& name);
+delegate void RegisteredNameFound(LookupStatus status, const std::string& accountId, const std::string& address, const std::string& name);
 delegate void FinishCaptureDeviceEnumeration();
 delegate void RegistrationStateErrorGeneric(const std::string& accountId);
-delegate void RegistrationStateRegistered();
-delegate void SetLoadingStatusText(String^ statusText, String^ color);
+delegate void RegistrationStateRegistered(const std::string& accountId);
+delegate void RegistrationStateUnregistered(const std::string& accountId);
+delegate void RegistrationStateTrying(const std::string& accountId);
+delegate void SetOverlayStatusText(String^ statusText, String^ color);
 delegate void CallsListRecieved(const std::vector<std::string>& callsList);
 delegate void AudioMuted(const std::string& callId, bool state);
 delegate void VideoMuted(const std::string& callId, bool state);
 delegate void NameRegistred(bool status);
 delegate void FullScreenToggled(bool state);
-delegate void WindowResized();
+delegate void WindowResized(float width, float height);
+delegate void NetworkChanged();
+delegate void MessageDataLoaded();
+delegate void UpdateSmartInfo(const std::map<std::string, std::string>& info);
+delegate void MessageStatusUpdated(String^ messageId, int status);
 delegate void VolatileDetailsChanged(const std::string& accountId, const std::map<std::string, std::string>& details);
+delegate void NewBuddyNotification(const std::string& accountId, const std::string& uri, int status);
+delegate void VCardUpdated(Contact^ owner);
+delegate void ShareRequested();
 
 using SharedCallback = std::shared_ptr<DRing::CallbackWrapperBase>;
 using namespace std::placeholders;
@@ -65,57 +71,89 @@ using namespace std::placeholders;
 public ref class RingD sealed
 {
 public:
-    /* functions */
-    void raiseWindowResized();
-
     /* properties */
-    static property RingD^ instance
-    {
-        RingD^ get()
-        {
+    static property RingD^ instance {
+        RingD^ get() {
             static RingD^ instance_ = ref new RingD();
             return instance_;
         }
     }
 
-    property bool daemonInitialized
-    {
-        bool get()
-        {
+    property bool daemonInitialized {
+        bool get() {
             return daemonInitialized_;
         }
     }
 
-    property bool daemonRunning
-    {
-        bool get()
-        {
+    property bool daemonRunning {
+        bool get() {
             return daemonRunning_;
         }
     }
 
-    property bool isFullScreen
-    {
-        bool get()
-        {
+    property bool _hasInternet {
+        bool get() {
+            return hasInternet_;
+        }
+    }
+
+    property bool isInWizard;
+
+    property bool isFullScreen {
+        bool get() {
             return ApplicationView::GetForCurrentView()->IsFullScreenMode;
         }
     }
 
-    property bool isOnXBox
-    {
-        bool get()
-        {
+    property bool isOnXBox {
+        bool get() {
             auto dev = Utils::toString(Windows::System::Profile::AnalyticsInfo::VersionInfo->DeviceFamily);
             std::transform(dev.begin(), dev.end(), dev.begin(), ::tolower);
             return !dev.compare("windows.xbox");
         }
     }
 
-    property bool isInBackground;
+    property bool isInBackground {
+        bool get() {
+            return isInBackground_;
+        }
+        void set(bool value) {
+            isInBackground_ = value;
+            connectivityChanged();
+        }
+    }
+
+    property bool isInvisible {
+        bool get() {
+            return isInvisible_;
+        }
+        void set(bool value) {
+            isInvisible_ = value;
+        }
+    }
+
+    property Ringtone^ ringtone {
+        Ringtone^ get() {
+            return ringtone_;
+        }
+    }
+
+    property MainPage^ mainPage {
+        MainPage^ get() {
+            auto frame = dynamic_cast<Windows::UI::Xaml::Controls::Frame^>(Window::Current->Content);
+            return dynamic_cast<RingClientUWP::MainPage^>(frame->Content);
+        }
+    }
+
     property StartingStatus _startingStatus;
 
+    property bool isCtrlPressed;
+    property bool isShiftPressed;
+
+    /* functions */
     void cancelOutGoingCall2(String^ callId); // marche
+    void raiseWindowResized(float width, float height);
+    void raiseShareRequested();
 
 internal: // why this property has to be internal and not public ?
     property Vector<String^>^ _callIdsList
@@ -126,8 +164,10 @@ internal: // why this property has to be internal and not public ?
         }
     }
 
+    std::map<String^, std::function<void(String^ username)>> unpoppedToasts;
 
-internal:
+    using AccountDetails = std::map<std::string, std::string>;
+    using AccountDetailsBlob = std::map<std::string, AccountDetails>;
     /* functions */
     std::string getLocalFolder();
     void registerCallbacks();
@@ -135,7 +175,9 @@ internal:
     void startDaemon();
     void init();
     void deinit();
-    void reloadAccountList();
+    AccountDetailsBlob getAllAccountDetails();
+    void parseAccountDetails(const AccountDetailsBlob& allAccountDetails);
+    void subscribeBuddies();
     void sendAccountTextMessage(String^ message);
     void sendSIPTextMessage(String^ message);
     void sendSIPTextMessageVCF(std::string callID, std::map<std::string, std::string> message);
@@ -146,11 +188,11 @@ internal:
     void placeCall(Contact^ contact);
     void pauseCall(const std::string& callId);
     void unPauseCall(const std::string& callId);
-    /*void cancelOutGoingCall2(String^ callId);*/ // marche pas
     CallStatus translateCallStatus(String^ state);
     String^ getUserName();
-    Vector<String^>^ translateKnownRingDevices(const std::map<std::string, std::string> devices);
-    void HandleIncomingMessage( const std::string& callId,
+    void startSmartInfo(int refresh);
+    void stopSmartInfo();
+    void handleIncomingMessage( const std::string& callId,
                                 const std::string& accountId,
                                 const std::string& from,
                                 const std::map<std::string, std::string>& payloads);
@@ -158,11 +200,12 @@ internal:
     void toggleFullScreen();
     void setWindowedMode();
     void setFullScreenMode();
-
+    void connectivityChanged();
+    void onStateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code);
     void hangUpCall2(String^ callId);
     void pauseCall(String ^ callId);
     void unPauseCall(String ^ callId);
-    void askToRefreshKnownDevices(String^ accountId);
+    void getKnownDevices(String^ accountId);
     void askToExportOnRing(String^ accountId, String^ password);
     void eraseCacheFolder();
     void updateAccount(String^ accountId);
@@ -173,12 +216,27 @@ internal:
     void switchDebug();
     void muteVideo(String^ callId, bool muted);
     void muteAudio(const std::string& callId, bool muted);
-    void lookUpName(String^ name);
+    void subscribeBuddy(const std::string& accountId, const std::string& uri, bool flag);
     void registerName(String^ accountId, String^ password, String^ username);
     void registerName_new(const std::string& accountId, const std::string& password, const std::string& username);
     std::map<std::string, std::string> getVolatileAccountDetails(Account^ account);
-    void lookUpAddress(String^ address);
+    void lookUpName(const std::string& accountId, String^ name);
+    void lookUpAddress(const std::string& accountId, String^ address);
     std::string registeredName(Account^ account);
+    void removeContact(const std::string & accountId, const std::string& uri);
+    void sendContactRequest(const std::string& accountId, const std::string& uri, const std::string& payload);
+    void raiseMessageDataLoaded();
+    void raiseVCardUpdated(Contact^ contact);
+    void revokeDevice(const std::string& accountId, const std::string& password, const std::string& deviceId);
+    void showLoadingOverlay(String^ text, String^ color);
+    void hideLoadingOverlay(String^ text, String^ color, int delayInMilliseconds = 2000);
+    void OnaccountAdded();
+    void OnaccountUpdated();
+    void OnaccountDeleted();
+
+    void ShowCallToast(bool background, String^ callId, String^ name = nullptr);
+    void ShowIMToast(bool background, String^ from, String^ payload, String^ name = nullptr);
+    void HideToast(ToastNotification^ toast);
 
     /* TODO : move members */
     String ^ currentCallId; // to save ongoing call id during visibility change
@@ -198,14 +256,23 @@ internal:
     event FinishCaptureDeviceEnumeration^ finishCaptureDeviceEnumeration;
     event RegistrationStateErrorGeneric^ registrationStateErrorGeneric;
     event RegistrationStateRegistered^ registrationStateRegistered;
-    event SetLoadingStatusText^ setLoadingStatusText;
+    event RegistrationStateUnregistered^ registrationStateUnregistered;
+    event RegistrationStateTrying^ registrationStateTrying;
+    event SetOverlayStatusText^ setOverlayStatusText;
     event CallsListRecieved^ callsListRecieved; // est implemente a la base pour regler le probleme du boutton d'appel qui est present lorsqu'un appel est en cours, mais il n'est pas utilise. Voir si ca peut servir a autre chose
     event AudioMuted^ audioMuted;
     event VideoMuted^ videoMuted;
     event NameRegistred^ nameRegistred;
     event FullScreenToggled^ fullScreenToggled;
     event WindowResized^ windowResized;
+    event NetworkChanged^ networkChanged;
+    event MessageDataLoaded^ messageDataLoaded;
+    event UpdateSmartInfo^ updateSmartInfo;
+    event MessageStatusUpdated^ messageStatusUpdated;
     event VolatileDetailsChanged^ volatileDetailsChanged;
+    event NewBuddyNotification^ newBuddyNotification;
+    event VCardUpdated^ vCardUpdated;
+    event ShareRequested^ shareRequested;
 
 private:
     /* sub classes */
@@ -232,10 +299,16 @@ private:
         MuteAudio,
         LookUpName,
         LookUpAddress,
-        RegisterName
+        SendContactRequest,
+        AcceptContactRequest,
+        DiscardContactRequest,
+        RegisterName,
+        RemoveContact,
+        RevokeDevice,
+        SubscribeBuddy,
+        SendSIPMessage
     };
 
-
     Vector<String^>^ callIdsList_;
 
     ref class Task
@@ -270,35 +343,51 @@ private:
 
     internal:
         std::string _accountId_new;
+        std::string _payload;
+        std::map<std::string, std::string> _payload2;
         std::string _password_new;
         std::string _publicUsername_new;
         std::string _callid_new;
         std::string _ringId_new;
+        std::string _deviceId;
         bool _audioMuted_new;
     };
 
     /* functions */
     RingD(); // singleton
+
     void dequeueTasks();
-//    CallStatus translateCallStatus(String^ state);
+    void InternetConnectionChanged(Platform::Object^ sender);
+    //CallStatus translateCallStatus(String^ state);
 
     /* members */
     Windows::UI::Core::CoreDispatcher^ dispatcher;
 
-    std::string localFolder_;
+    bool hasInternet_;
+    bool isAddingDevice     = false;
+    bool isAddingAccount    = false;
+    bool isUpdatingAccount  = false;
+    bool isDeletingAccount  = false;
+    bool isInBackground_    = false;
+    bool isInvisible_       = false;
     bool daemonInitialized_ = false;
-    bool daemonRunning_ = false;
+    bool daemonRunning_     = false;
+    bool editModeOn_        = false;
+    bool debugModeOn_       = true;
+    bool callToastPopped_   = false;
+
+    std::string localFolder_;
     std::queue<Task^> tasksList_;
     StartingStatus startingStatus_ = StartingStatus::NORMAL;
-    bool editModeOn_ = false;
-    bool debugModeOn_ = true;
     Ringtone^ ringtone_;
 
+    ToastNotification^ toastText;
+    ToastNotification^ toastCall;
+    Windows::UI::Notifications::ToastNotifier^ toaster;
+
     std::map<std::string, SharedCallback> callHandlers;
-    std::map<std::string, SharedCallback> getAppPathHandler;
-    std::map<std::string, SharedCallback> getAppUserNameHandler;
-    std::map<std::string, SharedCallback> incomingVideoHandlers;
-    std::map<std::string, SharedCallback> outgoingVideoHandlers;
-    std::map<std::string, SharedCallback> nameRegistrationHandlers;
+    std::map<std::string, SharedCallback> configurationHandlers;
+    std::map<std::string, SharedCallback> presenceHandlers;
+    std::map<std::string, SharedCallback> videoHandlers;
 };
 }
diff --git a/RingDebug.cpp b/RingDebug.cpp
index d90ffd1e0c2b09ea472095200eab634c77a9fe4f..f57356181fbbfe86be31ace65c7dcc7238738815 100644
--- a/RingDebug.cpp
+++ b/RingDebug.cpp
@@ -43,11 +43,11 @@ getDebugHeader(std::string file, int line)
     static uint64_t secs = s.count();
     static uint64_t millis = ms.count() - (secs * 1000);
 
-    std::ostringstream out;
-    const auto prev_fill = out.fill();
-    out << '[' << secs
-        << '.' << std::right << std::setw(3) << std::setfill('0') << millis << std::left
-        << '|' << std::right << std::setw(5) << std::setfill(' ') << tid << std::left;
+    std::ostringstream out;
+    const auto prev_fill = out.fill();
+    out << '[' << secs
+        << '.' << std::right << std::setw(3) << std::setfill('0') << millis << std::left
+        << '|' << std::right << std::setw(5) << std::setfill(' ') << tid << std::left;
     out.fill(prev_fill);
     out << "|" << std::setw(32) << (file + ':' + Utils::toString((line.ToString())));
     out << "] ";
@@ -59,96 +59,96 @@ void
 RingDebug::print(const  std::string& message, const Type& type,
                         std::string file, int line)
 {
-    std::string _message;
+    Utils::runOnWorkerThread([this, message, type, file, line]()
+    {
+        std::string _message;
 
-    if (type != Type::DMN)
-        _message = getDebugHeader(file, line) + message;
-    else
-        _message = message;
+        if (type != Type::DMN)
+            _message = getDebugHeader(file, line) + message;
+        else
+            _message = message;
 
-    std::wstring wString = std::wstring(_message.begin(), _message.end());
+        std::wstring wString = std::wstring(_message.begin(), _message.end());
 
-    /* set message type. */
-    wString = (type>Type::WNG)?(L"(EE) "):((type>Type::MSG)?(L"(WW) "):(L"")) + wString;
+        /* set message type. */
+        wString = (type>Type::WNG) ? (L"(EE) ") : ((type>Type::MSG) ? (L"(WW) ") : (L"")) + wString;
 
-    String^ msg;
-    msg = ref new String(wString.c_str(), wString.length());
+        String^ msg;
+        msg = ref new String(wString.c_str(), wString.length());
 
 #if UWP_DBG_VS
-    /* screen it into VS debug console */
-    OutputDebugString((wString + L"\n").c_str());
+        /* screen it into VS debug console */
+        OutputDebugString((wString + L"\n").c_str());
 #endif
 
-#if UWP_DBG_CLIENT
-    /* fire the event. */
-    messageToScreen(msg);
+#if UWP_DBG_CONSOLE
+        /* fire the event. */
+        messageToScreen(msg);
 #endif
 
 #if UWP_DBG_FILE
-    /* output to file */
-    std::ofstream ofs;
-    ofs.open (RingD::instance->getLocalFolder() + "debug.log", std::ofstream::out | std::ofstream::app);
-    ofs << Utils::toString(msg) << "\n";
-    ofs.close();
+        /* output to file */
+        printToLogFile(Utils::toString(msg));
 #endif
+    }, WorkItemPriority::Normal);
 }
 
 void
 RingDebug::print(String^ message, const Type& type,
                         std::string file, int line)
 {
-    /* add header */
-    auto messageTimestamped = Utils::toPlatformString(getDebugHeader(file, line)) + message;
+    Utils::runOnWorkerThread([this, message, type, file, line]()
+    {
+        /* add header */
+        auto messageTimestamped = Utils::toPlatformString(getDebugHeader(file, line)) + message;
 
-    /* set message type. */
-    messageTimestamped = (type>Type::WNG)?("(EE) "):((type>Type::MSG)?("(WW) "):("")) + messageTimestamped;
+        /* set message type. */
+        messageTimestamped = (type>Type::WNG) ? ("(EE) ") : ((type>Type::MSG) ? ("(WW) ") : ("")) + messageTimestamped;
 
 #if UWP_DBG_VS
-    /* screen it into VS debug console */
-    std::wstringstream wStringstream;
-    wStringstream << messageTimestamped->Data() << "\n";
-    OutputDebugString(wStringstream.str().c_str());
+        /* screen it into VS debug console */
+        std::wstringstream wStringstream;
+        wStringstream << messageTimestamped->Data() << "\n";
+        OutputDebugString(wStringstream.str().c_str());
 #endif
 
-#if UWP_DBG_CLIENT
-    /* fire the event. */
-    messageToScreen(messageTimestamped);
+#if UWP_DBG_CONSOLE
+        /* fire the event. */
+        messageToScreen(messageTimestamped);
 #endif
 
 #if UWP_DBG_FILE
-    /* output to file */
-    std::ofstream ofs;
-    ofs.open (RingD::instance->getLocalFolder() + "debug.log", std::ofstream::out | std::ofstream::app);
-    ofs << Utils::toString(messageTimestamped) << "\n";
-    ofs.close();
+        /* output to file */
+        printToLogFile(Utils::toString(messageTimestamped));
 #endif
+    }, WorkItemPriority::Normal);
 }
 
 void
 RingDebug::print(Exception^ e, std::string file, int line)
 {
-    /* add header */
-    auto message = Utils::toPlatformString(getDebugHeader(file, line)) + "0x" + e->HResult.ToString() + ": " + e->Message;
+    Utils::runOnWorkerThread([this, e, file, line]()
+    {
+        /* add header */
+        auto message = Utils::toPlatformString(getDebugHeader(file, line)) + "Exception : 0x" + e->HResult.ToString() + ": " + e->Message;
 
 #if UWP_DBG_VS
-    /* screen it into VS debug console */
-    std::wstringstream wStringstream;
-    wStringstream << message->Data() << "\n";
-    OutputDebugString(wStringstream.str().c_str());
+        /* screen it into VS debug console */
+        std::wstringstream wStringstream;
+        wStringstream << message->Data() << "\n";
+        OutputDebugString(wStringstream.str().c_str());
 #endif
 
-#if UWP_DBG_CLIENT
-    /* fire the event. */
-    messageToScreen(message);
+#if UWP_DBG_CONSOLE
+        /* fire the event. */
+        messageToScreen(message);
 #endif
 
 #if UWP_DBG_FILE
-    /* output to file */
-    std::ofstream ofs;
-    ofs.open (RingD::instance->getLocalFolder() + "debug.log", std::ofstream::out | std::ofstream::app);
-    ofs << Utils::toString(message) << "\n";
-    ofs.close();
+        /* output to file */
+        printToLogFile(Utils::toString(message));
 #endif
+    }, WorkItemPriority::Normal);
 }
 
 RingDebug::RingDebug()
@@ -159,3 +159,14 @@ RingDebug::RingDebug()
     ofs.close();
 }
 
+void
+RingDebug::printToLogFile(std::string msg)
+{
+    {
+        std::lock_guard<std::mutex> l(debugMutex_);
+        std::ofstream ofs;
+        ofs.open(RingD::instance->getLocalFolder() + "debug.log", std::ofstream::out | std::ofstream::app);
+        ofs << msg << "\n";
+        ofs.close();
+    }
+}
diff --git a/RingDebug.h b/RingDebug.h
index a7d49512b2e1fbcdbf6624c4dad188c0b1d37dc3..44bcdbd8ee66f5e798232ed4ea86844845c024cf 100644
--- a/RingDebug.h
+++ b/RingDebug.h
@@ -17,10 +17,14 @@
 **************************************************************************/
 #pragma once
 
-#define UWP_DBG_CLIENT      0
+#define UWP_DBG_CONSOLE     0
 #define UWP_DBG_VS          1
 #define UWP_DBG_FILE        1
 
+#define UWP_DBG_CLIENT      1
+#define UWP_DBG_IO          0
+#define UWP_DBG_DAEMON      1
+
 using namespace Windows::Storage;
 
 namespace RingClientUWP
@@ -57,40 +61,56 @@ internal:
                std::string file, int line);
     void print(Exception^ e, std::string file, int line);
 
+    void printToLogFile(std::string msg);
+
     /* event */
     event debugMessageToScreen^ messageToScreen;
 
 private:
+    std::mutex debugMutex_;
     RingDebug(); // singleton
 };
 
-void WriteLine(String^ str)
+void
+WriteLine(String^ str)
 {
     std::wstringstream wStringstream;
     wStringstream << str->Data() << "\n";
     OutputDebugString(wStringstream.str().c_str());
 }
 
-void WriteException(Exception^ ex)
+__declspec(deprecated)
+void
+WriteException(Exception^ ex)
 {
     std::wstringstream wStringstream;
     wStringstream << "0x" << ex->HResult << ": " << ex->Message->Data();
     OutputDebugString(wStringstream.str().c_str());
 }
 
-#define DMSG_(str) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
-ref new DispatchedHandler([=]() { RingDebug::instance->print(str, RingDebug::Type::DMN, __FILE__, __LINE__); }))
-
-#define MSG_(str) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
-ref new DispatchedHandler([=]() { RingDebug::instance->print(str, RingDebug::Type::MSG, __FILE__, __LINE__); }))
-
-#define WNG_(str) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
-ref new DispatchedHandler([=]() { RingDebug::instance->print(str, RingDebug::Type::WNG, __FILE__, __LINE__); }))
-
-#define ERR_(str) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
-ref new DispatchedHandler([=]() { RingDebug::instance->print(str, RingDebug::Type::ERR, __FILE__, __LINE__); }))
-
-#define EXC_(e) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \
-ref new DispatchedHandler([=]() { RingDebug::instance->print(e, __FILE__, __LINE__); }))
+#if UWP_DBG_DAEMON
+#define DMSG_(str)  RingDebug::instance->print(str, RingDebug::Type::DMN, __FILE__, __LINE__)
+#else
+#define DMSG_(str)
+#endif
+
+#if UWP_DBG_CLIENT
+#define MSG_(str)   RingDebug::instance->print(str, RingDebug::Type::MSG, __FILE__, __LINE__)
+#define WNG_(str)   RingDebug::instance->print(str, RingDebug::Type::WNG, __FILE__, __LINE__)
+#define ERR_(str)   RingDebug::instance->print(str, RingDebug::Type::ERR, __FILE__, __LINE__)
+#define EXC_(e)     RingDebug::instance->print(e, __FILE__, __LINE__)
+
+#if UWP_DBG_IO
+#define IOMSG_(str) MSG_(str)
+#else
+#define IOMSG_(str)
+#endif
+#else
+#define MSG_(str)
+#define WNG_(str)
+#define ERR_(str)
+#define EXC_(e)
+#define IOMSG_(str)
+#endif
 
 }
diff --git a/CallsViewModel.cpp b/RingDevice.h
similarity index 69%
rename from CallsViewModel.cpp
rename to RingDevice.h
index 1bdb5a849f625e37f06c82d6c43a1e5fb32af149..ea0aaa64830f69c3a377593c424dfe5bac87ef8a 100644
--- a/CallsViewModel.cpp
+++ b/RingDevice.h
@@ -1,4 +1,4 @@
-/**************************************************************************
+/***************************************************************************
 * Copyright (C) 2016 by Savoir-faire Linux                                *
 * Author: J�ger Nicolas <nicolas.jager@savoirfairelinux.com>              *
 * Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com>          *
@@ -16,23 +16,21 @@
 * 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 "pch.h"
+#pragma once
 
-#include "CallsViewModel.h"
-
-using namespace RingClientUWP;
-using namespace ViewModel;
-using namespace Windows::UI::Core;
-using namespace Windows::ApplicationModel::Core;
+namespace RingClientUWP
+{
 
-CallsViewModel::CallsViewModel()
+struct RingDevice
 {
-    callIdsList_ = ref new Vector<String^>();
+    RingDevice() { };
+    RingDevice(const std::string& id, const std::string& name)
+        : id(id)
+        , name(name)
+    { }
 
-    /* connect to delegates. */
+    std::string id;
+    std::string name;
+};
 
-    RingD::instance->incomingCall += ref new RingClientUWP::IncomingCall([&](
-    String^ accountId, String^ callId, String^ from) {
-        callIdsList_->Append(callId); // TODO : check if the string is remove when the call ends.
-    });
 }
diff --git a/Call.cpp b/RingDeviceItem.cpp
similarity index 64%
rename from Call.cpp
rename to RingDeviceItem.cpp
index 1854a8fe2ff61de3ca67f7db71118823d5140ce9..ef913b25a81221da67956d2d836eeb16365b9a60 100644
--- a/Call.cpp
+++ b/RingDeviceItem.cpp
@@ -1,6 +1,6 @@
 /**************************************************************************
 * Copyright (C) 2016 by Savoir-faire Linux                                *
-* Author: J�ger Nicolas <nicolas.jager@savoirfairelinux.com>              *
+* Author: Traczyk Andreas <traczyk.andreas@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    *
@@ -17,30 +17,24 @@
 **************************************************************************/
 #include "pch.h"
 
-#include "Call.h"
+#include "RingDeviceItem.h"
 
 using namespace Windows::ApplicationModel::Core;
 using namespace Platform;
+using namespace Windows::Data::Json;
 using namespace Windows::UI::Core;
 
 using namespace RingClientUWP;
+using namespace RingClientUWP::Controls;
+using namespace ViewModel;
 
-// REFACTORING : for the whole Call class, change "from" to "peer"
-
-Call::Call(String^ accountIdz, String^ callIdz, String^ fromz)
+RingDeviceItem::RingDeviceItem(String^ deviceId, String^ deviceName)
+    :device_(std::make_unique<RingDevice>(Utils::toString(deviceId), Utils::toString(deviceName)))
 {
-    this->accountId = accountIdz;
-    this->callId = callIdz;
-    this->from = fromz;
-
-    isOutGoing = false; // by default, we consider the call incomming, REFACTO : add this to the constructor params...
-
-    this->state = CallStatus::NONE;
-    this->code = -1;
 }
 
 void
-Call::NotifyPropertyChanged(String^ propertyName)
+RingDeviceItem::NotifyPropertyChanged(String^ propertyName)
 {
     CoreApplicationView^ view = CoreApplication::MainView;
     view->CoreWindow->Dispatcher->RunAsync(
@@ -48,22 +42,11 @@ Call::NotifyPropertyChanged(String^ propertyName)
         ref new DispatchedHandler([this, propertyName]()
     {
         PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName));
-
     }));
 }
 
-//void RingClientUWP::Call::refuse()
-//{
-//    RingD::instance->refuseIncommingCall(this);
-//}
-//
-//void RingClientUWP::Call::accept()
-//{
-//    RingD::instance->acceptIncommingCall(this);
-//}
-//
-//void RingClientUWP::Call::cancel()
-//{
-//    MSG_("!2--->> cancel");
-//    RingD::instance->cancelOutGoingCall(this);
-//}
+void
+RingDeviceItem::raiseNotifyPropertyChanged(String^ propertyName)
+{
+    NotifyPropertyChanged(propertyName);
+}
diff --git a/RingDeviceItem.h b/RingDeviceItem.h
new file mode 100644
index 0000000000000000000000000000000000000000..d5de79b210a9264c12d4035f087ae4424131ae29
--- /dev/null
+++ b/RingDeviceItem.h
@@ -0,0 +1,80 @@
+/**************************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas <traczyk.andreas@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
+
+using namespace Platform;
+using namespace Windows::UI::Xaml;
+using namespace Windows::UI::Xaml::Data;
+
+namespace RingClientUWP
+{
+
+namespace Controls
+{
+
+public ref class RingDeviceItem sealed : public INotifyPropertyChanged
+{
+
+public:
+    RingDeviceItem(String^ deviceId, String^ deviceName);
+
+    void raiseNotifyPropertyChanged(String^ propertyName);
+    virtual event PropertyChangedEventHandler^ PropertyChanged;
+
+    property String^ _deviceName {
+        String^ get() {
+            return Utils::toPlatformString(device_->name);
+        }
+        void set(String^ value) {
+            device_->name = Utils::toString(value);
+            NotifyPropertyChanged("_deviceName");
+        }
+    }
+
+    property String^ _deviceId {
+        String^ get() {
+            return Utils::toPlatformString(device_->id);
+        }
+        void set(String^ value) {
+            device_->id = Utils::toString(value);
+            NotifyPropertyChanged("_deviceId");
+        }
+    }
+
+    property bool _isSelected {
+        bool get() {
+            return isSelected_;
+        }
+        void set(bool value) {
+            isSelected_ = value;
+            NotifyPropertyChanged("_isSelected");
+        }
+    }
+
+protected:
+    void NotifyPropertyChanged(String^ propertyName);
+
+private:
+    std::unique_ptr<RingDevice>     device_;
+
+    bool                            isSelected_;
+};
+}
+}
+
diff --git a/RingDeviceItemsViewModel.cpp b/RingDeviceItemsViewModel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6870702491e03c8a21cdc0ce43218327a345abb4
--- /dev/null
+++ b/RingDeviceItemsViewModel.cpp
@@ -0,0 +1,67 @@
+/**************************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas <traczyk.andreas@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 "pch.h"
+
+#include "RingDeviceItemsViewModel.h"
+
+using namespace Windows::ApplicationModel::Core;
+using namespace Windows::Data::Json;
+using namespace Windows::Storage;
+using namespace Windows::Storage::Streams;
+using namespace Windows::UI::Core;
+using namespace Windows::Globalization::DateTimeFormatting;
+
+
+using namespace RingClientUWP;
+using namespace ViewModel;
+
+RingDeviceItemsViewModel::RingDeviceItemsViewModel()
+{
+    itemsList_ = ref new Vector<RingDeviceItem^>();
+}
+
+RingDeviceItem^
+RingDeviceItemsViewModel::findItem(String^ deviceId)
+{
+    for each (RingDeviceItem^ item in itemsList)
+        if (item->_deviceId == deviceId)
+            return item;
+
+    return nullptr;
+}
+
+unsigned int
+RingDeviceItemsViewModel::getIndex(String^ deviceId)
+{
+    for (unsigned i = 0; i < itemsList_->Size; i++)
+        if (itemsList_->GetAt(i)->_deviceId == deviceId)
+            return i;
+
+    return 0;
+}
+
+void
+RingDeviceItemsViewModel::removeItem(RingDeviceItem ^ item)
+{
+    unsigned int index;
+
+    if (itemsList->IndexOf(item, &index)) {
+        itemsList->RemoveAt(index);
+    }
+}
\ No newline at end of file
diff --git a/RingDeviceItemsViewModel.h b/RingDeviceItemsViewModel.h
new file mode 100644
index 0000000000000000000000000000000000000000..6bdd7697dfd44734823ecf4cfc16ca889c41c2f4
--- /dev/null
+++ b/RingDeviceItemsViewModel.h
@@ -0,0 +1,83 @@
+/**************************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas <traczyk.andreas@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 "RingDeviceItem.h"
+
+using namespace Platform::Collections;
+using namespace Concurrency;
+
+using namespace RingClientUWP;
+using namespace RingClientUWP::Controls;
+
+namespace RingClientUWP
+{
+
+namespace ViewModel
+{
+
+public ref class RingDeviceItemsViewModel sealed
+{
+internal:
+    /* singleton */
+    static property RingDeviceItemsViewModel^ instance {
+        RingDeviceItemsViewModel^ get() {
+            static RingDeviceItemsViewModel^ instance_ = ref new RingDeviceItemsViewModel();
+            return instance_;
+        }
+    }
+
+    /* functions */
+    RingDeviceItem^ findItem(String^ deviceId);
+    unsigned int    getIndex(String^ deviceId);
+    void            removeItem(RingDeviceItem^ item);
+
+    property IObservableVector<RingDeviceItem^>^ itemsList {
+        IObservableVector<RingDeviceItem^>^ get() {
+            return itemsList_;
+        }
+    }
+
+    property RingDeviceItem^ _selectedItem {
+        RingDeviceItem^ get() {
+            return currentItem_;
+        }
+        void set(RingDeviceItem^ value) {
+            oldItem_ = currentItem_;
+            currentItem_ = value;
+
+            if (oldItem_ != nullptr)
+                oldItem_->_isSelected = false;
+
+            if (currentItem_ != nullptr) {
+                currentItem_->_isSelected = true;
+            }
+        }
+    }
+
+private:
+    RingDeviceItemsViewModel(); // singleton
+
+    Vector<RingDeviceItem^>^ itemsList_;
+
+    RingDeviceItem^ currentItem_;
+    RingDeviceItem^ oldItem_;
+};
+}
+}
diff --git a/Ringtone.cpp b/Ringtone.cpp
index d0685c9e6789b3184362e03b807cc1eba28a8c18..516d2d15bed32d3bfdc284d358edc908c5c37842 100644
--- a/Ringtone.cpp
+++ b/Ringtone.cpp
@@ -42,20 +42,20 @@ Ringtone::Ringtone(String^ fileName)
 void
 Ringtone::Start()
 {
-    _graph->Start();
+    _deviceOutputNode->OutgoingGain = startingGain;
+    _graph->ResetAllNodes();
 }
 
 void
 Ringtone::Stop()
 {
-    _graph->Stop();
-    _graph->ResetAllNodes();
+    _deviceOutputNode->OutgoingGain = 0.0;
 }
 
 task<void>
 Ringtone::CreateGraph()
 {
-    AudioGraphSettings^ settings = ref new AudioGraphSettings(Windows::Media::Render::AudioRenderCategory::Media);
+    AudioGraphSettings^ settings = ref new AudioGraphSettings(Windows::Media::Render::AudioRenderCategory::GameChat);
     return create_task(AudioGraph::CreateAsync(settings))
         .then([=](CreateAudioGraphResult^ result){
         if (result->Status != AudioGraphCreationStatus::Success) {
@@ -74,6 +74,9 @@ Ringtone::CreateDefaultDeviceOutputNode()
             MSG_("CreateDefaultDeviceOutputNode failed");
         }
         _deviceOutputNode = result->DeviceOutputNode;
+        startingGain = _deviceOutputNode->OutgoingGain;
+        _deviceOutputNode->OutgoingGain = 0.0;
+        _graph->Start();
     });
 }
 
@@ -86,12 +89,6 @@ Ringtone::CreateFileInputNode()
         .then([=](StorageFolder^ assetsFolder){
         create_task(assetsFolder->GetFileAsync(fileName_))
             .then([=](StorageFile^ ringtoneFile){
-            // functions as a Background task but will force a SMTC panel into the thumbnail
-            //mp = ref new MediaPlayer();
-            //mp->Source = MediaSource::CreateFromStorageFile(ringtoneFile);
-            ////mp->CommandManager->IsEnabled = false;
-            //mp->IsLoopingEnabled = true;
-            //mp->Play();
             create_task(_graph->CreateFileInputNodeAsync(ringtoneFile))
                 .then([=](CreateAudioFileInputNodeResult^ result){
                 if (result->Status != AudioFileNodeCreationStatus::Success) {
diff --git a/Ringtone.h b/Ringtone.h
index bd26f78299a07eea2e893080f9463ae7e2eb33af..9acce1175a5076981a927aefd823f1b84724c81b 100644
--- a/Ringtone.h
+++ b/Ringtone.h
@@ -22,7 +22,6 @@ using namespace Platform;
 
 using namespace Windows::Media::Audio;
 using namespace Windows::Media::Core;
-using namespace Windows::Media::Playback;
 
 namespace RingClientUWP
 {
@@ -39,8 +38,8 @@ private:
     AudioFileInputNode^ _fileInputNode;
     AudioGraph^ _graph;
     AudioDeviceOutputNode^ _deviceOutputNode;
-    MediaPlayer^ mp;
     String^ fileName_;
+    double startingGain;
 
     task<void> CreateGraph();
     task<void> CreateDefaultDeviceOutputNode();
diff --git a/ScrollBars.xaml b/ScrollBars.xaml
new file mode 100644
index 0000000000000000000000000000000000000000..1db8bf9147c2f1e5194c7a60f70548db2fb91b60
--- /dev/null
+++ b/ScrollBars.xaml
@@ -0,0 +1,600 @@
+<!-- **********************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas<andreas.traczyk@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/> .  *
+*********************************************************************** -->
+<ResourceDictionary
+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+
+    <Style TargetType="ScrollBar">
+        <Setter Property="MinWidth" Value="6" />
+        <Setter Property="MaxWidth" Value="6" />
+        <Setter Property="MinHeight" Value="12" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="Foreground" Value="Transparent" />
+        <Setter Property="BorderBrush" Value="Transparent" />
+        <Setter Property="IsTabStop" Value="False" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="ScrollBar">
+                    <Grid x:Name="Root">
+                        <Grid.Resources>
+                            <ControlTemplate x:Key="RepeatButtonTemplate" TargetType="RepeatButton">
+                                <Grid x:Name="Root" Background="Transparent">
+                                    <VisualStateManager.VisualStateGroups>
+                                        <VisualStateGroup x:Name="CommonStates">
+                                            <VisualState x:Name="Normal" />
+                                        </VisualStateGroup>
+                                    </VisualStateManager.VisualStateGroups>
+                                </Grid>
+                            </ControlTemplate>
+                            <ControlTemplate x:Key="HorizontalIncrementTemplate" TargetType="RepeatButton">
+                                <Grid x:Name="Root">
+                                    <VisualStateManager.VisualStateGroups>
+                                        <VisualStateGroup x:Name="CommonStates">
+                                            <VisualState x:Name="Normal" />
+                                            <VisualState x:Name="PointerOver">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Root"
+                                                     Storyboard.TargetProperty="Background">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumLowBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Arrow"
+                                                     Storyboard.TargetProperty="Foreground">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                            <VisualState x:Name="Pressed">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Root"
+                                                     Storyboard.TargetProperty="Background">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Arrow"
+                                                     Storyboard.TargetProperty="Foreground">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltAltHighBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                            <VisualState x:Name="Disabled">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Arrow"
+                                                     Storyboard.TargetProperty="Foreground">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseHighBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                        </VisualStateGroup>
+                                    </VisualStateManager.VisualStateGroups>
+                                    <FontIcon x:Name="Arrow" Visibility="Collapsed" FontFamily="{ThemeResource SymbolThemeFontFamily}" Glyph="&#xE0E3;" Foreground="{ThemeResource SystemControlForegroundBaseHighBrush}" FontSize="6" MirroredWhenRightToLeft="True" />
+                                </Grid>
+                            </ControlTemplate>
+                            <ControlTemplate x:Key="HorizontalDecrementTemplate" TargetType="RepeatButton">
+                                <Grid x:Name="Root">
+                                    <VisualStateManager.VisualStateGroups>
+                                        <VisualStateGroup x:Name="CommonStates">
+                                            <VisualState x:Name="Normal"/>
+                                            <VisualState x:Name="PointerOver">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Root"
+                                                     Storyboard.TargetProperty="Background">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumLowBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Arrow"
+                                                     Storyboard.TargetProperty="Foreground">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                            <VisualState x:Name="Pressed">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Root"
+                                                     Storyboard.TargetProperty="Background">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Arrow"
+                                                     Storyboard.TargetProperty="Foreground">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltAltHighBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                            <VisualState x:Name="Disabled">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Arrow"
+                                                     Storyboard.TargetProperty="Foreground">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseHighBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                        </VisualStateGroup>
+                                    </VisualStateManager.VisualStateGroups>
+                                    <FontIcon x:Name="Arrow" Visibility="Collapsed" FontFamily="{ThemeResource SymbolThemeFontFamily}" Glyph="&#xE0E2;" Foreground="{ThemeResource SystemControlForegroundBaseHighBrush}" FontSize="6" MirroredWhenRightToLeft="True"/>
+                                </Grid>
+                            </ControlTemplate>
+                            <ControlTemplate x:Key="VerticalIncrementTemplate" TargetType="RepeatButton">
+                                <Grid x:Name="Root">
+                                    <VisualStateManager.VisualStateGroups>
+                                        <VisualStateGroup x:Name="CommonStates">
+                                            <VisualState x:Name="Normal" />
+                                            <VisualState x:Name="PointerOver">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Root"
+                                                     Storyboard.TargetProperty="Background">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumLowBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Arrow"
+                                                     Storyboard.TargetProperty="Foreground">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                            <VisualState x:Name="Pressed">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Root"
+                                                     Storyboard.TargetProperty="Background">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Arrow"
+                                                     Storyboard.TargetProperty="Foreground">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltAltHighBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                            <VisualState x:Name="Disabled">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Arrow"
+                                                     Storyboard.TargetProperty="Foreground">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseHighBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                        </VisualStateGroup>
+                                    </VisualStateManager.VisualStateGroups>
+                                    <FontIcon x:Name="Arrow" Visibility="Collapsed" FontFamily="{ThemeResource SymbolThemeFontFamily}" Glyph="&#xE0E5;" Foreground="{ThemeResource SystemControlForegroundBaseHighBrush}" FontSize="6" />
+                                </Grid>
+                            </ControlTemplate>
+                            <ControlTemplate x:Key="VerticalDecrementTemplate" TargetType="RepeatButton">
+                                <Grid x:Name="Root">
+                                    <VisualStateManager.VisualStateGroups>
+                                        <VisualStateGroup x:Name="CommonStates">
+                                            <VisualState x:Name="Normal" />
+                                            <VisualState x:Name="PointerOver">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Root"
+                                                     Storyboard.TargetProperty="Background">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumLowBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Arrow"
+                                                     Storyboard.TargetProperty="Foreground">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                            <VisualState x:Name="Pressed">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Root"
+                                                     Storyboard.TargetProperty="Background">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Arrow"
+                                                     Storyboard.TargetProperty="Foreground">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltAltHighBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                            <VisualState x:Name="Disabled">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Arrow"
+                                                     Storyboard.TargetProperty="Foreground">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseHighBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                        </VisualStateGroup>
+                                    </VisualStateManager.VisualStateGroups>
+                                    <FontIcon x:Name="Arrow" Visibility="Collapsed" FontFamily="{ThemeResource SymbolThemeFontFamily}" Glyph="&#xE0E4;" Foreground="{ThemeResource SystemControlForegroundBaseHighBrush}" FontSize="6" />
+                                </Grid>
+                            </ControlTemplate>
+                            <ControlTemplate x:Key="VerticalThumbTemplate" TargetType="Thumb">
+                                <Rectangle x:Name="ThumbVisual" Fill="{StaticResource RingBlueMidBrush}">
+                                    <VisualStateManager.VisualStateGroups>
+                                        <VisualStateGroup x:Name="CommonStates">
+                                            <VisualState x:Name="Normal" />
+                                            <VisualState x:Name="PointerOver">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ThumbVisual"
+                                 Storyboard.TargetProperty="Fill">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource RingBlueDarkBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                            <VisualState x:Name="Pressed">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ThumbVisual"
+                                 Storyboard.TargetProperty="Fill">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource RingBlueUltraDarkBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                            <VisualState x:Name="Disabled">
+                                                <Storyboard>
+                                                    <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ThumbVisual" />
+                                                </Storyboard>
+                                            </VisualState>
+                                        </VisualStateGroup>
+                                    </VisualStateManager.VisualStateGroups>
+                                </Rectangle>
+                            </ControlTemplate>
+                            <ControlTemplate x:Key="HorizontalThumbTemplate" TargetType="Thumb">
+                                <Rectangle x:Name="ThumbVisual" Fill="{ThemeResource SystemControlForegroundBaseLowBrush}">
+                                    <VisualStateManager.VisualStateGroups>
+                                        <VisualStateGroup x:Name="CommonStates">
+                                            <VisualState x:Name="Normal" />
+                                            <VisualState x:Name="PointerOver">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ThumbVisual"
+                                 Storyboard.TargetProperty="Fill">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumLowBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                            <VisualState x:Name="Pressed">
+                                                <Storyboard>
+                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ThumbVisual"
+                                 Storyboard.TargetProperty="Fill">
+                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumBrush}" />
+                                                    </ObjectAnimationUsingKeyFrames>
+                                                </Storyboard>
+                                            </VisualState>
+                                            <VisualState x:Name="Disabled">
+                                                <Storyboard>
+                                                    <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ThumbVisual" />
+                                                </Storyboard>
+                                            </VisualState>
+                                        </VisualStateGroup>
+                                    </VisualStateManager.VisualStateGroups>
+                                </Rectangle>
+                            </ControlTemplate>
+                        </Grid.Resources>
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal" />
+                                <VisualState x:Name="PointerOver" />
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <DoubleAnimation Duration="0"
+                                 To="0.5"
+                                 Storyboard.TargetProperty="Opacity"
+                                 Storyboard.TargetName="Root" />
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HorizontalTrackRect"
+                                               Storyboard.TargetProperty="Stroke">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledTransparentBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="VerticalTrackRect"
+                                               Storyboard.TargetProperty="Stroke">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledTransparentBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HorizontalPanningThumb"
+                                               Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledChromeHighBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="VerticalPanningThumb"
+                                               Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledChromeHighBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                            <VisualStateGroup x:Name="ScrollingIndicatorStates">
+                                <VisualState x:Name="TouchIndicator">
+                                    <Storyboard>
+                                        <FadeInThemeAnimation TargetName="HorizontalPanningRoot" />
+                                        <FadeInThemeAnimation TargetName="VerticalPanningRoot" />
+                                        <FadeOutThemeAnimation TargetName="HorizontalRoot" />
+                                        <FadeOutThemeAnimation TargetName="VerticalRoot" />
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HorizontalRoot"
+                                               Storyboard.TargetProperty="Visibility"
+                                               Duration="0">
+                                            <DiscreteObjectKeyFrame KeyTime="0">
+                                                <DiscreteObjectKeyFrame.Value>
+                                                    <Visibility>Collapsed</Visibility>
+                                                </DiscreteObjectKeyFrame.Value>
+                                            </DiscreteObjectKeyFrame>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="VerticalRoot"
+                                               Storyboard.TargetProperty="Visibility"
+                                               Duration="0">
+                                            <DiscreteObjectKeyFrame KeyTime="0">
+                                                <DiscreteObjectKeyFrame.Value>
+                                                    <Visibility>Collapsed</Visibility>
+                                                </DiscreteObjectKeyFrame.Value>
+                                            </DiscreteObjectKeyFrame>
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="MouseIndicator">
+                                    <Storyboard>
+                                        <FadeInThemeAnimation TargetName="HorizontalRoot" />
+                                        <FadeInThemeAnimation TargetName="VerticalRoot" />
+                                        <FadeOutThemeAnimation TargetName="HorizontalPanningRoot" />
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HorizontalPanningRoot"
+                                               Storyboard.TargetProperty="Visibility"
+                                               Duration="0">
+                                            <DiscreteObjectKeyFrame KeyTime="0">
+                                                <DiscreteObjectKeyFrame.Value>
+                                                    <Visibility>Collapsed</Visibility>
+                                                </DiscreteObjectKeyFrame.Value>
+                                            </DiscreteObjectKeyFrame>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <FadeOutThemeAnimation TargetName="VerticalPanningRoot" />
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="VerticalPanningRoot"
+                                               Storyboard.TargetProperty="Visibility"
+                                               Duration="0">
+                                            <DiscreteObjectKeyFrame KeyTime="0">
+                                                <DiscreteObjectKeyFrame.Value>
+                                                    <Visibility>Collapsed</Visibility>
+                                                </DiscreteObjectKeyFrame.Value>
+                                            </DiscreteObjectKeyFrame>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="IsHitTestVisible"
+                                               Storyboard.TargetName="HorizontalRoot">
+                                            <DiscreteObjectKeyFrame KeyTime="0">
+                                                <DiscreteObjectKeyFrame.Value>
+                                                    <x:Boolean>True</x:Boolean>
+                                                </DiscreteObjectKeyFrame.Value>
+                                            </DiscreteObjectKeyFrame>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="IsHitTestVisible"
+                                               Storyboard.TargetName="VerticalRoot">
+                                            <DiscreteObjectKeyFrame KeyTime="0">
+                                                <DiscreteObjectKeyFrame.Value>
+                                                    <x:Boolean>True</x:Boolean>
+                                                </DiscreteObjectKeyFrame.Value>
+                                            </DiscreteObjectKeyFrame>
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="NoIndicator">
+                                    <Storyboard>
+                                        <FadeOutThemeAnimation BeginTime="0" TargetName="HorizontalPanningRoot" />
+                                        <FadeOutThemeAnimation BeginTime="0" TargetName="VerticalPanningRoot" />
+                                        <FadeOutThemeAnimation BeginTime="0" TargetName="HorizontalRoot" />
+                                        <FadeOutThemeAnimation BeginTime="0" TargetName="VerticalRoot" />
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                        <Grid x:Name="HorizontalRoot" IsHitTestVisible="False">
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="Auto" />
+                                <ColumnDefinition Width="Auto" />
+                                <ColumnDefinition Width="Auto" />
+                                <ColumnDefinition Width="*" />
+                                <ColumnDefinition Width="Auto" />
+                            </Grid.ColumnDefinitions>
+                            <Rectangle x:Name="HorizontalTrackRect"
+                        Grid.ColumnSpan="5"
+                        Margin="0"
+                        StrokeThickness="{ThemeResource ScrollBarTrackBorderThemeThickness}"
+                        Fill="{ThemeResource SystemControlPageBackgroundChromeLowBrush}"
+                        Stroke="{ThemeResource SystemControlForegroundTransparentBrush}" />
+                            <RepeatButton x:Name="HorizontalSmallDecrease"
+                        Grid.Column="0"
+                        MinHeight="12"
+                        IsTabStop="False"
+                        Interval="50"
+                        Margin="0"
+                        Template="{StaticResource HorizontalDecrementTemplate}"
+                        Width="6"
+                        VerticalAlignment="Center" />
+                            <RepeatButton x:Name="HorizontalLargeDecrease"
+                        Grid.Column="1"
+                        HorizontalAlignment="Stretch"
+                        VerticalAlignment="Stretch"
+                        IsTabStop="False"
+                        Interval="50"
+                        Template="{StaticResource RepeatButtonTemplate}"
+                        Width="0" />
+                            <Thumb x:Name="HorizontalThumb"
+                        Grid.Column="2"
+                        Background="{ThemeResource SystemControlForegroundChromeHighBrush}"
+                        Template="{StaticResource HorizontalThumbTemplate}"
+                        Height="12"
+                        MinWidth="6"
+                        AutomationProperties.AccessibilityView="Raw" />
+                            <RepeatButton x:Name="HorizontalLargeIncrease"
+                        Grid.Column="3"
+                        HorizontalAlignment="Stretch"
+                        VerticalAlignment="Stretch"
+                        IsTabStop="False"
+                        Interval="50"
+                        Template="{StaticResource RepeatButtonTemplate}" />
+                            <RepeatButton x:Name="HorizontalSmallIncrease"
+                        Grid.Column="4"
+                        MinHeight="12"
+                        IsTabStop="False"
+                        Interval="50"
+                        Margin="0"
+                        Template="{StaticResource HorizontalIncrementTemplate}"
+                        Width="6"
+                        VerticalAlignment="Center" />
+                        </Grid>
+                        <Grid x:Name="HorizontalPanningRoot" MinWidth="6">
+                            <Border x:Name="HorizontalPanningThumb"
+                  VerticalAlignment="Bottom"
+                  HorizontalAlignment="Left"
+                  Background="{ThemeResource SystemControlForegroundChromeDisabledLowBrush}"
+                  BorderThickness="0"
+                  Height="2"
+                  MinWidth="2"
+                  Margin="0,2,0,2"/>
+                        </Grid>
+                        <Grid x:Name="VerticalRoot" IsHitTestVisible="False">
+                            <Grid.RowDefinitions>
+                                <RowDefinition Height="Auto" />
+                                <RowDefinition Height="Auto" />
+                                <RowDefinition Height="Auto" />
+                                <RowDefinition Height="*" />
+                                <RowDefinition Height="Auto" />
+                            </Grid.RowDefinitions>
+                            <Rectangle x:Name="VerticalTrackRect"
+                        Grid.RowSpan="5"
+                        Margin="0"
+                        StrokeThickness="{ThemeResource ScrollBarTrackBorderThemeThickness}"
+                        Fill="Transparent"
+                        Stroke="{ThemeResource SystemControlForegroundTransparentBrush}" />
+                            <RepeatButton x:Name="VerticalSmallDecrease"
+                                          Visibility="Collapsed"
+                        Height="12"
+                        MinWidth="6"
+                        IsTabStop="False"
+                        Interval="50"
+                        Margin="0"
+                        Grid.Row="0"
+                        Template="{StaticResource VerticalDecrementTemplate}"
+                        HorizontalAlignment="Center" />
+                            <RepeatButton x:Name="VerticalLargeDecrease"
+                        HorizontalAlignment="Stretch"
+                        VerticalAlignment="Stretch"
+                        Height="0"
+                        IsTabStop="False"
+                        Interval="50"
+                        Grid.Row="1"
+                        Template="{StaticResource RepeatButtonTemplate}"/>
+                            <Thumb x:Name="VerticalThumb"
+                        Grid.Row="2"
+                        Background="{ThemeResource SystemControlForegroundChromeHighBrush}"
+                        Template="{StaticResource VerticalThumbTemplate}"
+                        Width="6"
+                        MinHeight="12"
+                        AutomationProperties.AccessibilityView="Raw" />
+                            <RepeatButton x:Name="VerticalLargeIncrease"
+                        HorizontalAlignment="Stretch"
+                        VerticalAlignment="Stretch"
+                        IsTabStop="False"
+                        Interval="50"
+                        Grid.Row="3"
+                        Template="{StaticResource RepeatButtonTemplate}" />
+                            <RepeatButton x:Name="VerticalSmallIncrease"
+                                          Visibility="Collapsed"
+                        Height="12"
+                        MinWidth="6"
+                        IsTabStop="False"
+                        Interval="50"
+                        Margin="0"
+                        Grid.Row="4"
+                        Template="{StaticResource VerticalIncrementTemplate}"
+                        HorizontalAlignment="Center" />
+                        </Grid>
+                        <Grid x:Name="VerticalPanningRoot" MinHeight="24">
+                            <Border x:Name="VerticalPanningThumb"
+                  VerticalAlignment="Top"
+                  HorizontalAlignment="Right"
+                  Background="{ThemeResource SystemControlForegroundChromeDisabledLowBrush}"
+                  BorderThickness="0"
+                  Width="2"
+                  MinHeight="32"
+                  Margin="2,0,2,0"/>
+                        </Grid>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style TargetType="RepeatButton">
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}"/>
+        <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundTransparentBrush}" />
+        <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}" />
+        <Setter Property="Padding" Value="8,4,8,4" />
+        <Setter Property="HorizontalAlignment" Value="Left" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
+        <Setter Property="FontWeight" Value="Normal" />
+        <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
+        <Setter Property="UseSystemFocusVisuals" Value="True" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="RepeatButton">
+                    <Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal" />
+                                <VisualState x:Name="PointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
+                                                   Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
+                                                   Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseHighBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Pressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid"
+                                                   Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseMediumLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
+                                                   Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightTransparentBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
+                                                   Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseHighBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid"
+                                                   Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
+                                                   Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseMediumLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
+                                                   Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledTransparentBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                        <ContentPresenter x:Name="ContentPresenter"
+                          BorderBrush="{TemplateBinding BorderBrush}"
+                          BorderThickness="{TemplateBinding BorderThickness}"
+                          Content="{TemplateBinding Content}"
+                          ContentTransitions="{TemplateBinding ContentTransitions}"
+                          ContentTemplate="{TemplateBinding ContentTemplate}"
+                          Padding="{TemplateBinding Padding}"
+                          HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
+                          VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
+                          AutomationProperties.AccessibilityView="Raw"/>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+</ResourceDictionary>
\ No newline at end of file
diff --git a/SmartPanel.xaml b/SmartPanel.xaml
index a6358ada9ce4aaad0d3ef82422839b9e4be26c15..ecd86864a61e5a581b1a9711622de3e40a7be759 100644
--- a/SmartPanel.xaml
+++ b/SmartPanel.xaml
@@ -15,338 +15,683 @@
 *                                                                         *
 * You should have received a copy of the GNU General Public License       *
 * along with this program.  If not, see <http://www.gnu.org/licenses/> .  *
-*********************************************************************** -->
+***********************************************************************-->
 <Page x:Class="RingClientUWP.Views.SmartPanel"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-      xmlns:local="using:RingClientUWP"
       xmlns:controls="using:RingClientUWP.Controls"
-      xmlns:views="using:RingClientUWP.Views"
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+      xmlns:local="using:RingClientUWP"
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+      xmlns:views="using:RingClientUWP.Views"
       NavigationCacheMode="Enabled"
       mc:Ignorable="d">
 
     <Page.Resources>
-        <!-- converters -->
-        <views:NewMessageBubleNotification x:Key="_NewMessageBubleNotification_" />
-        <views:IncomingVisibility x:Key="_IncomingVisibility_" />
-        <views:OutGoingVisibility x:Key="_OutGoingVisibility_" />
-        <views:HasAnActiveCall x:Key="_HasAnActiveCall_" />
-        <views:AccountTypeToSourceImage x:Key="_AccountTypeToSourceImage_" />
-        <views:AccountSelectedToVisibility x:Key="_AccountSelectedToVisibility_" />
-        <views:CollapseEmptyString x:Key="_CollapseEmptyString_" />
-        <views:ContactStatusNotification x:Key="_ContactStatusNotification_" />
-        <views:boolToVisibility x:Key="_boolToVisibility_" />
-        <views:uintToVisibility x:Key="_uintToVisibility_" />
-        <views:OneToVisibility x:Key="_OneToVisibility_" />
-        <views:MoreThanOneToVisibility x:Key="_MoreThanOneToVisibility_" />
-        <views:SelectedAccountToVisibility x:Key="_SelectedAccountToVisibility_" />
-        <views:CallStatusToSpinnerVisibility x:Key="_CallStatusToSpinnerVisibility_" />
-        <views:CallStatusForIncomingCallAnimatedEllipse x:Key="_CallStatusForIncomingCallAnimatedEllipse_" />
-        <views:CallStatusForIncomingCallStaticEllipse x:Key="_CallStatusForIncomingCallStaticEllipse_" />
-
-        <!-- template for contacts. -->
-        <DataTemplate x:Key="ContactTemplate"
-                      x:DataType="local:Contact">
-            <Grid>
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="310"/>
-                </Grid.ColumnDefinitions>
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="60"/>
-                    <!-- use the height of _contactBar_ to make it visible or collapsed. -->
-                    <RowDefinition x:Name="_contactBar_"
-                                   Height="{x:Bind _contactBarHeight, Mode=OneWay}"/>
-                </Grid.RowDefinitions>
-                <Grid Grid.Row="0">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition Width="60"/>
-                        <ColumnDefinition Width="*"
-                                          MinWidth="200"/>
-                    </Grid.ColumnDefinitions>
-                    <Image x:Name="_XcontactAvatar_"
-                           VerticalAlignment="Center"
-                           HorizontalAlignment="Center"
-                           Grid.Column="0"
-                           Width="55"
-                           Height="55"
-                           Source="Assets\TESTS\contactAvatar.png"/>
-                    <!-- visual notifications. -->
-                    <Border x:Name="_visualNotificationVideoChat_"
-                            Visibility="Collapsed"
-                            Style="{StaticResource BorderStyle1}">
-                        <TextBlock Text="&#xE8AA;"
-                                   Style="{StaticResource TextSegoeStyle1}"/>
-                        <Border.RenderTransform>
-                            <TranslateTransform X="17" Y="-14"/>
-                        </Border.RenderTransform>
-                    </Border>
-                    <Grid Grid.Column="1">
-                        <Grid.RowDefinitions>
-                            <RowDefinition Height="30"/>
-                            <RowDefinition Height="30"/>
-                        </Grid.RowDefinitions>
-                        <!-- name of the contact. -->
-                        <TextBlock  x:Name="_contactName_"
-                                    Grid.Row="0"
-                                    Text="{x:Bind _name, Mode=OneWay}"
-                                    TextTrimming="CharacterEllipsis">
-                        </TextBlock>
-                    </Grid>
-                </Grid>
-            </Grid>
-        </DataTemplate>
-        <!-- template for AccountListItems. -->
-        <DataTemplate x:Key="AccountListItemsTemplate"
-                      x:DataType="controls:AccountListItem">
+        <!--  template for AccountListItems.  -->
+        <DataTemplate x:Key="AccountListItemsTemplate" x:DataType="controls:AccountListItem">
             <Grid Margin="0,10">
                 <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="40"/>
-                    <ColumnDefinition Width="280"/>
+                    <ColumnDefinition Width="60" />
+                    <ColumnDefinition Width="260" />
                 </Grid.ColumnDefinitions>
-                <Border Grid.Column="0"
-                        Margin="5,0"
-                        Style="{StaticResource BorderStyle3}">
-                    <Image x:Name="_AccountTypeIcon_"
-                           VerticalAlignment="Center"
-                           HorizontalAlignment="Center"
-                           Source="{x:Bind  _account.accountType_, Converter={StaticResource _AccountTypeToSourceImage_}, Mode=OneWay}"/>
-                </Border>
-                <Button x:Name="_editAccountMenuButton_"
-                        HorizontalAlignment="Right"
-                        VerticalAlignment="Top"
-                        Content="&#xE104;"
-                        FontFamily="Segoe MDL2 Assets"
+                <Image Grid.Column="0"
+                       x:Name="_AccountTypeIcon_"
+                       Width="32"
+                       Height="48"
+                       Margin="5,0"
+                       HorizontalAlignment="Center"
+                       VerticalAlignment="Center"
+                       Source="{x:Bind _account.accountType_, Converter={StaticResource _AccountTypeToSourceImage_}, Mode=OneWay}" />
+                <!--  display share/home/about  -->
+                <Grid Visibility="{x:Bind _account.accountType_, Converter={StaticResource _RingAccountTypeToVisibility_}, Mode=OneWay}">
+                    <Button Grid.Column="1"
+                            x:Name="_shareMenuButton_"
+                            VerticalAlignment="Bottom"
+                            Click="_shareMenuButton__Click"
+                            Style="{StaticResource FlatRoundShareListItemButton}"
+                            Visibility="{x:Bind _isSelected, Converter={StaticResource _AccountSelectedToVisibility_}, Mode=OneWay}">
+                        <ToolTipService.ToolTip>
+                            <TextBlock x:Uid="_tt_share_menu_" />
+                        </ToolTipService.ToolTip>
+                    </Button>
+                    <Grid.RenderTransform>
+                        <TranslateTransform X="244" Y="0" />
+                    </Grid.RenderTransform>
+                </Grid>
+                <!--  edit acccount  -->
+                <Button Grid.Column="1"
+                        x:Name="_editAccountMenuButton_"
+                        Width="31"
+                        Height="36"
                         Click="_editAccountMenuButton__Click"
-                        FontSize="20"
-                        Foreground="White"
-                        Background="Transparent"
-                        BorderThickness="0"
-                        Padding="0,4,0,2"
-                        Margin="0,0,12,0"
-                        Width="28"
-                        Visibility="{x:Bind _isSelected, Converter={StaticResource _AccountSelectedToVisibility_}, Mode=OneWay}"
-                        Grid.Column="1">
+                        Content="&#xE115;"
+                        FontFamily="Segoe MDL2 Assets"
+                        FontSize="18"
+                        Style="{StaticResource FlatRoundSettingsListItemButton}"
+                        Visibility="{x:Bind _isSelected, Converter={StaticResource _AccountSelectedToVisibility_}, Mode=OneWay}">
+                    <ToolTipService.ToolTip>
+                        <TextBlock x:Uid="_tt_edit_account_" />
+                    </ToolTipService.ToolTip>
                     <Button.RenderTransform>
-                        <TranslateTransform Y="-10"/>
+                        <TranslateTransform X="218" Y="10" />
                     </Button.RenderTransform>
                 </Button>
-                <StackPanel Grid.Column="1">
-                    <TextBlock x:Name="_accountName_"
-                           Style="{StaticResource TextStyle5}"
-                           Text="{x:Bind  _account.name_, Mode=OneWay}"/>
-                    <TextBlock x:Name="_ringID_"
-                               Grid.ColumnSpan="2"
-                               Style="{StaticResource TextStyle6}"
-                               Visibility="{x:Bind  _account.ringID_, Converter={StaticResource _CollapseEmptyString_}, Mode=OneWay}"
-                               Text="{x:Bind  _account.ringID_, Mode=OneWay}"/>
-                    <TextBlock x:Name="_sipUsername_"
-                               Grid.ColumnSpan="2"
-                               Visibility="{x:Bind  _account._sipUsername, Converter={StaticResource _CollapseEmptyString_}, Mode=OneWay}"
-                               Style="{StaticResource TextStyle6}"
-                               Text="{x:Bind  _account._sipUsername, Mode=OneWay}"/>
+                <StackPanel Grid.Column="1" Orientation="Vertical">
+                    <Grid>
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="180" />
+                            <ColumnDefinition Width="80" />
+                        </Grid.ColumnDefinitions>
+                        <TextBlock Grid.Column="0"
+                                   x:Name="_accountName_"
+                                   Style="{StaticResource TextStyle5}"
+                                   Text="{x:Bind _account._bestName3, Mode=OneWay}" />
+                        <TextBlock Grid.Column="1"
+                                   x:Name="_registrationState_"
+                                   Margin="0,0,22,0"
+                                   HorizontalAlignment="Right"
+                                   FontSize="12"
+                                   FontWeight="Bold"
+                                   Foreground="{x:Bind _account, Converter={StaticResource _AccountRegistrationStateToForeground_}, Mode=OneWay}"
+                                   Text="{x:Bind _account, Converter={StaticResource _AccountRegistrationStateToString_}, Mode=OneWay}" />
+                    </Grid>
+                    <Grid>
+                        <TextBlock x:Name="_ringID_"
+                                   Width="160"
+                                   Style="{StaticResource TextStyle6}"
+                                   Text="{x:Bind _account.ringID_, Mode=OneWay}"
+                                   TextTrimming="CharacterEllipsis"
+                                   Visibility="{x:Bind _account.ringID_, Converter={StaticResource _CollapseEmptyString_}, Mode=OneWay}">
+                            <ToolTipService.ToolTip>
+                                <TextBlock Text="{x:Bind _account.ringID_, Mode=OneWay}" />
+                            </ToolTipService.ToolTip>
+                        </TextBlock>
+                    </Grid>
                     <StackPanel Orientation="Horizontal">
-                        <TextBlock x:Name="_unreadMessagesNotification_"
-                               Grid.ColumnSpan="2"
-                               Visibility="{x:Bind  _account._unreadMessages, Converter={StaticResource _uintToVisibility_}, Mode=OneWay}"
-                               FontSize="12"
-                               FontWeight="Bold"
-                               Foreground="OrangeRed"
-                               Text="{x:Bind  _account._unreadMessages, Mode=OneWay}"/>
-                        <TextBlock Grid.ColumnSpan="2"
-                               Visibility="{x:Bind  _account._unreadMessages, Converter={StaticResource _OneToVisibility_}, Mode=OneWay}"
-                               FontSize="12"
-                               FontWeight="Bold"
-                               Foreground="OrangeRed"
-                               Text=" Unread message"/>
-                        <TextBlock Grid.ColumnSpan="2"
-                               Visibility="{x:Bind  _account._unreadMessages, Converter={StaticResource _MoreThanOneToVisibility_}, Mode=OneWay}"
-                               FontSize="12"
-                               FontWeight="Bold"
-                               Foreground="OrangeRed"
-                               Text=" Unread messages"/>
+                        <Border x:Name="_unreadAccountNotifications_"
+                                Width="20"
+                                Height="14"
+                                Padding="0"
+                                Style="{StaticResource BorderStyle2}"
+                                Visibility="{x:Bind _account._allUnread, Converter={StaticResource _MoreThanZeroToVisibility_}, Mode=OneWay}">
+                            <TextBlock VerticalAlignment="Bottom"
+                                       FontSize="12"
+                                       Style="{StaticResource TextStyle3}"
+                                       Text="{x:Bind _account, Converter={StaticResource _UnreadAccountNotificationsString_}, ConverterParameter=Summary, Mode=OneWay}">
+                                <ToolTipService.ToolTip>
+                                    <TextBlock Text="{x:Bind _account, Converter={StaticResource _UnreadAccountNotificationsString_}, Mode=OneWay}" />
+                                </ToolTipService.ToolTip>
+                            </TextBlock>
+                            <Border.RenderTransform>
+                                <TranslateTransform X="0" Y="4" />
+                            </Border.RenderTransform>
+                        </Border>
                     </StackPanel>
                 </StackPanel>
             </Grid>
         </DataTemplate>
-        <!-- template for smartpanelitems. -->
-        <DataTemplate x:Key="SmartPanelItemsTemplate"
-                      x:DataType="controls:SmartPanelItem">
-            <StackPanel Visibility="{x:Bind _contact, Converter={StaticResource _SelectedAccountToVisibility_}, Mode=OneWay}">
-                <Grid PointerReleased="Grid_PointerReleased"
-                  PointerEntered="Grid_PointerEntered"
-                  PointerExited="Grid_PointerExited"
-                  PointerMoved="Grid_PointerMoved"
-                  Visibility="{x:Bind _showMe, Mode=OneWay}">
+
+        <!--  template for RingDeviceItems.  -->
+        <DataTemplate x:Key="RingDeviceItemsTemplate" x:DataType="controls:RingDeviceItem">
+            <Grid Margin="10" HorizontalAlignment="Center">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="*" />
+                    <RowDefinition Height="*" />
+                </Grid.RowDefinitions>
+                <Grid Grid.Row="0">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="52" />
+                        <ColumnDefinition Width="180" />
+                        <ColumnDefinition Width="42" />
+                    </Grid.ColumnDefinitions>
+                    <TextBlock Grid.Column="0"
+                               x:Uid="_deviceName_"
+                               VerticalAlignment="Center"
+                               FontWeight="Bold" />
+                    <TextBlock Grid.Column="1"
+                               x:Name="_deviceName_"
+                               Width="180"
+                               VerticalAlignment="Center"
+                               Text="{x:Bind _deviceName, Mode=OneWay}"
+                               TextTrimming="CharacterEllipsis" />
+                    <Button Grid.Column="2"
+                            x:Name="_revokeDeviceButton_"
+                            Width="38"
+                            Height="32"
+                            Margin="4,0,0,0"
+                            Background="Transparent"
+                            BorderThickness="0"
+                            Click="_revokeDeviceButton__Click"
+                            Content="&#xE74D;"
+                            FontFamily="Segoe MDL2 Assets"
+                            FontSize="19"
+                            Style="{StaticResource FlatRoundListItemButton}">
+                        <ToolTipService.ToolTip>
+                            <TextBlock x:Uid="_tt_revoke_device_" />
+                        </ToolTipService.ToolTip>
+                    </Button>
+                </Grid>
+                <Grid Grid.Row="1" Margin="0,10,0,0">
+                    <TextBlock x:Name="_deviceId_"
+                               VerticalAlignment="Center"
+                               FontSize="12"
+                               Text="{x:Bind _deviceId, Mode=OneWay}"
+                               TextTrimming="CharacterEllipsis" />
+                </Grid>
+            </Grid>
+        </DataTemplate>
+
+        <!--  template for smartpanelitems.  -->
+        <DataTemplate x:Key="SmartPanelItemsTemplate" x:DataType="controls:SmartPanelItem">
+            <Grid DoubleTapped="SmartPanelItem_Grid_DoubleTapped"
+                  PointerEntered="SmartPanelItem_Grid_PointerEntered"
+                  PointerExited="SmartPanelItem_Grid_PointerExited"
+                  PointerMoved="SmartPanelItem_Grid_PointerMoved"
+                  RightTapped="SmartPanelItem_Grid_RightTapped"
+                  Visibility="{x:Bind _isVisible, Mode=OneWay}">
+                <FlyoutBase.AttachedFlyout>
+                    <MenuFlyout x:Name="_SPI_MenuFlyout_"
+                                LightDismissOverlayMode="Off"
+                                Placement="Bottom">
+                        <MenuFlyoutItem x:Name="_videoCall_MenuFlyoutItem_"
+                                        x:Uid="_call_"
+                                        Tapped="_videocall_MenuFlyoutItem_Tapped" />
+                        <MenuFlyoutItem x:Name="_addToConference_MenuFlyoutItem_"
+                                        x:Uid="_add_to_conference_"
+                                        Tapped="_addToConference_MenuFlyoutItem__Tapped"
+                                        Visibility="{x:Bind _contact, Converter={StaticResource _ContactConferenceableToVisibility_}, Mode=OneWay}" />
+                        <MenuFlyoutSeparator />
+                        <MenuFlyoutItem x:Name="_copyRingID_MenuFlyoutItem_"
+                                        x:Uid="_copy_ring_id_"
+                                        Tapped="_copyRingID_MenuFlyoutItem__Tapped"
+                                        Visibility="{x:Bind _contact, Converter={StaticResource _ContactAccountTypeToVisibility_}, ConverterParameter=RING, Mode=OneWay}" />
+                        <MenuFlyoutItem x:Name="_removeContact_MenuFlyoutItem_"
+                                        x:Uid="_remove_contact_"
+                                        Tapped="_removeContact_MenuFlyoutItem__Tapped" />
+                    </MenuFlyout>
+                </FlyoutBase.AttachedFlyout>
+                <!--  the first rectangle helps to detect mouse overing  -->
+                <Rectangle Fill="Transparent" />
+                <!--  curtain over item with contact not ready (e.g. lookup is in progress)  -->
+                <Rectangle Canvas.ZIndex="2"
+                           Fill="White"
+                           IsHitTestVisible="False"
+                           Opacity="0.6"
+                           Visibility="{x:Bind _contact._contactStatus, Converter={StaticResource _ContactStatusNotification_}, Mode=OneWay}" />
+                <!--  contact.  -->
+                <Grid>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="320" />
+                    </Grid.ColumnDefinitions>
                     <Grid.RowDefinitions>
-                        <!-- row definition for the contact. -->
-                        <RowDefinition Height="auto"/>
-                        <!-- row definition for the incoming call bar. -->
-                        <RowDefinition Height="auto"/>
+                        <RowDefinition Height="60" />
                     </Grid.RowDefinitions>
-                    <!-- the first rectangle helps to detect mouse overing-->
-                    <Rectangle Fill="Transparent"
-                           Width="320"
-                           Grid.Row="0"/>
-                    <!-- the two next rectangles offer a better visibility correlation between the call button and the
-                     backgrounds. Using them, avoid some visual bugs -->
-                    <!-- the second rectangle controls the background for a selected item -->
-                    <Rectangle Fill="#3bc1d3"
-                           Width="320"
-                           Visibility="{x:Bind _isSelected, Converter={StaticResource _boolToVisibility_}, Mode=OneWay}"
-                           Grid.Row="0"/>
-                    <!-- the thirs rectangle controls the background for an hovered item -->
-                    <Rectangle Fill="#ced9e1"
-                           Width="320"
-                           Visibility="{x:Bind _isHovered, Converter={StaticResource _boolToVisibility_}, Mode=OneWay}"
-                           Grid.Row="0"/>
-                    <!-- curtain over item with contact not ready (e.g. lookup is in progress) -->
-                    <Rectangle Fill="White"
-                           Width="320"
-                           Grid.Row="0"
-                           Canvas.ZIndex="2"
-                           Opacity="0.6"
-                           Visibility="{x:Bind _contact._contactStatus, Converter={StaticResource _ContactStatusNotification_}, Mode=OneWay}"/>
-                    <ProgressBar Canvas.ZIndex="3"
-                             Visibility="{x:Bind _contact._contactStatus, Converter={StaticResource _ContactStatusNotification_}, Mode=OneWay}"
-                             IsIndeterminate="True"/>
-                    <!-- contact. -->
                     <Grid Grid.Row="0">
                         <Grid.ColumnDefinitions>
-                            <ColumnDefinition Width="310"/>
+                            <ColumnDefinition Width="60" />
+                            <ColumnDefinition Width="*" MinWidth="200" />
+                        </Grid.ColumnDefinitions>
+                        <StackPanel Grid.Column="0">
+                            <!--  black magic replaced  -->
+                            <StackPanel>
+                                <Grid x:Name="_contactAvatarGrid_">
+                                    <Ellipse x:Name="_contactAvatarEllipse_"
+                                             Width="50"
+                                             Height="50"
+                                             Margin="5"
+                                             HorizontalAlignment="Center"
+                                             VerticalAlignment="Center"
+                                             Canvas.ZIndex="3"
+                                             Visibility="{x:Bind _callStatus, Converter={StaticResource _CallStatusForIncomingCallEllipse_}, ConverterParameter=Inverted, Mode=OneWay}">
+                                        <Ellipse.Fill>
+                                            <ImageBrush x:Name="_contactAvatar_" ImageSource="{x:Bind _contact._avatarImage, Mode=OneWay}" />
+                                        </Ellipse.Fill>
+                                    </Ellipse>
+                                    <Ellipse x:Name="_contactAvatarEllipse2_"
+                                             Width="50"
+                                             Height="50"
+                                             Margin="5"
+                                             HorizontalAlignment="Center"
+                                             VerticalAlignment="Center"
+                                             Canvas.ZIndex="2"
+                                             Visibility="{x:Bind _callStatus, Converter={StaticResource _CallStatusForIncomingCallEllipse_}, Mode=OneWay}">
+                                        <Ellipse.Fill>
+                                            <ImageBrush x:Name="_contactAvatar2_" ImageSource="{x:Bind _contact._avatarImage, Mode=OneWay}" />
+                                        </Ellipse.Fill>
+                                        <Ellipse.Triggers>
+                                            <EventTrigger>
+                                                <BeginStoryboard>
+                                                    <Storyboard x:Name="_incomingCallStoryboard_">
+                                                        <DoubleAnimation AutoReverse="True"
+                                                                         RepeatBehavior="Forever"
+                                                                         Storyboard.TargetName="_contactAvatarEllipse2_"
+                                                                         Storyboard.TargetProperty="Opacity"
+                                                                         From="1"
+                                                                         To="0.25"
+                                                                         Duration="0:0:1" />
+                                                    </Storyboard>
+                                                </BeginStoryboard>
+                                            </EventTrigger>
+                                        </Ellipse.Triggers>
+                                    </Ellipse>
+                                    <Grid Visibility="{x:Bind _contact, Converter={StaticResource _HasAvatarToVisibility_}, ConverterParameter=Inverted, Mode=OneWay}">
+                                        <Grid x:Name="_defaultAvatarGrid_"
+                                              Width="50"
+                                              Height="50"
+                                              Canvas.ZIndex="1"
+                                              Visibility="{x:Bind _callStatus, Converter={StaticResource _CallStatusForIncomingCallEllipse_}, ConverterParameter=Inverted, Mode=OneWay}">
+                                            <Ellipse x:Name="_defaultAvatar_" Fill="{x:Bind _contact._avatarColorBrush, Mode=OneWay}" />
+                                            <TextBlock HorizontalAlignment="Center"
+                                                       VerticalAlignment="Center"
+                                                       FontFamily="Arial"
+                                                       FontSize="30"
+                                                       Foreground="White"
+                                                       Text="{x:Bind _contact._bestName2, Converter={StaticResource _NameToInitialConverter_}, Mode=OneWay}"
+                                                       TextAlignment="Center" />
+                                        </Grid>
+                                        <Grid x:Name="_defaultAvatarGrid2_"
+                                              Width="50"
+                                              Height="50"
+                                              Canvas.ZIndex="0"
+                                              Visibility="{x:Bind _callStatus, Converter={StaticResource _CallStatusForIncomingCallEllipse_}, Mode=OneWay}">
+                                            <Ellipse x:Name="_defaultAvatar2_" Fill="{x:Bind _contact._avatarColorBrush, Mode=OneWay}" />
+                                            <TextBlock HorizontalAlignment="Center"
+                                                       VerticalAlignment="Center"
+                                                       FontFamily="Arial"
+                                                       FontSize="30"
+                                                       Foreground="White"
+                                                       Text="{x:Bind _contact._bestName2, Converter={StaticResource _NameToInitialConverter_}, Mode=OneWay}"
+                                                       TextAlignment="Center" />
+                                            <Grid.Triggers>
+                                                <EventTrigger>
+                                                    <BeginStoryboard>
+                                                        <Storyboard x:Name="_incomingCallStoryboard2_">
+                                                            <DoubleAnimation AutoReverse="True"
+                                                                             RepeatBehavior="Forever"
+                                                                             Storyboard.TargetName="_defaultAvatarGrid2_"
+                                                                             Storyboard.TargetProperty="Opacity"
+                                                                             From="1"
+                                                                             To="0.25"
+                                                                             Duration="0:0:1" />
+                                                        </Storyboard>
+                                                    </BeginStoryboard>
+                                                </EventTrigger>
+                                            </Grid.Triggers>
+                                        </Grid>
+                                    </Grid>
+                                </Grid>
+                                <Grid>
+                                    <Ellipse x:Name="_presenceNotificationCircle_"
+                                             Width="14"
+                                             Height="14"
+                                             Fill="{x:Bind _contact._presenceStatus, Converter={StaticResource _PresenceStatus_}, Mode=OneWay}"
+                                             IsHitTestVisible="False"
+                                             Stroke="{x:Bind _contact._presenceStatus, Converter={StaticResource _PresenceStatus_}, ConverterParameter=Border, Mode=OneWay}"
+                                             StrokeThickness="1.5"
+                                             Visibility="Visible">
+                                        <Ellipse.RenderTransform>
+                                            <TranslateTransform X="16" Y="-21" />
+                                        </Ellipse.RenderTransform>
+                                    </Ellipse>
+                                </Grid>
+                            </StackPanel>
+                            <Border x:Name="_visualNotificationNewMessage_"
+                                    Width="24"
+                                    Height="20"
+                                    Padding="2"
+                                    Style="{StaticResource BorderStyle2}"
+                                    Visibility="{x:Bind _contact._unreadMessages, Converter={StaticResource _NewMessageBubbleNotification_}, Mode=OneWay}">
+                                <TextBlock VerticalAlignment="Bottom"
+                                           FontSize="14"
+                                           Style="{StaticResource TextStyle3}"
+                                           Text="{x:Bind _contact._unreadMessages, Converter={StaticResource _NewMessageNotificationToNumber_}, Mode=OneWay}" />
+                                <Border.RenderTransform>
+                                    <TranslateTransform X="-17" Y="-58" />
+                                </Border.RenderTransform>
+                            </Border>
+                        </StackPanel>
+
+                        <Grid Grid.Column="1">
+                            <Grid.RowDefinitions>
+                                <RowDefinition Height="60" />
+                                <RowDefinition Height="30" />
+                            </Grid.RowDefinitions>
+                            <StackPanel Grid.Row="0" Padding="0,4,0,0">
+                                <!--  name of the contact.  -->
+                                <Grid>
+                                    <Grid.ColumnDefinitions>
+                                        <ColumnDefinition Width="180" />
+                                        <ColumnDefinition Width="*" />
+                                    </Grid.ColumnDefinitions>
+                                    <TextBlock Grid.Column="0"
+                                               x:Name="_contactName_"
+                                               MaxWidth="180"
+                                               Text="{x:Bind _contact._bestName, Mode=OneWay}"
+                                               TextTrimming="CharacterEllipsis">
+                                        <ToolTipService.ToolTip>
+                                            <StackPanel Orientation="Vertical">
+                                                <TextBlock Text="{x:Bind _contact._bestName, Mode=OneWay}" />
+                                            </StackPanel>
+                                        </ToolTipService.ToolTip>
+                                    </TextBlock>
+                                    <StackPanel Grid.Column="1" Orientation="Horizontal">
+                                        <ProgressBar Width="80"
+                                                     Padding="4,0,4,0"
+                                                     HorizontalAlignment="Right"
+                                                     Foreground="#333333"
+                                                     IsIndeterminate="True"
+                                                     Visibility="{x:Bind _callStatus, Converter={StaticResource _CallStatusToSpinnerVisibility_}, Mode=OneWay}" />
+                                        <ProgressBar Width="80"
+                                                     Padding="4,0,4,0"
+                                                     HorizontalAlignment="Right"
+                                                     Canvas.ZIndex="3"
+                                                     Foreground="#333333"
+                                                     IsIndeterminate="True"
+                                                     Visibility="{x:Bind _contact._contactStatus, Converter={StaticResource _ContactStatusNotification_}, Mode=OneWay}" />
+                                    </StackPanel>
+                                </Grid>
+                                <StackPanel Orientation="Horizontal">
+                                    <TextBlock x:Name="_contactLastTime_"
+                                               MaxWidth="180"
+                                               FontSize="10"
+                                               FontStyle="Italic"
+                                               Foreground="#FF333333"
+                                               Text="{x:Bind _contact._lastTime, Mode=OneWay}"
+                                               TextTrimming="CharacterEllipsis" />
+                                </StackPanel>
+                                <Grid>
+                                    <Grid.ColumnDefinitions>
+                                        <ColumnDefinition Width="*" />
+                                        <ColumnDefinition Width="*" />
+                                    </Grid.ColumnDefinitions>
+                                    <TextBlock Grid.Column="0"
+                                               x:Uid="_contactRequestSent_"
+                                               MaxWidth="200"
+                                               FontSize="12"
+                                               FontStyle="Italic"
+                                               Foreground="#FF339933"
+                                               TextTrimming="CharacterEllipsis"
+                                               Visibility="{x:Bind _contact._trustStatus, Converter={StaticResource _PartialTrustToVisibility_}, Mode=OneWay}" />
+                                    <!--  call action buttons.  -->
+                                    <Grid Grid.Column="1"
+                                          x:Name="_callActionButtonGrid_"
+                                          Margin="5,5,7,5"
+                                          HorizontalAlignment="Right">
+                                        <Grid.RenderTransform>
+                                            <TranslateTransform X="0" Y="-19" />
+                                        </Grid.RenderTransform>
+                                        <Button Grid.Row="0"
+                                                x:Name="_callBtn_"
+                                                HorizontalAlignment="Left"
+                                                VerticalAlignment="Bottom"
+                                                Content="&#xE116;"
+                                                FontFamily="Segoe MDL2 Assets"
+                                                GotFocus="_callBtn__Click"
+                                                Style="{StaticResource FlatRoundListItemButton}"
+                                                Visibility="{x:Bind _isCallable, Converter={StaticResource _boolToVisibility_}, Mode=OneWay}">
+                                            <ToolTipService.ToolTip>
+                                                <TextBlock x:Uid="_tt_video_call_" />
+                                            </ToolTipService.ToolTip>
+                                        </Button>
+                                        <StackPanel Grid.Row="0"
+                                                    HorizontalAlignment="Right"
+                                                    VerticalAlignment="Bottom"
+                                                    Orientation="Horizontal"
+                                                    Visibility="Visible">
+                                            <Button x:Name="_acceptIncomingCallBtn_"
+                                                    HorizontalAlignment="Center"
+                                                    VerticalAlignment="Bottom"
+                                                    Content="&#xE10B;"
+                                                    FontFamily="Segoe MDL2 Assets"
+                                                    GotFocus="_acceptIncomingCallBtn__Click"
+                                                    Style="{StaticResource FlatRoundListItemButton}"
+                                                    Visibility="{x:Bind _callStatus, Converter={StaticResource _IncomingVisibility_}, Mode=OneWay}">
+                                                <ToolTipService.ToolTip>
+                                                    <TextBlock x:Uid="_tt_accept_call_" />
+                                                </ToolTipService.ToolTip>
+                                            </Button>
+                                            <Button x:Name="_rejectIncomingCallBtn_"
+                                                    HorizontalAlignment="Center"
+                                                    VerticalAlignment="Bottom"
+                                                    Content="&#xE10A;"
+                                                    FontFamily="Segoe MDL2 Assets"
+                                                    GotFocus="_rejectIncomingCallBtn__Click"
+                                                    Style="{StaticResource FlatRoundListItemButton}"
+                                                    Visibility="{x:Bind _callStatus, Converter={StaticResource _IncomingVisibility_}, Mode=OneWay}">
+                                                <ToolTipService.ToolTip>
+                                                    <TextBlock x:Uid="_tt_reject_call_" />
+                                                </ToolTipService.ToolTip>
+                                            </Button>
+                                        </StackPanel>
+                                        <Button x:Name="_cancelCallBtn_"
+                                                HorizontalAlignment="Right"
+                                                VerticalAlignment="Bottom"
+                                                Content="&#xE10A;"
+                                                FontFamily="Segoe MDL2 Assets"
+                                                GotFocus="_cancelCallBtn__Click"
+                                                Style="{StaticResource FlatRoundListItemButton}"
+                                                Visibility="{x:Bind _callStatus, Converter={StaticResource _OutGoingVisibility_}, Mode=OneWay}">
+                                            <ToolTipService.ToolTip>
+                                                <TextBlock x:Uid="_tt_cancel_call_" />
+                                            </ToolTipService.ToolTip>
+                                        </Button>
+                                    </Grid>
+                                </Grid>
+                            </StackPanel>
+                        </Grid>
+                    </Grid>
+                </Grid>
+            </Grid>
+        </DataTemplate>
+
+        <!--  template for ContactRequestItems.  -->
+        <DataTemplate x:Key="ContactRequestItemsTemplate" x:DataType="controls:ContactRequestItem">
+            <!--<StackPanel Visibility="{x:Bind _contact, Converter={StaticResource _SelectedAccountToVisibility_}, Mode=OneWay}">-->
+            <StackPanel>
+                <Grid PointerEntered="ContactRequestItem_Grid_PointerEntered"
+                      PointerExited="ContactRequestItem_Grid_PointerExited"
+                      PointerMoved="ContactRequestItem_Grid_PointerMoved"
+                      PointerReleased="ContactRequestItem_Grid_PointerReleased"
+                      Visibility="{x:Bind _isVisible, Mode=OneWay}">
+                    <Grid Grid.Row="0">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="320" />
                         </Grid.ColumnDefinitions>
                         <Grid.RowDefinitions>
-                            <RowDefinition Height="60"/>
-                            <!-- use the height of _contactBar_ to make it visible or collapsed. -->
-                            <RowDefinition x:Name="_contactBar_"
-                                       Height="{x:Bind _contact._contactBarHeight, Mode=OneWay}"/>
+                            <RowDefinition Height="60" />
+                            <!--  use the height of _contactBar_ to make it visible or collapsed.  -->
+                            <RowDefinition x:Name="_contactBar_" Height="{x:Bind _contact._contactBarHeight, Mode=OneWay}" />
                         </Grid.RowDefinitions>
                         <Grid Grid.Row="0">
                             <Grid.ColumnDefinitions>
-                                <ColumnDefinition Width="60"/>
-                                <ColumnDefinition Width="*"
-                                              MinWidth="200"/>
+                                <ColumnDefinition Width="60" />
+                                <ColumnDefinition Width="*" MinWidth="200" />
                             </Grid.ColumnDefinitions>
-                            <StackPanel Grid.Column="0">
-                                <!-- so far, I haven't fond any way to make a nested animation, inside a datatemplate, starting with the begin method from the code.
-                            I use a black magic workaround with two ellipses... -->
-                                <Ellipse x:Name="_incomingCallAnimatedEllipse_"
-                                Height="50"
-                                     Visibility="{x:Bind _callStatus, Converter={StaticResource _CallStatusForIncomingCallAnimatedEllipse_}, Mode=OneWay}"
-                                        Width="50"
-                                        VerticalAlignment="Center"
-                                        HorizontalAlignment="Center"
-                                        Margin="5">
+                            <Grid Grid.Column="0">
+                                <Ellipse Width="50"
+                                         Height="50"
+                                         Margin="5"
+                                         HorizontalAlignment="Center"
+                                         VerticalAlignment="Center"
+                                         Canvas.ZIndex="1">
                                     <Ellipse.Fill>
-                                        <ImageBrush  x:Name="_contactAvatar2_"
-                                            ImageSource="{x:Bind _contact._avatarImage, Mode=OneWay}"/>
+                                        <ImageBrush x:Name="_contactAvatar_" ImageSource="{x:Bind _contact._avatarImage, Mode=OneWay}" />
                                     </Ellipse.Fill>
-                                    <Ellipse.Triggers>
-                                        <EventTrigger>
-                                            <BeginStoryboard>
-                                                <Storyboard x:Name="_toto_">
-                                                    <DoubleAnimation Storyboard.TargetName="_incomingCallAnimatedEllipse_"
-                                                             Storyboard.TargetProperty="Opacity"
-                                                             From="1"
-                                                             AutoReverse="True"
-                                                             RepeatBehavior="Forever"
-                                                             To="0"
-                                                             Duration="0:0:1"/>
-                                                </Storyboard>
-                                            </BeginStoryboard>
-                                        </EventTrigger>
-                                    </Ellipse.Triggers>
                                 </Ellipse>
-                                <Ellipse Visibility="{x:Bind _callStatus, Converter={StaticResource _CallStatusForIncomingCallStaticEllipse_}, Mode=OneWay}"
+                                <Grid Width="50"
+                                      Height="50"
+                                      Margin="5"
+                                      Canvas.ZIndex="0">
+                                    <Ellipse x:Name="_defaultAvatar_" Fill="{x:Bind _contact._avatarColorBrush, Mode=OneWay}" />
+                                    <TextBlock HorizontalAlignment="Center"
+                                               VerticalAlignment="Center"
+                                               FontFamily="Arial"
+                                               FontSize="30"
+                                               Foreground="White"
+                                               Text="{x:Bind _contact._bestName2, Converter={StaticResource _NameToInitialConverter_}, Mode=OneWay}"
+                                               TextAlignment="Center" />
+                                </Grid>
+                            </Grid>
+                            <Grid Grid.Column="1">
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="60" />
+                                    <RowDefinition Height="30" />
+                                </Grid.RowDefinitions>
+                                <StackPanel Grid.Row="0"
+                                            Margin="0,3,0,0"
+                                            Orientation="Vertical">
+                                    <!--  name of the contact.  -->
+                                    <TextBlock x:Name="_contactName_"
+                                               MaxWidth="240"
+                                               HorizontalAlignment="Left"
+                                               FontSize="14"
+                                               Text="{x:Bind _contact._name, Mode=OneWay}"
+                                               TextTrimming="CharacterEllipsis">
+                                        <ToolTipService.ToolTip>
+                                            <StackPanel Orientation="Vertical">
+                                                <TextBlock Text="{x:Bind _contact._name, Mode=OneWay}" />
+                                            </StackPanel>
+                                        </ToolTipService.ToolTip>
+                                    </TextBlock>
+                                    <TextBlock x:Uid="_contactRequestPending_"
+                                               MaxWidth="200"
+                                               HorizontalAlignment="Left"
+                                               FontSize="12"
+                                               FontStyle="Italic"
+                                               Foreground="#FF339933"
+                                               TextTrimming="CharacterEllipsis" />
+                                </StackPanel>
+                                <StackPanel Grid.Row="0"
+                                            Margin="0,0,6,6"
+                                            HorizontalAlignment="Right"
+                                            VerticalAlignment="Bottom"
+                                            Orientation="Horizontal"
+                                            Visibility="Visible">
+                                    <Button x:Name="_acceptContactRequestBtn_"
+                                            HorizontalAlignment="Center"
+                                            VerticalAlignment="Bottom"
+                                            Click="_acceptContactRequestBtn__Click"
+                                            Content="&#xE10B;"
+                                            FontFamily="Segoe MDL2 Assets"
+                                            Style="{StaticResource FlatRoundListItemButton}">
+                                        <ToolTipService.ToolTip>
+                                            <TextBlock x:Uid="_tt_accept_cr_" />
+                                        </ToolTipService.ToolTip>
+                                    </Button>
+                                    <Button x:Name="_rejectContactRequestBtn_"
+                                            HorizontalAlignment="Center"
+                                            VerticalAlignment="Bottom"
+                                            Click="_rejectContactRequestBtn__Click"
+                                            Content="&#xE10A;"
+                                            FontFamily="Segoe MDL2 Assets"
+                                            Style="{StaticResource FlatRoundListItemButton}">
+                                        <ToolTipService.ToolTip>
+                                            <TextBlock x:Uid="_tt_ingnore_cr_" />
+                                        </ToolTipService.ToolTip>
+                                    </Button>
+                                    <Button x:Name="_blockContactBtn_"
+                                            HorizontalAlignment="Center"
+                                            VerticalAlignment="Bottom"
+                                            Click="_blockContactBtn__Click"
+                                            Content="&#xE8F8;"
+                                            FontFamily="Segoe MDL2 Assets"
+                                            Style="{StaticResource FlatRoundListItemButton}">
+                                        <ToolTipService.ToolTip>
+                                            <StackPanel Orientation="Vertical">
+                                                <TextBlock x:Uid="_tt_block_cr_" TextWrapping="Wrap" />
+                                                <TextBlock x:Uid="_tt_block_cr_2"
+                                                           FontStyle="Italic"
+                                                           TextWrapping="Wrap" />
+                                            </StackPanel>
+                                        </ToolTipService.ToolTip>
+                                    </Button>
+                                </StackPanel>
+                            </Grid>
+                        </Grid>
+                    </Grid>
+                </Grid>
+            </StackPanel>
+        </DataTemplate>
 
-                                Height="50"
-                                        Width="50"
-                                        VerticalAlignment="Center"
-                                        HorizontalAlignment="Center"
-                                        Margin="5">
+        <!--  template for BannedContactTemplate.  -->
+        <DataTemplate x:Key="BannedContactTemplate" x:DataType="controls:SmartPanelItem">
+            <StackPanel>
+                <Grid Background="{StaticResource RingBlueHighLight3Brush}" Visibility="{x:Bind _isVisible, Mode=OneWay}">
+                    <Grid Grid.Row="0">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="260" />
+                        </Grid.ColumnDefinitions>
+                        <Grid>
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="60" />
+                                <ColumnDefinition Width="*" MinWidth="200" />
+                            </Grid.ColumnDefinitions>
+                            <StackPanel Grid.Column="0" Canvas.ZIndex="1">
+                                <Ellipse Width="50"
+                                         Height="50"
+                                         Margin="5"
+                                         HorizontalAlignment="Center"
+                                         VerticalAlignment="Center">
                                     <Ellipse.Fill>
-                                        <ImageBrush  x:Name="_contactAvatar_"
-                                            ImageSource="{x:Bind _contact._avatarImage, Mode=OneWay}"/>
+                                        <ImageBrush x:Name="_contactAvatar_" ImageSource="{x:Bind _contact._avatarImage, Mode=OneWay}" />
                                     </Ellipse.Fill>
                                 </Ellipse>
-                                <Border x:Name="_visualNotificationNewMessage_"
-                                    Visibility="{x:Bind _contact._unreadMessages, Converter={StaticResource _NewMessageBubleNotification_}, Mode=OneWay}"
-                                    Style="{StaticResource BorderStyle2}">
-                                    <TextBlock Text="{x:Bind _contact._unreadMessages, Mode=OneWay}"
-                                           Style="{StaticResource TextStyle3}"/>
-                                    <Border.RenderTransform>
-                                        <TranslateTransform X="-17" Y="-58"/>
-                                    </Border.RenderTransform>
-                                </Border>
                             </StackPanel>
-
+                            <Grid Grid.Column="0"
+                                  Width="50"
+                                  Height="50"
+                                  Margin="5"
+                                  Canvas.ZIndex="0">
+                                <Ellipse x:Name="_defaultAvatar_" Fill="{x:Bind _contact._avatarColorBrush, Mode=OneWay}" />
+                                <TextBlock HorizontalAlignment="Center"
+                                           VerticalAlignment="Center"
+                                           FontFamily="Arial"
+                                           FontSize="30"
+                                           Foreground="White"
+                                           Text="{x:Bind _contact._bestName2, Converter={StaticResource _NameToInitialConverter_}, Mode=OneWay}"
+                                           TextAlignment="Center" />
+                            </Grid>
                             <Grid Grid.Column="1">
                                 <Grid.RowDefinitions>
-                                    <RowDefinition Height="60"/>
-                                    <RowDefinition Height="30"/>
+                                    <RowDefinition Height="60" />
                                 </Grid.RowDefinitions>
-                                <StackPanel Grid.Row="0">
-                                    <!-- name of the contact. -->
-                                    <StackPanel Orientation="Horizontal">
-                                        <TextBlock  x:Name="_contactName_"
-                                            Text="{x:Bind _contact._name, Mode=OneWay}"
-                                            TextTrimming="CharacterEllipsis">
-                                        </TextBlock>
-                                    </StackPanel>
-                                    <StackPanel Orientation="Horizontal">
-                                        <TextBlock  x:Name="_contactLastTime_"
-                                                FontStyle="Italic"
-                                                Foreground="#333333"
-                                                MaxWidth="200"
-                                                TextTrimming="CharacterEllipsis"
-                                                FontSize="10"
-                                                Text="{x:Bind _contact._lastTime, Mode=OneWay}"/>
-                                        <ProgressBar Foreground="#333333"
-                                                 HorizontalAlignment="Right"
-                                                 Width="150"
-                                                 Visibility="{x:Bind _callStatus, Converter={StaticResource _CallStatusToSpinnerVisibility_}, Mode=OneWay}"
-                                                 IsIndeterminate="True"/>
-                                    </StackPanel>
-                                    <!-- call action buttons. -->
-                                    <Button Grid.Row="0"
-                                    Visibility="{x:Bind _isCallable, Converter={StaticResource _boolToVisibility_}, Mode=OneWay}"
-                                    Click="_callContact__Click"
-                                    VerticalAlignment="Bottom"
-                                    HorizontalAlignment="Left"
-                                    Style="{StaticResource ButtonStyleForCallBar}"
-                                    FontFamily="Segoe MDL2 Assets"
-                                    Content="&#xE116;"/>
-                                    <StackPanel Orientation="Horizontal"
-                                            Visibility="Visible"
-                                            Grid.Row="0"
-                                            VerticalAlignment="Bottom"
-                                            HorizontalAlignment="Right">
-                                        <Button x:Name="_acceptIncomingCallBtn_"
-                                            Click="_acceptIncomingCallBtn__Click"
-                                            Visibility="{x:Bind _callStatus, Converter={StaticResource _IncomingVisibility_}, Mode=OneWay}"
+                                <StackPanel Grid.Row="0"
+                                            Margin="0,3,0,0"
+                                            Orientation="Vertical">
+                                    <!--  name of the contact.  -->
+                                    <TextBlock x:Name="_contactName_"
+                                               MaxWidth="180"
+                                               HorizontalAlignment="Left"
+                                               FontSize="14"
+                                               Text="{x:Bind _contact._name, Mode=OneWay}"
+                                               TextTrimming="CharacterEllipsis">
+                                        <ToolTipService.ToolTip>
+                                            <StackPanel Orientation="Vertical">
+                                                <TextBlock Text="{x:Bind _contact._name, Mode=OneWay}" />
+                                            </StackPanel>
+                                        </ToolTipService.ToolTip>
+                                    </TextBlock>
+                                </StackPanel>
+                                <StackPanel Grid.Row="0"
+                                            Margin="0,0,6,6"
+                                            HorizontalAlignment="Right"
                                             VerticalAlignment="Bottom"
+                                            Orientation="Horizontal"
+                                            Visibility="Visible">
+                                    <Button x:Name="_addBannedContactBtn_"
                                             HorizontalAlignment="Center"
-                                            Style="{StaticResource ButtonStyleForCallBar}"
-                                            FontFamily="Segoe MDL2 Assets"
-                                            Content="&#xE10B;"/>
-                                        <Button x:Name="_rejectIncomingCallBtn_"
-                                            Click="_rejectIncomingCallBtn__Click"
-                                            Visibility="{x:Bind _callStatus, Converter={StaticResource _IncomingVisibility_}, Mode=OneWay}"
                                             VerticalAlignment="Bottom"
-                                            HorizontalAlignment="Center"
-                                            Style="{StaticResource ButtonStyleForCallBar}"
+                                            Click="_addBannedContactBtn__Click"
+                                            Content="&#xE8FA;"
                                             FontFamily="Segoe MDL2 Assets"
-                                            Content="&#xE10A;"/>
-                                    </StackPanel>
-                                    <Button x:Name="_cancelCallBtn_"
-                                        Click="_cancelCallBtn__Click"
-                                        Visibility="{x:Bind _callStatus, Converter={StaticResource _OutGoingVisibility_}, Mode=OneWay}"
-                                        VerticalAlignment="Bottom"
-                                        HorizontalAlignment="Right"
-                                        Style="{StaticResource ButtonStyleForCallBar}"
-                                        FontFamily="Segoe MDL2 Assets"
-                                        Content="&#xE10A;"/>
+                                            Style="{StaticResource FlatRoundListItemButton}">
+                                        <ToolTipService.ToolTip>
+                                            <StackPanel Orientation="Vertical">
+                                                <TextBlock x:Uid="_tt_add_banned_" />
+                                            </StackPanel>
+                                        </ToolTipService.ToolTip>
+                                    </Button>
                                 </StackPanel>
                             </Grid>
                         </Grid>
@@ -358,936 +703,1211 @@
 
     <Grid>
         <Grid.RowDefinitions>
-            <!-- where accounts and share menu drop down are. -->
-            <RowDefinition Height="auto"/>
-            <!-- where contacts and settings are. -->
-            <RowDefinition Height="*"/>
+            <!--  connectivity notification.  -->
+            <RowDefinition x:Name="_networkConnectivityNotificationRow_" Height="32" />
+            <!--  where accounts and share menu drop down are.  -->
+            <RowDefinition Height="auto" />
+            <!--  where contacts and settings are.  -->
+            <RowDefinition Height="*" />
         </Grid.RowDefinitions>
-        <!-- drop down menus. -->
-        <Grid Background="#3bc1d3">
+        <Grid Grid.Row="0" Background="#FFFF4343">
+            <TextBlock x:Uid="_network_unavailable_"
+                       HorizontalAlignment="Center"
+                       VerticalAlignment="Center"
+                       FontSize="12"
+                       Foreground="White" />
+        </Grid>
+        <!--  drop down menus.  -->
+        <Grid Grid.Row="1" Background="{StaticResource RingBlueMidBrush}">
             <Grid.RowDefinitions>
-                <!-- where the selected account is shown. -->
-                <RowDefinition x:Name="_selectedAccountRow_"
-                               Height="60"/>
-                <!-- where the drop down menus are shown. -->
-                <RowDefinition Height="auto"/>
+                <!--  where the selected account is shown.  -->
+                <RowDefinition x:Name="_selectedAccountRow_" Height="60" />
+                <!--  where the drop down menus are shown.  -->
+                <RowDefinition Height="auto" />
             </Grid.RowDefinitions>
-            <!-- selected account. -->
+            <!--  selected account.  -->
             <Grid Grid.Row="0">
                 <Grid.ColumnDefinitions>
-                    <ColumnDefinition x:Name="_selectedAccountAvatarColumn_"
-                                      Width="60"/>
-                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition x:Name="_selectedAccountAvatarColumn_" Width="60" />
+                    <ColumnDefinition Width="*" />
                 </Grid.ColumnDefinitions>
-                <Ellipse
-                    x:Name="_selectedAccountAvatarContainer_"
-                    Height="50"
-                    Width="50"
-                    Grid.Column="0"
-                    Stroke="White"
-                    StrokeThickness="3"
-                    PointerEntered="_selectedAccountAvatarContainer__PointerEntered"
-                    PointerExited="_selectedAccountAvatarContainer__PointerExited"
-                    PointerReleased="_selectedAccountAvatarContainer__PointerReleased"
-                    Margin="5">
+                <Ellipse Grid.Column="0"
+                         x:Name="_selectedAccountAvatarContainer_"
+                         Width="50"
+                         Height="50"
+                         Margin="0"
+                         PointerEntered="_selectedAccountAvatarContainer__PointerEntered"
+                         PointerExited="_selectedAccountAvatarContainer__PointerExited"
+                         PointerReleased="_selectedAccountAvatarContainer__PointerReleased">
                     <Ellipse.Fill>
-                        <ImageBrush
-                            x:Name="_selectedAccountAvatar_"
-                            ImageSource="Assets\TESTS\contactAvatar.png"/>
+                        <ImageBrush x:Name="_selectedAccountAvatar_" ImageSource="Assets\TESTS\contactAvatar.png" />
                     </Ellipse.Fill>
                 </Ellipse>
-                <Ellipse
-                    x:Name="_shaderPhotoboothIcon_"
-                    Visibility="Collapsed"
-                    Height="50"
-                    Width="50"
-                    Grid.Column="0"
-                    IsHitTestVisible="False"
-                    Fill="Black"
-                    Opacity="0.3"
-                    Margin="5">
-                </Ellipse>
-                <TextBlock x:Name="_photoboothIcon_"
-                           Grid.Column="0"
-                           Visibility="Collapsed"
+                <Ellipse Grid.Column="0"
+                         x:Name="_shaderPhotoboothIcon_"
+                         Width="50"
+                         Height="50"
+                         Margin="5"
+                         Fill="Black"
+                         IsHitTestVisible="False"
+                         Opacity="0.3"
+                         Visibility="Collapsed" />
+                <TextBlock Grid.Column="0"
+                           x:Name="_photoboothIcon_"
                            IsHitTestVisible="False"
                            Style="{StaticResource TextSegoeStyle-Centered-40pt-white}"
-                           Text="&#xE722;">
-                </TextBlock>
-                <StackPanel Grid.Column="1"
-                            VerticalAlignment="Bottom">
-                    <TextBlock x:Name="_selectedAccountName_"
-                               Text="the wizard will be summoned..."
-                               Margin="10"
-                               VerticalAlignment="Center"
-                               TextTrimming="CharacterEllipsis"
-                               Style="{StaticResource TextStyle2}"/>
+                           Text="&#xE722;"
+                           Visibility="Collapsed" />
+                <StackPanel Grid.Column="1" VerticalAlignment="Bottom">
                     <StackPanel Orientation="Horizontal">
-                        <!-- contacts list -->
-                        <ToggleButton x:Name="_contactsListMenuButton_"
-                                      VerticalAlignment="Bottom"
-                                      Content="&#xe716;"
-                                      Click="_contactsListMenuButton__Click"
-                                      Style="{StaticResource ToggleButtonStyle2}"/>
-                        <!-- account menu -->
+                        <TextBlock x:Name="_selectedAccountName_"
+                                   MaxWidth="125"
+                                   Margin="4,6,6,4"
+                                   VerticalAlignment="Center"
+                                   FontSize="18px"
+                                   FontWeight="SemiLight"
+                                   Style="{StaticResource TextStyle2}"
+                                   Text="[TEXT MISSING]"
+                                   TextTrimming="CharacterEllipsis" />
+                        <TextBlock x:Name="_selectedAccountUsername_"
+                                   MaxWidth="120"
+                                   Margin="4,6,6,4"
+                                   VerticalAlignment="Center"
+                                   FontSize="18px"
+                                   FontWeight="Light"
+                                   Foreground="#FFF0F0F0"
+                                   Style="{StaticResource TextStyle2}"
+                                   Text=""
+                                   TextTrimming="CharacterEllipsis" />
+                    </StackPanel>
+                    <StackPanel Orientation="Horizontal">
+                        <!--  contacts list  -->
+                        <Grid>
+                            <ToggleButton x:Name="_contactsListMenuButton_"
+                                          VerticalAlignment="Bottom"
+                                          Click="_contactsListMenuButton__Click"
+                                          Content="&#xe716;"
+                                          Style="{StaticResource FlatToggleButton}">
+                                <ToolTipService.ToolTip>
+                                    <TextBlock x:Uid="_tt_contact_list_menu_" />
+                                </ToolTipService.ToolTip>
+                            </ToggleButton>
+                            <Ellipse x:Name="_unreadMessagesCircle_"
+                                     Width="8"
+                                     Height="8"
+                                     Fill="OrangeRed"
+                                     IsHitTestVisible="False"
+                                     Stroke="OrangeRed"
+                                     StrokeThickness="1"
+                                     Visibility="Collapsed">
+                                <Ellipse.RenderTransform>
+                                    <TranslateTransform X="11" Y="-8" />
+                                </Ellipse.RenderTransform>
+                                <Ellipse.Triggers>
+                                    <EventTrigger>
+                                        <BeginStoryboard>
+                                            <Storyboard x:Name="_unreadMessagesAnimation_">
+                                                <DoubleAnimation AutoReverse="True"
+                                                                 RepeatBehavior="Forever"
+                                                                 Storyboard.TargetName="_unreadMessagesCircle_"
+                                                                 Storyboard.TargetProperty="Opacity"
+                                                                 From="1.0"
+                                                                 To="0.4"
+                                                                 Duration="0:0:1" />
+                                            </Storyboard>
+                                        </BeginStoryboard>
+                                    </EventTrigger>
+                                </Ellipse.Triggers>
+                            </Ellipse>
+                        </Grid>
+                        <!--  contact request list  -->
+                        <Grid>
+                            <ToggleButton x:Name="_contactRequestListMenuButton_"
+                                          VerticalAlignment="Bottom"
+                                          Click="_contactRequestListMenuButton__Click"
+                                          Content="&#xe8fa;"
+                                          Style="{StaticResource FlatToggleButton}">
+                                <ToolTipService.ToolTip>
+                                    <TextBlock x:Uid="_tt_cr_list_menu_" />
+                                </ToolTipService.ToolTip>
+                            </ToggleButton>
+                            <Ellipse x:Name="_unreadContactRequestsCircle_"
+                                     Width="8"
+                                     Height="8"
+                                     Fill="OrangeRed"
+                                     IsHitTestVisible="False"
+                                     Stroke="OrangeRed"
+                                     StrokeThickness="1"
+                                     Visibility="Collapsed">
+                                <Ellipse.RenderTransform>
+                                    <TranslateTransform X="11" Y="-8" />
+                                </Ellipse.RenderTransform>
+                                <Ellipse.Triggers>
+                                    <EventTrigger>
+                                        <BeginStoryboard>
+                                            <Storyboard x:Name="_unreadContactRequestsAnimation_">
+                                                <DoubleAnimation AutoReverse="True"
+                                                                 RepeatBehavior="Forever"
+                                                                 Storyboard.TargetName="_unreadContactRequestsCircle_"
+                                                                 Storyboard.TargetProperty="Opacity"
+                                                                 From="1.0"
+                                                                 To="0.4"
+                                                                 Duration="0:0:1" />
+                                            </Storyboard>
+                                        </BeginStoryboard>
+                                    </EventTrigger>
+                                </Ellipse.Triggers>
+                            </Ellipse>
+                        </Grid>
+                        <!--  account menu  -->
                         <Grid>
                             <ToggleButton x:Name="_accountsMenuButton_"
-                                      VerticalAlignment="Bottom"
-                                      Click="_accountsMenuButton__Click"
-                                      Content="&#xE168;"
-                                      Style="{StaticResource ToggleButtonStyle2}">
+                                          VerticalAlignment="Bottom"
+                                          Click="_accountsMenuButton__Click"
+                                          Content="&#xE168;"
+                                          Style="{StaticResource FlatToggleButton}">
+                                <ToolTipService.ToolTip>
+                                    <TextBlock x:Uid="_tt_account_list_menu_" />
+                                </ToolTipService.ToolTip>
                             </ToggleButton>
-                            <Ellipse x:Name="_unreadAccountMessagesCircle_"
-                                     Visibility="Collapsed"
-                                    IsHitTestVisible="False"
-                                    Fill="OrangeRed"
-                                    Height="8"
-                                    Width="8"
-                                    StrokeThickness="1"
-                                    Stroke="OrangeRed">
+                            <Ellipse x:Name="_unreadAccountNotificationsCircle_"
+                                     Width="8"
+                                     Height="8"
+                                     Fill="OrangeRed"
+                                     IsHitTestVisible="False"
+                                     Stroke="OrangeRed"
+                                     StrokeThickness="1"
+                                     Visibility="Collapsed">
                                 <Ellipse.RenderTransform>
-                                    <TranslateTransform X="10" Y="-10"/>
+                                    <TranslateTransform X="11" Y="-8" />
                                 </Ellipse.RenderTransform>
                                 <Ellipse.Triggers>
                                     <EventTrigger>
                                         <BeginStoryboard>
                                             <Storyboard x:Name="_unreadAccountMessagesAnimation_">
-                                                <DoubleAnimation Storyboard.TargetName="_unreadAccountMessagesCircle_"
-                                                             Storyboard.TargetProperty="Opacity"
-                                                             From="1.0"
-                                                             AutoReverse="True"
-                                                             RepeatBehavior="Forever"
-                                                             To="0.4"
-                                                             Duration="0:0:1"/>
+                                                <DoubleAnimation AutoReverse="True"
+                                                                 RepeatBehavior="Forever"
+                                                                 Storyboard.TargetName="_unreadAccountNotificationsCircle_"
+                                                                 Storyboard.TargetProperty="Opacity"
+                                                                 From="1.0"
+                                                                 To="0.4"
+                                                                 Duration="0:0:1" />
                                             </Storyboard>
                                         </BeginStoryboard>
                                     </EventTrigger>
                                 </Ellipse.Triggers>
                             </Ellipse>
                         </Grid>
-                        <!-- _shareMenuButton_ -->
-                        <ToggleButton x:Name="_shareMenuButton_"
-                                      VerticalAlignment="Bottom"
-                                      Click="_shareMenuButton__Click"
-                                      Style="{StaticResource ToggleButtonStyle2}">
-                            <StackPanel>
-                                <Image x:Name="_qrCodeIconWhite_"
-                                       Source="Assets/qrCodeIconWhite.png"
-                                       Visibility="Visible"
-                                       Stretch="None"/>
-                                <Image x:Name="_qrCodeIconBlack_"
-                                       Visibility="Collapsed"
-                                       Source="Assets/qrCodeIconBlack.png"
-                                       Stretch="None"/>
-                            </StackPanel>
-                        </ToggleButton>
-                        <!-- _devicesMenuButton_ -->
+                        <!--  _devicesMenuButton_  -->
                         <ToggleButton x:Name="_devicesMenuButton_"
                                       VerticalAlignment="Bottom"
                                       Click="_devicesMenuButton__Click"
                                       Content="&#xE836;"
-                                      Style="{StaticResource ToggleButtonStyle2}"/>
-                        <!-- _settingsMenuButton_ -->
+                                      Style="{StaticResource FlatToggleButton}">
+                            <ToolTipService.ToolTip>
+                                <TextBlock x:Uid="_tt_devices_list_menu_" />
+                            </ToolTipService.ToolTip>
+                        </ToggleButton>
+                        <!--  _settingsMenuButton_  -->
                         <ToggleButton x:Name="_settingsMenuButton_"
-                                      Click="_settingsMenuButton__Click"
                                       VerticalAlignment="Bottom"
-                                      Content="&#xE115;"
-                                      Style="{StaticResource ToggleButtonStyle2}"/>
+                                      Click="_settingsMenuButton__Click"
+                                      Content="&#xE90F;"
+                                      Style="{StaticResource FlatToggleButton}">
+                            <ToolTipService.ToolTip>
+                                <StackPanel Orientation="Vertical">
+                                    <TextBlock x:Uid="_tt_settings_menu_" />
+                                </StackPanel>
+                            </ToolTipService.ToolTip>
+                        </ToggleButton>
                     </StackPanel>
                 </StackPanel>
             </Grid>
 
-            <!--sub menus like the accounts list or the share menu are just below, technicaly they are nested inside the
-            same row. To summon them we use the visibility of their own grid, by linking it to a toggle button-->
+            <!--
+                sub menus like the accounts list or the share menu are just below, technicaly they are nested inside the
+                same row. To summon them we use the visibility of their own grid, by linking it to a toggle button
+            -->
 
         </Grid>
-        <!-- smartList and settings. -->
-        <Grid Grid.Row="1"
-              Background="#FFE4F1F9">
-            <!-- accounts menu. -->
-            <Grid x:Name="_accountsMenuGrid_"
-                  Grid.Row="0"
-                  Visibility="Collapsed"
-                  Background="#3bc1d3">
+
+        <!--  smartList and settings.  -->
+        <Grid Grid.Row="2" Background="{StaticResource RingBlueLightBrush}">
+            <!--  accounts menu.  -->
+            <Grid Grid.Row="0"
+                  x:Name="_accountsMenuGrid_"
+                  Background="{StaticResource RingBlueLightBrush}"
+                  Visibility="Collapsed">
                 <Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
-                    <RowDefinition Height="30"/>
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="*" />
+                    <RowDefinition Height="30" />
                 </Grid.RowDefinitions>
-                <ScrollViewer x:Name="_accountsListScrollView_"
+                <TextBlock Grid.Row="0"
+                           x:Uid="_accountsTitle_"
+                           Margin="12,6,4,8"
+                           Style="{StaticResource SubheaderTextBlockStyle}" />
+                <ScrollViewer Grid.Row="1"
+                              x:Name="_accountsListScrollView_"
                               ScrollViewer.VerticalScrollBarVisibility="Auto"
                               ScrollViewer.VerticalScrollMode="Enabled">
                     <ListBox x:Name="_accountsList_"
-                         Grid.Row="0"
-                         SelectionChanged="_accountList__SelectionChanged"
-                         Width="320"
-                         ItemContainerStyle="{StaticResource contactsListBoxStyle}"
-                         Background="#FFE4F1F9"
-                         ItemTemplate="{StaticResource AccountListItemsTemplate}"/>
+                             Width="320"
+                             Background="{StaticResource RingBlueLightBrush}"
+                             ItemContainerStyle="{StaticResource contactsListBoxStyle}"
+                             ItemTemplate="{StaticResource AccountListItemsTemplate}"
+                             SelectionChanged="_accountList__SelectionChanged" />
                 </ScrollViewer>
-                <StackPanel Orientation="Horizontal"
-                            Grid.Row="1">
-                    <!--Style="{StaticResource ButtonStyle6}"-->
+                <StackPanel Grid.Row="2"
+                            Background="{StaticResource RingBlueMidBrush}"
+                            Orientation="Horizontal">
                     <Button x:Name="_addAccountBtn_"
-                            VerticalAlignment="Center"
                             HorizontalAlignment="Center"
-                            Content="&#xE948;"
+                            VerticalAlignment="Center"
                             Click="_addAccountBtn__Click"
-                            Style="{StaticResource ButtonStyle5}"/>
-                    <!--Style="{StaticResource ButtonStyle6}"-->
+                            Content="&#xE948;"
+                            Style="{StaticResource AccountMenuButtonStyle}">
+                        <ToolTipService.ToolTip>
+                            <TextBlock x:Uid="_tt_add_account_" />
+                        </ToolTipService.ToolTip>
+                    </Button>
                     <Button x:Name="_linkThisDeviceBtn_"
-                            VerticalAlignment="Center"
                             HorizontalAlignment="Center"
-                            Content="&#xEBD2;"
+                            VerticalAlignment="Center"
                             Click="_linkThisDeviceBtn__Click"
-                            Style="{StaticResource ButtonStyle5}"/>
+                            Content="&#xE836;"
+                            Style="{StaticResource AccountMenuButtonStyle}">
+                        <ToolTipService.ToolTip>
+                            <TextBlock x:Uid="_tt_link_device_" />
+                        </ToolTipService.ToolTip>
+                    </Button>
+                    <Button x:Name="_deleteAccountButton_"
+                            Width="106"
+                            HorizontalAlignment="Center"
+                            VerticalAlignment="Center"
+                            Click="_deleteAccountButton__Click"
+                            Content="&#xE74D;"
+                            Style="{StaticResource AccountMenuButtonStyle}">
+                        <ToolTipService.ToolTip>
+                            <TextBlock x:Uid="_tt_delete_account_" />
+                        </ToolTipService.ToolTip>
+                    </Button>
                 </StackPanel>
             </Grid>
-            <!-- account edition menu. -->
-            <Grid x:Name="_accountEditionGrid_"
-                  Grid.Row="0"
-                  Visibility="Collapsed"
-                  Background="#3bc1d3">
+            <!--  account edition menu.  -->
+            <Grid Grid.Row="0"
+                  x:Name="_accountEditionGrid_"
+                  Background="{StaticResource RingBlueLightBrush}"
+                  Visibility="Collapsed">
                 <Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
-                    <RowDefinition Height="30"/>
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="*" />
+                    <RowDefinition Height="30" />
                 </Grid.RowDefinitions>
-                <ScrollViewer x:Name="_scrollViewerEditionMenu_"
-                              Grid.Row="0">
-                    <StackPanel Orientation="Vertical"
-                                Padding="10,0"
-                                Grid.Row="0"
-                                Background="#FFE4F1F9">
-                        <!-- alias sub menu. -->
-                        <StackPanel Orientation="Horizontal"
-                                    Margin="0,20">
-                            <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                       Margin="0,0,10,0"
-                                       Text="&#xE8EC;"/>
-                            <TextBlock Text="Alias"/>
+                <TextBlock Grid.Row="0"
+                           x:Uid="_accountEditionTitle_"
+                           Margin="12,6,4,8"
+                           Style="{StaticResource SubheaderTextBlockStyle}" />
+                <ScrollViewer Grid.Row="1" x:Name="_scrollViewerEditionMenu_">
+                    <StackPanel Padding="0,10,0,20"
+                                Background="{StaticResource RingBlueLightBrush}"
+                                Orientation="Vertical">
+                        <!--  enabled  -->
+                        <StackPanel Margin="20,20,10,10" Orientation="Horizontal">
+                            <TextBlock Margin="0,0,10,0"
+                                       Style="{StaticResource TextSegoeStyle-20pt-black}"
+                                       Text="&#xED5C;" />
+                            <TextBlock x:Uid="_accountsEnabled_" />
                         </StackPanel>
-                        <Grid Margin="10,0,10,10">
+                        <ToggleSwitch x:Name="_enabledState_" Margin="30,0,20,10" />
+                        <!--  alias sub menu.  -->
+                        <StackPanel Margin="10,30,0,10"
+                                    Padding="10,0"
+                                    Orientation="Horizontal">
+                            <TextBlock Margin="0,0,10,0"
+                                       Style="{StaticResource TextSegoeStyle-20pt-black}"
+                                       Text="&#xE8EC;" />
+                            <TextBlock x:Uid="_accountsAlias_" />
+                        </StackPanel>
+                        <Grid Margin="10" Padding="10,0">
                             <Grid.ColumnDefinitions>
-                                <ColumnDefinition Width="*"/>
-                                <ColumnDefinition Width="25"/>
+                                <ColumnDefinition Width="*" />
+                                <ColumnDefinition Width="25" />
                             </Grid.ColumnDefinitions>
-                            <TextBox  x:Name="_accountAliasTextBoxEdition_"
-                                      Grid.Column="0"
-                                      TextChanged="_accountAliasTextBoxEdition__TextChanged"
-                                      PlaceholderText="Enter alias"/>
-                            <TextBlock x:Name="_accountAliasValidEdition_"
-                                               Grid.Column="1"
-                                               Padding="10,0"
-                                               Style="{StaticResource TextSegoeStyle-20pt-green}"
-                                               Visibility="Collapsed"
-                                               Text="&#xE10B;"/>
-                            <TextBlock x:Name="_accountAliasInvalidEdition_"
-                                               Grid.Column="1"
-                                               Padding="10,0"
-                                               Style="{StaticResource TextSegoeStyle-20pt-red}"
-                                               Text="&#xE10A;"/>
+                            <TextBox Grid.Column="0"
+                                     x:Name="_accountAliasTextBoxEdition_"
+                                     x:Uid="_accountAliasTextBoxUid_"
+                                     Margin="10,0,10,0"
+                                     IsSpellCheckEnabled="False"
+                                     TextChanged="_accountAliasTextBoxEdition__TextChanged" />
+                            <TextBlock Grid.Column="1"
+                                       x:Name="_accountAliasValidEdition_"
+                                       Padding="10,0"
+                                       Style="{StaticResource TextSegoeStyle-20pt-green}"
+                                       Text="&#xE10B;"
+                                       Visibility="Collapsed" />
+                            <TextBlock Grid.Column="1"
+                                       x:Name="_accountAliasInvalidEdition_"
+                                       Padding="10,0"
+                                       Style="{StaticResource TextSegoeStyle-20pt-red}"
+                                       Text="&#xE10A;" />
                         </Grid>
-                        <!-- edition sub menu. -->
-                        <StackPanel x:Name="_ringStackEdition_">
-                            <!-- register account on blockachain -->
-                            <StackPanel Orientation="Horizontal"
-                                        Margin="0,20">
-                                <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                           Margin="0,0,10,0"
-                                           Text="&#xE167;"/>
-                                <TextBlock Text="Register public username"/>
+                        <!--  edition sub menu.  -->
+                        <StackPanel x:Name="_ringStackEdition_"
+                                    Margin="0,10,0,0"
+                                    Padding="10,0">
+                            <!--  register account on blockachain  -->
+                            <StackPanel Margin="10,20,0,10" Orientation="Horizontal">
+                                <TextBlock Margin="0,0,10,0"
+                                           Style="{StaticResource TextSegoeStyle-20pt-black}"
+                                           Text="&#xE167;" />
+                                <TextBlock x:Uid="_accountsRegisterPublicName_" />
                             </StackPanel>
                             <ToggleSwitch x:Name="_RegisterStateEdition_"
-                                      IsOn="True"
-                                      Toggled="_RegisterStateEdition__Toggled"
-                                      Margin="0,10"/>
-                            <TextBlock x:Name="_whatWilHappenEdition_"
-                                       Margin="0,10,0,0"
-                                       Style="{StaticResource BodyTextBlockStyle}"
-                                       Text="peoples will find you with your username"/>
-                            <HyperlinkButton Content="Learn more"
-                                             Margin="0,0,0,10"
-                                             NavigateUri="http://ring.cx"/>
+                                          Margin="20,0,20,10"
+                                          IsOn="True"
+                                          Toggled="_RegisterStateEdition__Toggled" />
+                            <TextBlock x:Name="_whatWillHappenEdition_"
+                                       x:Uid="_whatWillHappenEditionUid_"
+                                       Margin="20,10,0,0"
+                                       Style="{StaticResource BodyTextBlockStyle}" />
+                            <HyperlinkButton x:Uid="_accountsEditionLearnMore_"
+                                             Margin="20,0,0,10"
+                                             NavigateUri="http://ring.cx" />
                             <Grid Margin="10">
                                 <Grid.ColumnDefinitions>
-                                    <ColumnDefinition Width="*"/>
-                                    <ColumnDefinition Width="25"/>
+                                    <ColumnDefinition Width="*" />
+                                    <ColumnDefinition Width="25" />
                                 </Grid.ColumnDefinitions>
-                                <TextBox x:Name="_usernameTextBoxEdition_"
-                                         Grid.Column="0"
-                                         PlaceholderText="Enter your full name"
-                                         KeyUp="_usernameTextBoxEdition__KeyUp"/>
-                                <TextBlock x:Name="_usernameValidEdition_"
-                                                   Grid.Column="1"
-                                                   Padding="10,0"
-                                                   Style="{StaticResource TextSegoeStyle-20pt-green}"
-                                                   Visibility="Collapsed"
-                                                   Text="&#xE10B;"/>
-                                <TextBlock x:Name="_usernameInvalidEdition_"
-                                                   Grid.Column="1"
-                                                   Padding="10,0"
-                                                   Style="{StaticResource TextSegoeStyle-20pt-red}"
-                                                   Text="&#xE10A;"/>
+                                <TextBox Grid.Column="0"
+                                         x:Name="_usernameTextBoxEdition_"
+                                         x:Uid="_usernameTextBoxEditionUid_"
+                                         Margin="10,0,10,0"
+                                         IsSpellCheckEnabled="False"
+                                         KeyUp="_usernameTextBoxEdition__KeyUp" />
+                                <TextBlock Grid.Column="1"
+                                           x:Name="_usernameValidEdition_"
+                                           Padding="10,0"
+                                           Style="{StaticResource TextSegoeStyle-20pt-green}"
+                                           Text="&#xE10B;"
+                                           Visibility="Collapsed" />
+                                <TextBlock Grid.Column="1"
+                                           x:Name="_usernameInvalidEdition_"
+                                           Padding="10,0"
+                                           Style="{StaticResource TextSegoeStyle-20pt-red}"
+                                           Text="&#xE10A;" />
                             </Grid>
                             <Button x:Name="_registerOnBlockchainEdition_"
-                                Content="register"
-                                Visibility="Collapsed"
-                                Click="_registerOnBlockchainEdition__Click"/>
-                            <StackPanel Orientation="Horizontal" Margin="10">
-                                <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                       Text="&#xE15E;"/>
-                                <TextBlock Text="UPnP" Margin="10"/>
-                            </StackPanel>
-                            <ToggleSwitch x:Name="_upnpState_"
-                                      Margin="20,10"/>
+                                    x:Uid="_registerOnBlockchainEditionUid_"
+                                    Click="_registerOnBlockchainEdition__Click"
+                                    Visibility="Collapsed" />
                         </StackPanel>
-                        <!-- SIP parameters. -->
+                        <!--  SIP accounts section  -->
+                        <!--  SIP parameters.  -->
                         <StackPanel x:Name="_sipAccountStackEdition_"
-                                Visibility="Collapsed">
-                            <StackPanel Orientation="Horizontal"
-                                    Margin="10">
-                                <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                       Text="&#xE717;"/>
-                                <TextBlock Text="SIP account parameters"
-                                       Margin="10"/>
+                                    Margin="0,10,0,0"
+                                    Padding="10,0"
+                                    Visibility="Collapsed">
+                            <StackPanel Margin="10" Orientation="Horizontal">
+                                <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}" Text="&#xE717;" />
+                                <TextBlock Margin="10" Text="SIP account parameters" />
                             </StackPanel>
-                            <TextBox  x:Name="_sipHostnameEdition_"
-                                  Margin="10"
-                                  PlaceholderText="Enter hostname"/>
-                            <TextBox  x:Name="_sipUsernameEditionTextBox_"
-                                  Margin="10"
-                                  PlaceholderText="Enter username"/>
+                            <TextBox x:Name="_sipHostnameEdition_"
+                                     x:Uid="_sipHostnameEditionUid_"
+                                     Margin="20,10,20,10"
+                                     IsSpellCheckEnabled="False" />
+                            <TextBox x:Name="_sipUsernameEditionTextBox_"
+                                     x:Uid="_sipUsernameEditionTextBoxUid_"
+                                     Margin="20,10,20,10"
+                                     IsSpellCheckEnabled="False" />
                             <PasswordBox x:Name="_sipPasswordEdition_"
-                                     Margin="10"
-                                     PlaceholderText="Enter password"/>
+                                         x:Uid="_sipPasswordEditionUid_"
+                                         Margin="20,10,20,10" />
+                        </StackPanel>
+                        <!--  END SIP accounts section  -->
+                        <!--  other settings  -->
+                        <!--  auto answer  -->
+                        <StackPanel Margin="10,20,10,0"
+                                    Padding="10,0"
+                                    Orientation="Horizontal">
+                            <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}" Text="&#xE8D0;" />
+                            <TextBlock x:Uid="_accountsAutoAnswer_"
+                                       Margin="10,20,10,10"
+                                       TextWrapping="Wrap" />
                         </StackPanel>
-                        <!-- delete account sub menu. -->
-                        <StackPanel Orientation="Horizontal" Margin="10">
-                            <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                   Text="&#xE74D;"/>
-                            <TextBlock Text="Delete account" Margin="10"/>
+                        <ToggleSwitch x:Name="_autoAnswerToggle_"
+                                      Margin="30,0,20,10"
+                                      Padding="10,0"
+                                      IsOn="False" />
+                        <!--  RING accounts section  -->
+                        <StackPanel x:Name="_ringStackEdition2_" Visibility="Collapsed">
+                            <!--  incognito contacts  -->
+                            <StackPanel Margin="10,20,10,0"
+                                        Padding="10,0"
+                                        Orientation="Horizontal">
+                                <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}" Text="&#xE8D7;" />
+                                <TextBlock x:Uid="_accountsIncognitoContacts_"
+                                           Width="240"
+                                           Margin="10"
+                                           TextWrapping="Wrap" />
+                            </StackPanel>
+                            <ToggleSwitch x:Name="_dhtPublicInCallsToggle_"
+                                          Margin="30,0,20,10"
+                                          Padding="10,0"
+                                          IsOn="True" />
+                            <!--  turn settings  -->
+                            <StackPanel Margin="10,20,10,0"
+                                        Padding="10,0"
+                                        Orientation="Horizontal">
+                                <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}" Text="&#xE8CE;" />
+                                <TextBlock x:Uid="_accountsTurnEnabled_"
+                                           Width="240"
+                                           Margin="10"
+                                           TextWrapping="Wrap" />
+                            </StackPanel>
+                            <ToggleSwitch x:Name="_turnEnabledToggle_"
+                                          Margin="30,0,20,10"
+                                          Padding="10,0"
+                                          IsOn="True"
+                                          Toggled="_turnEnabledToggle__Toggled" />
+                            <TextBox x:Name="_turnEditionTextBox_"
+                                     x:Uid="_turnEditionTextBoxUid_"
+                                     Margin="30,10,60,10"
+                                     IsSpellCheckEnabled="False" />
+                            <!--  upnp state  -->
+                            <StackPanel Margin="20,20,10,0" Orientation="Horizontal">
+                                <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}" Text="&#xE15E;" />
+                                <TextBlock x:Uid="_accountsUPnP_" Margin="10" />
+                            </StackPanel>
+                            <ToggleSwitch x:Name="_upnpState_" Margin="30,0,20,10" />
+                            <!--  banned list  -->
+                            <StackPanel Margin="0,10,0,0">
+                                <StackPanel Margin="10"
+                                            Padding="10,0"
+                                            Orientation="Horizontal">
+                                    <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}" Text="&#xE8F8;" />
+                                    <HyperlinkButton x:Name="_accountsShowBannedList_"
+                                                     Margin="10,0,0,10"
+                                                     Click="_showBannedList__PointerPressed"
+                                                     Content="Show banned contact list" />
+                                </StackPanel>
+                                <Grid x:Name="_bannedContactListGrid_" Visibility="Collapsed">
+                                    <StackPanel>
+                                        <ListBox x:Name="_bannedContactList_"
+                                                 MaxWidth="260"
+                                                 Margin="0"
+                                                 Padding="0"
+                                                 Background="{StaticResource RingBlueLightBrush}"
+                                                 ItemContainerStyle="{StaticResource bannedContactListBoxStyle}"
+                                                 ItemTemplate="{StaticResource BannedContactTemplate}"
+                                                 ScrollViewer.HorizontalScrollBarVisibility="Auto"
+                                                 ScrollViewer.HorizontalScrollMode="Disabled" />
+                                    </StackPanel>
+                                </Grid>
+                            </StackPanel>
                         </StackPanel>
-                        <ToggleSwitch x:Name="_deleteAccountEdition_"
-                                      Toggled="_deleteAccountEdition__Toggled"
-                                      Margin="20,10"/>
-                        <TextBlock x:Name="_whatWilHappendeleteRingAccountEdition_"
-                                   Margin="0,10,0,0"
-                                   Style="{StaticResource BodyTextBlockStyle}"
-                                   Foreground="Red"
-                                   Visibility="Collapsed"
-                                   Text="Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted."/>
-                        <TextBlock x:Name="_whatWilHappendeleteSipAccountEdition_"
-                                   Margin="0,10,0,0"
-                                   Style="{StaticResource BodyTextBlockStyle}"
-                                   Foreground="Red"
-                                   Visibility="Collapsed"
-                                   Text="Your account will be deleted from this computer."/>
-                        <HyperlinkButton x:Name="_learnMoreDeleteAccountEdition_"
-                                         Content="Learn more"
-                                         Visibility="Collapsed"
-                                         Margin="0,0,0,10"
-                                         NavigateUri="http://ring.cx"/>
+                        <!--  END RING accounts section  -->
                     </StackPanel>
                 </ScrollViewer>
-                <!-- buttons yes/no to accept the modification. -->
-                <Grid Grid.Row="1">
-                    <StackPanel Orientation="Horizontal"
-                                HorizontalAlignment="Center">
-                        <Button x:Name="_acceptAccountModification_"
-                                Grid.Row="1"
-                                VerticalAlignment="Center"
+                <!--  buttons yes/no to accept the modification.  -->
+                <Grid Grid.Row="2" Background="{StaticResource RingBlueMidBrush}">
+                    <StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
+                        <Button Grid.Row="1"
+                                x:Name="_acceptAccountModification_"
                                 HorizontalAlignment="Center"
-                                Content="&#xE081;"
-                                Click="_acceptAccountModification__Click"
-                                Style="{StaticResource ButtonStyle5}"/>
-                        <Button x:Name="_cancelAccountModification_"
-                                Grid.Row="1"
                                 VerticalAlignment="Center"
+                                Click="_acceptAccountModification__Click"
+                                Content="&#xE081;"
+                                Style="{StaticResource ButtonStyle5}">
+                            <ToolTipService.ToolTip>
+                                <TextBlock x:Uid="_tt_accept_account_mod_" />
+                            </ToolTipService.ToolTip>
+                        </Button>
+                        <Button Grid.Row="1"
+                                x:Name="_cancelAccountModification_"
                                 HorizontalAlignment="Center"
-                                Content="&#xE106;"
+                                VerticalAlignment="Center"
                                 Click="_cancelAccountModification__Click"
-                                Style="{StaticResource ButtonStyle5}"/>
+                                Content="&#xE106;"
+                                Style="{StaticResource ButtonStyle5}">
+                            <ToolTipService.ToolTip>
+                                <TextBlock x:Uid="_tt_cancel_account_mod_" />
+                            </ToolTipService.ToolTip>
+                        </Button>
                     </StackPanel>
                 </Grid>
             </Grid>
-            <!-- account creation menu. -->
-            <Grid x:Name="_accountCreationMenuGrid_"
-                  Grid.Row="0"
-                  Visibility="Collapsed"
-                  Background="#3bc1d3">
+            <!--  account creation menu.  -->
+            <Grid Grid.Row="0"
+                  x:Name="_accountCreationMenuGrid_"
+                  Background="{StaticResource RingBlueLightBrush}"
+                  Visibility="Collapsed">
                 <Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
-                    <RowDefinition Height="30"/>
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="*" />
+                    <RowDefinition Height="30" />
                 </Grid.RowDefinitions>
-                <ScrollViewer Grid.Row="0">
-                    <StackPanel Orientation="Vertical"
-                                Padding="10,0"
-                                Background="#FFE4F1F9">
-                        <!-- alias sub menu. -->
-                        <StackPanel Orientation="Horizontal"
-                                    Margin="0,20">
-                            <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                       Margin="0,0,10,0"
-                                       Text="&#xE8EC;"/>
-                            <TextBlock Text="Alias"/>
+                <TextBlock Grid.Row="0"
+                           x:Uid="_accountsCreation_"
+                           Margin="12,6,4,8"
+                           Style="{StaticResource SubheaderTextBlockStyle}" />
+                <ScrollViewer Grid.Row="1" x:Name="_accountCreationMenuScrollViewer_">
+                    <StackPanel Padding="0,10,0,20"
+                                Background="{StaticResource RingBlueLightBrush}"
+                                Orientation="Vertical">
+                        <!--  account type chooser  -->
+                        <StackPanel Margin="20,20,0,10" Orientation="Horizontal">
+                            <TextBlock Margin="0,0,10,0"
+                                       Style="{StaticResource TextSegoeStyle-20pt-black}"
+                                       Text="&#xE168;" />
+                            <TextBlock x:Uid="_accountsType_" />
                         </StackPanel>
-                        <Grid Margin="10,0,10,10">
+                        <ComboBox x:Name="_accountTypeComboBox_"
+                                  Width="195"
+                                  Margin="30,10,20,10"
+                                  VerticalAlignment="Center"
+                                  SelectedIndex="0"
+                                  SelectionChanged="_accountTypeComboBox__SelectionChanged">
+                            <ComboBoxItem Content="Ring" />
+                            <ComboBoxItem Content="Sip" />
+                        </ComboBox>
+                        <!--  alias sub menu.  -->
+                        <StackPanel Margin="10,30,0,10"
+                                    Padding="10,0"
+                                    Orientation="Horizontal">
+                            <TextBlock Margin="0,0,10,0"
+                                       Style="{StaticResource TextSegoeStyle-20pt-black}"
+                                       Text="&#xE8EC;" />
+                            <TextBlock x:Uid="_accountsAlias_" />
+                        </StackPanel>
+                        <Grid Margin="10" Padding="10,0">
                             <Grid.ColumnDefinitions>
-                                <ColumnDefinition Width="*"/>
-                                <ColumnDefinition Width="25"/>
+                                <ColumnDefinition Width="*" />
+                                <ColumnDefinition Width="25" />
                             </Grid.ColumnDefinitions>
-                            <TextBox  x:Name="_accountAliasTextBox_"
-                                      Grid.Column="0"
-                                      TextChanged="_accountAliasTextBox__TextChanged"
-                                      PlaceholderText="Enter alias"/>
-                            <TextBlock x:Name="_accountAliasValid_"
-                                               Grid.Column="1"
-                                               Padding="10,0"
-                                               Style="{StaticResource TextSegoeStyle-20pt-green}"
-                                               Visibility="Collapsed"
-                                               Text="&#xE10B;"/>
-                            <TextBlock x:Name="_accountAliasInvalid_"
-                                               Grid.Column="1"
-                                               Padding="10,0"
-                                               Style="{StaticResource TextSegoeStyle-20pt-red}"
-                                               Text="&#xE10A;"/>
+                            <TextBox Grid.Column="0"
+                                     x:Name="_accountAliasTextBox_"
+                                     x:Uid="_accountAliasTextBoxUid_"
+                                     Margin="10,0,10,0"
+                                     IsSpellCheckEnabled="False"
+                                     TextChanged="_accountAliasTextBox__TextChanged" />
+                            <TextBlock Grid.Column="1"
+                                       x:Name="_accountAliasValid_"
+                                       Padding="10,0"
+                                       Style="{StaticResource TextSegoeStyle-20pt-green}"
+                                       Text="&#xE10B;"
+                                       Visibility="Collapsed" />
+                            <TextBlock Grid.Column="1"
+                                       x:Name="_accountAliasInvalid_"
+                                       Padding="10,0"
+                                       Style="{StaticResource TextSegoeStyle-20pt-red}"
+                                       Text="&#xE10A;" />
                         </Grid>
-
-                        <!-- account type chooser -->
-                        <StackPanel Orientation="Horizontal"
-                                    Margin="0,20">
-                            <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                       Margin="0,0,10,0"
-                                       Text="&#xE168;"/>
-                            <TextBlock Text="Account type"/>
-                        </StackPanel>
-                        <ComboBox x:Name="_accountTypeComboBox_"
-                                      SelectedIndex="0"
-                                      Margin="10,10,0,0"
-                                      SelectionChanged="_accountTypeComboBox__SelectionChanged"
-                                      VerticalAlignment="Center"
-                                      Width="195">
-                            <ComboBoxItem Content="Ring"/>
-                            <ComboBoxItem Content="Sip"/>
-                        </ComboBox>
-                        <!-- RING account. -->
+                        <!--  RING account.  -->
                         <StackPanel x:Name="_ringAccountCreationStack_"
-                                    Margin="0,20"
+                                    Margin="20,10,10,10"
                                     Visibility="Visible">
-                            <!-- register account on blockachain -->
-                            <StackPanel Orientation="Horizontal"
-                                        Margin="0,20">
-                                <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                           Margin="0,0,10,0"
-                                           Text="&#xE167;"/>
-                                <TextBlock Text="Register public username"/>
+                            <!--  register account on blockachain  -->
+                            <StackPanel Margin="0,20" Orientation="Horizontal">
+                                <TextBlock Margin="0,0,10,0"
+                                           Style="{StaticResource TextSegoeStyle-20pt-black}"
+                                           Text="&#xE167;" />
+                                <TextBlock x:Uid="_accountsRegisterPublicName_" />
                             </StackPanel>
                             <ToggleSwitch x:Name="_RegisterState_"
-                                      IsOn="True"
-                                      Toggled="_RegisterState__Toggled"
-                                      Margin="0,10"/>
-                            <TextBlock x:Name="_whatWilHappen_"
-                                       Margin="0,10,0,0"
-                                       Style="{StaticResource BodyTextBlockStyle}"
-                                       Text="peoples will find you with your username"/>
-                            <HyperlinkButton Content="Learn more"
-                                             Margin="0,0,0,10"
-                                             NavigateUri="http://ring.cx"/>
+                                          Margin="10,0,0,10"
+                                          IsOn="True"
+                                          Toggled="_RegisterState__Toggled" />
+                            <TextBlock x:Name="_whatWillHappen_"
+                                       x:Uid="_whatWillHappenEditionUid_"
+                                       Margin="10,10,0,0"
+                                       Style="{StaticResource BodyTextBlockStyle}" />
+                            <HyperlinkButton Margin="10,0,0,10"
+                                             Content="Learn more"
+                                             NavigateUri="http://ring.cx" />
                             <Grid Margin="10">
                                 <Grid.ColumnDefinitions>
-                                    <ColumnDefinition Width="*"/>
-                                    <ColumnDefinition Width="25"/>
+                                    <ColumnDefinition Width="*" />
+                                    <ColumnDefinition Width="25" />
                                 </Grid.ColumnDefinitions>
-                                <TextBox x:Name="_usernameTextBox_"
-                                         Grid.Column="0"
-                                         PlaceholderText="Enter your full name"
-                                         KeyUp="_usernameTextBox__KeyUp"
-                                                 />
-                                <TextBlock x:Name="_usernameValid_"
-                                                   Grid.Column="1"
-                                                   Padding="10,0"
-                                                   Style="{StaticResource TextSegoeStyle-20pt-green}"
-                                                   Visibility="Collapsed"
-                                                   Text="&#xE10B;"/>
-                                <TextBlock x:Name="_usernameInvalid_"
-                                                   Grid.Column="1"
-                                                   Padding="10,0"
-                                                   Style="{StaticResource TextSegoeStyle-20pt-red}"
-                                                   Text="&#xE10A;"/>
+                                <TextBox Grid.Column="0"
+                                         x:Name="_usernameTextBox_"
+                                         x:Uid="_usernameTextBoxEditionUid_"
+                                         Margin="0,0,10,0"
+                                         IsSpellCheckEnabled="False"
+                                         KeyUp="_usernameTextBox__KeyUp" />
+                                <TextBlock Grid.Column="1"
+                                           x:Name="_usernameValid_"
+                                           Padding="10,0"
+                                           Style="{StaticResource TextSegoeStyle-20pt-green}"
+                                           Text="&#xE10B;"
+                                           Visibility="Collapsed" />
+                                <TextBlock Grid.Column="1"
+                                           x:Name="_usernameInvalid_"
+                                           Padding="10,0"
+                                           Style="{StaticResource TextSegoeStyle-20pt-red}"
+                                           Text="&#xE10A;" />
                             </Grid>
-                            <!-- password sub menu. -->
-                            <StackPanel Orientation="Horizontal"
-                                        Margin="0,20">
-                                <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                        Margin="0,0,10,0"
-                                       Text="&#xE8D7;"/>
-                                <TextBlock Text="Password"/>
+                            <!--  password sub menu.  -->
+                            <StackPanel Margin="0,20" Orientation="Horizontal">
+                                <TextBlock Margin="0,0,10,0"
+                                           Style="{StaticResource TextSegoeStyle-20pt-black}"
+                                           Text="&#xE8D7;" />
+                                <TextBlock Text="Password" />
                             </StackPanel>
                             <Grid Margin="10">
                                 <Grid.ColumnDefinitions>
-                                    <ColumnDefinition Width="*"/>
-                                    <ColumnDefinition Width="25"/>
+                                    <ColumnDefinition Width="*" />
+                                    <ColumnDefinition Width="25" />
                                 </Grid.ColumnDefinitions>
-                                <PasswordBox x:Name="_ringPasswordBoxAccountCreation_"
-                                             Grid.Column="0"
-                                             PasswordChanged="_passwordBoxAccountCreationCheck__PasswordChanged"
-                                             PlaceholderText="Enter password"/>
-                                <TextBlock x:Name="_passwordValid_"
-                                           Grid.Column="1"
+                                <PasswordBox Grid.Column="0"
+                                             x:Name="_ringPasswordBoxAccountCreation_"
+                                             x:Uid="_ringPasswordBoxAccountCreationUid_"
+                                             Margin="0,0,10,0"
+                                             PasswordChanged="_passwordBoxAccountCreationCheck__PasswordChanged" />
+                                <TextBlock Grid.Column="1"
+                                           x:Name="_passwordValid_"
                                            Padding="10,0"
                                            Style="{StaticResource TextSegoeStyle-20pt-green}"
-                                           Visibility="Collapsed"
-                                           Text="&#xE10B;"/>
-                                <TextBlock x:Name="_passwordInvalid_"
-                                           Grid.Column="1"
+                                           Text="&#xE10B;"
+                                           Visibility="Collapsed" />
+                                <TextBlock Grid.Column="1"
+                                           x:Name="_passwordInvalid_"
                                            Padding="10,0"
                                            Style="{StaticResource TextSegoeStyle-20pt-red}"
-                                           Text="&#xE10A;"/>
+                                           Text="&#xE10A;" />
                             </Grid>
                             <Grid Margin="10">
                                 <Grid.ColumnDefinitions>
-                                    <ColumnDefinition Width="*"/>
-                                    <ColumnDefinition Width="25"/>
+                                    <ColumnDefinition Width="*" />
+                                    <ColumnDefinition Width="25" />
                                 </Grid.ColumnDefinitions>
-                                <PasswordBox x:Name="_ringPasswordBoxAccountCreationCheck_"
-                                             Grid.Column="0"
-                                             PasswordChanged="_passwordBoxAccountCreationCheck__PasswordChanged"
-                                             PlaceholderText="Repeat password"/>
-                                <TextBlock x:Name="_passwordCheckValid_"
-                                           Grid.Column="1"
+                                <PasswordBox Grid.Column="0"
+                                             x:Name="_ringPasswordBoxAccountCreationCheck_"
+                                             x:Uid="_ringPasswordBoxAccountCreationCheckUid_"
+                                             Margin="0,0,10,0"
+                                             PasswordChanged="_passwordBoxAccountCreationCheck__PasswordChanged" />
+                                <TextBlock Grid.Column="1"
+                                           x:Name="_passwordCheckValid_"
                                            Padding="10,0"
                                            Style="{StaticResource TextSegoeStyle-20pt-green}"
-                                           Visibility="Collapsed"
-                                           Text="&#xE10B;"/>
-                                <TextBlock x:Name="_passwordCheckInvalid_"
-                                           Grid.Column="1"
+                                           Text="&#xE10B;"
+                                           Visibility="Collapsed" />
+                                <TextBlock Grid.Column="1"
+                                           x:Name="_passwordCheckInvalid_"
                                            Padding="10,0"
                                            Style="{StaticResource TextSegoeStyle-20pt-red}"
-                                           Text="&#xE10A;"/>
+                                           Text="&#xE10A;" />
                             </Grid>
-                            <!-- upnp sub menu. -->
-                            <StackPanel Orientation="Horizontal"
-                                        Margin="0,20">
-                                <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                            Margin="0,0,10,0"
-                                           Text="&#xE15E;"/>
-                                <TextBlock Text="UPnP"/>
-                            </StackPanel>
-                            <ToggleSwitch x:Name="_upnpStateAccountCreation_"
-                                          IsOn="True"
-                                          Margin="0,10"/>
                         </StackPanel>
-                        <!-- SIP account. -->
+                        <!--  SIP account.  -->
                         <StackPanel x:Name="_sipAccountCreationStack_"
+                                    Padding="10"
                                     Visibility="Collapsed">
-                            <StackPanel Orientation="Horizontal"
-                                        Margin="10">
-                                <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                           Text="&#xE717;"/>
-                                <TextBlock Text="SIP account parameters"
-                                           Margin="10"/>
+                            <StackPanel Margin="10,10,10,0" Orientation="Horizontal">
+                                <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}" Text="&#xE717;" />
+                                <TextBlock x:Uid="_accountsSIPParameters_" Margin="10" />
                             </StackPanel>
-                            <TextBox  x:Name="_sipHostnameTextBox_"
-                                      Margin="10"
-                                      PlaceholderText="Enter hostname"/>
-                            <TextBox  x:Name="_sipUsernameTextBox_"
-                                      Margin="10"
-                                      PlaceholderText="Enter username"/>
+                            <TextBox x:Name="_sipHostnameTextBox_"
+                                     x:Uid="_sipHostnameEditionUid_"
+                                     Margin="20,10,20,10"
+                                     IsSpellCheckEnabled="False" />
+                            <TextBox x:Name="_sipUsernameTextBox_"
+                                     x:Uid="_sipUsernameEditionTextBoxUid_"
+                                     Margin="20,10,20,10"
+                                     IsSpellCheckEnabled="False" />
                             <PasswordBox x:Name="_sipPasswordBoxAccountCreation_"
-                                         Margin="10"
-                                         PlaceholderText="Enter password"/>
+                                         x:Uid="_sipPasswordEditionUid_"
+                                         Margin="20,10,20,10" />
                         </StackPanel>
                     </StackPanel>
                 </ScrollViewer>
 
-                <!-- buttons yes/no to create the new account. -->
-                <Grid Grid.Row="1">
-                    <StackPanel Orientation="Horizontal"
-                                HorizontalAlignment="Center">
-                        <Button x:Name="_createAccountYes_"
-                                Grid.Row="1"
-                                VerticalAlignment="Center"
+                <!--  buttons yes/no to create the new account.  -->
+                <Grid Grid.Row="2" Background="{StaticResource RingBlueMidBrush}">
+                    <StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
+                        <Button Grid.Row="1"
+                                x:Name="_createAccountYes_"
                                 HorizontalAlignment="Center"
-                                Content="&#xE081;"
-                                Click="_createAccountYes__Click"
-                                Style="{StaticResource ButtonStyle5}"/>
-                        <Button x:Name="_createAccountNo_"
-                                Grid.Row="1"
                                 VerticalAlignment="Center"
+                                Click="_createAccountYes__Click"
+                                Content="&#xE081;"
+                                Style="{StaticResource ButtonStyle5}">
+                            <ToolTipService.ToolTip>
+                                <TextBlock x:Uid="_tt_create_account_yes_" />
+                            </ToolTipService.ToolTip>
+                        </Button>
+                        <Button Grid.Row="1"
+                                x:Name="_createAccountNo_"
                                 HorizontalAlignment="Center"
-                                Content="&#xE106;"
+                                VerticalAlignment="Center"
                                 Click="_createAccountNo__Click"
-                                Style="{StaticResource ButtonStyle5}"/>
+                                Content="&#xE106;"
+                                Style="{StaticResource ButtonStyle5}">
+                            <ToolTipService.ToolTip>
+                                <TextBlock x:Uid="_tt_account_cancel_" />
+                            </ToolTipService.ToolTip>
+                        </Button>
                     </StackPanel>
                 </Grid>
             </Grid>
-            <!-- add account menu. -->
-            <Grid x:Name="_accountAddMenuGrid_"
-                  Visibility="Collapsed"
-                  Grid.Row="0"
-                  Background="#3bc1d3">
+
+            <!--  add account menu.  -->
+            <Grid Grid.Row="0"
+                  x:Name="_accountAddMenuGrid_"
+                  Background="{StaticResource RingBlueLightBrush}"
+                  Visibility="Collapsed">
                 <Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
-                    <RowDefinition Height="30"/>
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="*" />
+                    <RowDefinition Height="30" />
                 </Grid.RowDefinitions>
-                <StackPanel Orientation="Horizontal"
-                            Background="#FFE4F1F9"
+                <TextBlock Grid.Row="0"
+                           x:Uid="_accountsAddDevice_"
+                           Margin="12,6,4,2"
+                           Style="{StaticResource SubheaderTextBlockStyle}" />
+                <StackPanel Grid.Row="1"
                             Padding="10"
-                                    Grid.Row="0">
+                            Background="{StaticResource RingBlueLightBrush}"
+                            Orientation="Horizontal">
                     <Button x:Name="_step1button_"
                             Click="_step1button__Click"
-                            Content="Step 1"/>
-                    <TextBlock Text=">"/>
+                            Content="Step 1" />
+                    <TextBlock Text="&gt;" />
                     <Button x:Name="_step2button_"
                             Click="_step2button__Click"
-                            Content="Step 2"/>
+                            Content="Step 2" />
                 </StackPanel>
-                <!-- step 1. -->
-                <StackPanel x:Name="_step1Menu_"
-                                    Background="#FFE4F1F9"
-                                    Padding="10"
-                                    Grid.Row="0">
-                    <TextBlock Text="To link this device to a Ring account, you'll first need to generate a PIN from Ring on a device hosting the account."
-                                        TextWrapping="Wrap"
-                                        TextAlignment="Justify"/>
-                    <HyperlinkButton Content="Learn more"
-                                                Margin="0,0,0,10"
-                                                NavigateUri="http://ring.cx"/>
+                <!--  step 1.  -->
+                <StackPanel Grid.Row="1"
+                            x:Name="_step1Menu_"
+                            Padding="20"
+                            Background="{StaticResource RingBlueLightBrush}">
+                    <TextBlock x:Uid="_accountsAddStep1_"
+                               TextAlignment="Left"
+                               TextWrapping="Wrap" />
+                    <HyperlinkButton x:Uid="_accountsEditionLearnMore_"
+                                     Margin="0,0,0,10"
+                                     NavigateUri="http://ring.cx" />
                 </StackPanel>
-                <!-- step 2. -->
-                <StackPanel x:Name="_step2Menu_"
-                                    Background="#FFE4F1F9"
-                                    Visibility="Collapsed"
-                                    Grid.Row="0">
-                    <TextBox  x:Name="_PINTextBox_"
-                                    Margin="10"
-                                    GotFocus="_PINTextBox__GotFocus"
-                                    PlaceholderText="Enter PIN"/>
+                <!--  step 2.  -->
+                <StackPanel Grid.Row="1"
+                            x:Name="_step2Menu_"
+                            Background="{StaticResource RingBlueLightBrush}"
+                            Visibility="Collapsed">
+                    <TextBox x:Name="_PINTextBox_"
+                             x:Uid="_accountsAddEnterPIN_"
+                             Margin="20,10,20,10"
+                             GotFocus="_PINTextBox__GotFocus"
+                             IsSpellCheckEnabled="False"
+                             KeyUp="_addAccountInputValidation__KeyUp" />
                     <PasswordBox x:Name="_ArchivePassword_"
-                                    Margin="10"
-                                    PlaceholderText="Enter your password"/>
+                                 x:Uid="_accountsEnterArchivePassword_"
+                                 Margin="20,10,20,10"
+                                 KeyUp="_addAccountInputValidation__KeyUp" />
                     <TextBlock x:Name="_response_"
-                               Foreground="Red"
                                HorizontalAlignment="Center"
-                               Text=""/>
+                               Foreground="Red"
+                               Text="" />
                 </StackPanel>
-                <!-- buttons next step and yes/no to add the account. -->
-                <Grid Grid.Row="1">
-                    <StackPanel Orientation="Horizontal"
-                                        Padding="10,0"
-                                        HorizontalAlignment="Center">
+                <!--  buttons next step and yes/no to add the account.  -->
+                <Grid Grid.Row="2" Background="{StaticResource RingBlueMidBrush}">
+                    <StackPanel Padding="10,0"
+                                HorizontalAlignment="Center"
+                                Orientation="Horizontal">
                         <Button x:Name="_nextstep_"
-                                        VerticalAlignment="Center"
-                                        HorizontalAlignment="Center"
-                                        Content="&#xE081;"
-                                        Click="_step2button__Click"
-                                        Style="{StaticResource ButtonStyle2}"/>
+                                HorizontalAlignment="Center"
+                                VerticalAlignment="Center"
+                                Click="_step2button__Click"
+                                Content="&#xE081;"
+                                Style="{StaticResource ButtonStyle2}">
+                            <ToolTipService.ToolTip>
+                                <TextBlock x:Uid="_tt_add_account_next_" />
+                            </ToolTipService.ToolTip>
+                        </Button>
                         <Button x:Name="_addAccountYes_"
-                                        VerticalAlignment="Center"
-                                        HorizontalAlignment="Center"
-                                        Visibility="Collapsed"
-                                        Content="&#xE081;"
-                                        Click="_addAccountYes__Click"
-                                        Style="{StaticResource ButtonStyle5}"/>
+                                HorizontalAlignment="Center"
+                                VerticalAlignment="Center"
+                                Click="_addAccountYes__Click"
+                                Content="&#xE081;"
+                                Style="{StaticResource ButtonStyle5}"
+                                Visibility="Collapsed">
+                            <ToolTipService.ToolTip>
+                                <TextBlock x:Uid="_tt_add_account_yes_" />
+                            </ToolTipService.ToolTip>
+                        </Button>
                         <Button x:Name="_addAccountNo_"
-                                        VerticalAlignment="Center"
-                                        HorizontalAlignment="Center"
-                                        Visibility="Collapsed"
-                                        Content="&#xE106;"
-                                        Click="_addAccountNo__Click"
-                                        Style="{StaticResource ButtonStyle5}"/>
+                                HorizontalAlignment="Center"
+                                VerticalAlignment="Center"
+                                Click="_addAccountNo__Click"
+                                Content="&#xE106;"
+                                Style="{StaticResource ButtonStyle5}"
+                                Visibility="Collapsed">
+                            <ToolTipService.ToolTip>
+                                <TextBlock x:Uid="_tt_account_cancel_" />
+                            </ToolTipService.ToolTip>
+                        </Button>
                     </StackPanel>
                 </Grid>
             </Grid>
-            <!-- share menu. -->
-            <Grid x:Name="_shareMenuGrid_"
-                  Grid.Row="0"
-                  Visibility="Collapsed"
-                  Background="#3bc1d3">
+            <!--  devices menu.  -->
+            <Grid Grid.Row="0"
+                  x:Name="_devicesMenuGrid_"
+                  Background="{StaticResource RingBlueLightBrush}"
+                  Visibility="Collapsed">
                 <Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
-                    <RowDefinition Height="30"/>
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="*" />
+                    <RowDefinition Height="30" />
                 </Grid.RowDefinitions>
-                <Grid Background="#FFE4F1F9">
-                    <Grid.RowDefinitions>
-                        <RowDefinition Height="auto"/>
-                        <RowDefinition Height="auto"/>
-                        <RowDefinition Height="*"/>
-                    </Grid.RowDefinitions>
-                    <Grid Background="white"
-                          Margin="10"
-                          MaxHeight="140"
-                          Grid.Row="0"
-                          MaxWidth="140"
-                          Padding="5">
-                        <Image x:Name="_selectedAccountQrCode_"
-                           Width="200"
-                           Margin="5"
-                           Grid.Row="0"
-                           Stretch="None"
-                           Height="200"/>
-                    </Grid>
-                    <TextBlock x:Name="_ringId_"
-                               Padding="1"
-                               Style="{StaticResource TextStyle4}"
-                               Text=""
-                               Grid.Row="1"
-                               IsTextSelectionEnabled="True"
-                               HorizontalAlignment="Center"/>
-                </Grid>
-                <Button x:Name="_shareMenuDone_"
-                        Grid.Row="1"
-                        VerticalAlignment="Center"
-                        HorizontalAlignment="Center"
-                        Content="&#xE081;"
-                        Click="_shareMenuDone__Click"
-                        Style="{StaticResource ButtonStyle6}"/>
-            </Grid>
-            <!-- devices menu. -->
-            <Grid x:Name="_devicesMenuGrid_"
-                  Grid.Row="0"
-                  Visibility="Collapsed"
-                  Background="#3bc1d3">
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
-                    <RowDefinition Height="30"/>
-                </Grid.RowDefinitions>
-                <Grid Background="#FFE4F1F9">
+                <TextBlock Grid.Row="0"
+                           x:Name="_devicesMenuTitle_"
+                           x:Uid="_accountsDevices_"
+                           Margin="12,6,4,2"
+                           Style="{StaticResource SubheaderTextBlockStyle}" />
+                <Grid Grid.Row="1">
                     <Grid.RowDefinitions>
-                        <RowDefinition Height="auto"/>
-                        <RowDefinition Height="auto"/>
-                        <RowDefinition Height="auto"/>
-                        <RowDefinition Height="*"/>
-                        <RowDefinition Height="auto"/>
-                        <RowDefinition Height="auto"/>
+                        <RowDefinition Height="auto" />
+                        <RowDefinition Height="auto" />
+                        <RowDefinition Height="auto" />
+                        <RowDefinition Height="*" />
+                        <RowDefinition Height="auto" />
+                        <RowDefinition Height="auto" />
                     </Grid.RowDefinitions>
-                    <!-- about this device -->
-                    <StackPanel Orientation="Horizontal"
-                                    Grid.Row="0"
-                                    Margin="10,20">
-                        <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                       Margin="0,0,10,0"
-                                       Text="&#xE211;"/>
-                        <TextBlock Text="Your device ID"/>
+                    <!--  about this device  -->
+                    <StackPanel Grid.Row="0"
+                                Margin="10,20,10,10"
+                                Orientation="Horizontal">
+                        <TextBlock Margin="0,0,10,0"
+                                   Style="{StaticResource TextSegoeStyle-20pt-black}"
+                                   Text="&#xE211;" />
+                        <TextBlock x:Uid="_thisDevice_" />
                     </StackPanel>
-                    <TextBlock x:Name="_deviceId_"
-                               Margin="10"
-                               Text="[TEXT_MISSING]"
-                               TextTrimming="CharacterEllipsis"
-                               FontSize="12"
-                               Grid.Row="1"
-                               IsTextSelectionEnabled="True"
-                               HorizontalAlignment="Center"/>
-                    <!-- about linked devices -->
-                    <StackPanel Orientation="Horizontal"
-                                    Grid.Row="2"
-                                    Margin="10,20">
-                        <TextBlock Style="{StaticResource TextSegoeStyle-20pt-black}"
-                                       Margin="0,0,10,0"
-                                       Text="&#xEBD2;"/>
-                        <TextBlock Text="other linked devices"/>
+
+                    <!--  this device  -->
+                    <Grid Grid.Row="1"
+                          Padding="10"
+                          HorizontalAlignment="Center"
+                          Background="AliceBlue">
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="*" />
+                            <RowDefinition Height="*" />
+                        </Grid.RowDefinitions>
+                        <Grid Grid.Row="0">
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="52" />
+                                <ColumnDefinition Width="180" />
+                                <ColumnDefinition Width="42" />
+                            </Grid.ColumnDefinitions>
+                            <TextBlock Grid.Column="0"
+                                       x:Uid="_deviceName_"
+                                       VerticalAlignment="Center"
+                                       FontWeight="Bold"
+                                       Text="Name " />
+                            <TextBox Grid.Column="1"
+                                     x:Name="_deviceName_"
+                                     Width="180"
+                                     Height="32"
+                                     IsSpellCheckEnabled="False"
+                                     KeyUp="_deviceName__KeyUp"
+                                     LostFocus="_deviceName__LostFocus"
+                                     MaxLength="16"
+                                     Text="[TEXT_MISSING]"
+                                     TextWrapping="NoWrap" />
+                        </Grid>
+                        <Grid Grid.Row="1" Margin="0,10,0,0">
+                            <TextBlock x:Name="_deviceId_"
+                                       VerticalAlignment="Center"
+                                       FontSize="12"
+                                       Text="[TEXT MISSING]"
+                                       TextTrimming="CharacterEllipsis" />
+                        </Grid>
+                    </Grid>
+
+                    <!--  other linked devices  -->
+                    <StackPanel Grid.Row="2"
+                                Margin="10,20"
+                                Orientation="Horizontal">
+                        <TextBlock Margin="0,0,10,0"
+                                   Style="{StaticResource TextSegoeStyle-20pt-black}"
+                                   Text="&#xE212;" />
+                        <TextBlock x:Uid="_other_linked_devices_" />
                     </StackPanel>
-                    <TextBlock x:Name="_waitingDevicesList_"
-                               Text="waiting for devices list..."
-                               Grid.Row="3"
-                               IsTextSelectionEnabled="True"
-                               HorizontalAlignment="Center"/>
-                    <ListBox x:Name="_devicesIdList_"
-                             Visibility="Collapsed"
+                    <TextBlock Grid.Row="3"
+                               x:Name="_waitingDevicesList_"
+                               x:Uid="_waitingDevicesListUid_"
+                               HorizontalAlignment="Center" />
+                    <TextBlock Grid.Row="3"
+                               x:Name="_noDevicesList_"
+                               Margin="20,-10,0,0"
+                               Foreground="OrangeRed"
+                               Visibility="Collapsed" />
+                    <ListBox Grid.Row="3"
+                             x:Name="_devicesIdList_"
                              Padding="10,0"
-                             Background="#FFE4F1F9"
-                             Grid.Row="3"/>
+                             Background="{StaticResource RingBlueLightBrush}"
+                             ItemContainerStyle="{StaticResource otherdeviceListBoxStyle}"
+                             ItemTemplate="{StaticResource RingDeviceItemsTemplate}"
+                             Visibility="Collapsed" />
+                </Grid>
+
+                <!--  button to add device.  -->
+                <Grid Grid.Row="2" Background="{StaticResource RingBlueMidBrush}">
+                    <Button x:Name="_addDevice_"
+                            HorizontalAlignment="Center"
+                            VerticalAlignment="Center"
+                            Click="_addDevice__Click"
+                            Content="&#xE948;"
+                            Style="{StaticResource ButtonStyle6}">
+                        <ToolTipService.ToolTip>
+                            <TextBlock x:Uid="_tt_add_device_" />
+                        </ToolTipService.ToolTip>
+                    </Button>
                 </Grid>
-                <!-- button to add device. -->
-                <Button x:Name="_addDevice_"
-                        Grid.Row="1"
-                        VerticalAlignment="Center"
-                        HorizontalAlignment="Center"
-                        Content="&#xE948;"
-                        Click="_addDevice__Click"
-                        Style="{StaticResource ButtonStyle6}"/>
             </Grid>
-            <!-- add device (pin generator) menu. -->
-            <Grid x:Name="_addingDeviceGrid_"
-                  Grid.Row="0"
-                  Visibility="Collapsed"
-                  Background="#3bc1d3">
+
+            <!--  add device (pin generator) menu.  -->
+            <Grid Grid.Row="0"
+                  x:Name="_addingDeviceGrid_"
+                  Background="{StaticResource RingBlueLightBrush}"
+                  Visibility="Collapsed">
                 <Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
-                    <RowDefinition Height="30"/>
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="*" />
+                    <RowDefinition Height="30" />
                 </Grid.RowDefinitions>
-                <Grid Background="#FFE4F1F9">
+                <TextBlock Grid.Row="0"
+                           x:Uid="_addDeviceMenuTitle_"
+                           Margin="12,6,4,8"
+                           Style="{StaticResource SubheaderTextBlockStyle}" />
+                <Grid Grid.Row="1">
                     <Grid.RowDefinitions>
-                        <RowDefinition Height="auto"/>
-                        <RowDefinition Height="auto"/>
-                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="auto" />
+                        <RowDefinition Height="auto" />
+                        <RowDefinition Height="*" />
                     </Grid.RowDefinitions>
-                    <TextBlock VerticalAlignment="Center"
-                                       Text="PIN generator"
+                    <TextBlock Grid.Row="0"
+                               x:Uid="_accountsPINGenerator_"
+                               Margin="10,10,0,10"
                                HorizontalAlignment="Center"
-                               Grid.Row="0"
-                                       Margin="10,10,0,10"/>
-                    <PasswordBox x:Name="_passwordForPinGenerator_"
+                               VerticalAlignment="Center" />
+                    <PasswordBox Grid.Row="1"
+                                 x:Name="_passwordForPinGenerator_"
+                                 x:Uid="_accountsEnterArchivePassword_"
                                  Margin="10"
-                                 Grid.Row="1"
-                                 KeyUp="_passwordForPinGenerator__KeyUp"
-                                 PlaceholderText="Enter your password"/>
+                                 KeyUp="_passwordForPinGenerator__KeyUp" />
                 </Grid>
-                <!-- buttons yes/no to generate a PIN. -->
-                <Grid Grid.Row="1">
-                    <StackPanel Orientation="Horizontal"
-                                HorizontalAlignment="Center">
-                        <Button x:Name="_pinGeneratorYes_"
-                                Grid.Row="1"
-                                VerticalAlignment="Center"
+                <!--  buttons yes/no to generate a PIN.  -->
+                <Grid Grid.Row="2" Background="{StaticResource RingBlueMidBrush}">
+                    <StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
+                        <Button Grid.Row="1"
+                                x:Name="_pinGeneratorYes_"
                                 HorizontalAlignment="Center"
-                                Content="&#xE081;"
-                                Click="_pinGeneratorYes__Click"
-                                Style="{StaticResource ButtonStyle5}"/>
-                        <Button x:Name="_pinGeneratorNo_"
-                                Grid.Row="1"
                                 VerticalAlignment="Center"
+                                Click="_pinGeneratorYes__Click"
+                                Content="&#xE081;"
+                                Style="{StaticResource ButtonStyle5}">
+                            <ToolTipService.ToolTip>
+                                <TextBlock x:Uid="_tt_pin_gen_yes_" />
+                            </ToolTipService.ToolTip>
+                        </Button>
+                        <Button Grid.Row="1"
+                                x:Name="_pinGeneratorNo_"
                                 HorizontalAlignment="Center"
-                                Content="&#xE106;"
+                                VerticalAlignment="Center"
                                 Click="_pinGeneratorNo__Click"
-                                Style="{StaticResource ButtonStyle5}"/>
+                                Content="&#xE106;"
+                                Style="{StaticResource ButtonStyle5}">
+                            <ToolTipService.ToolTip>
+                                <TextBlock x:Uid="_tt_pin_gen_no_" />
+                            </ToolTipService.ToolTip>
+                        </Button>
                     </StackPanel>
                 </Grid>
             </Grid>
-            <!-- waiting for a PIN. -->
-            <Grid x:Name="_waitingForPin_"
-                Grid.Row="0"
-                Visibility="Collapsed"
-                Background="#3bc1d3">
+            <!--  waiting for a PIN.  -->
+            <Grid Grid.Row="0"
+                  x:Name="_waitingForPin_"
+                  Background="{StaticResource RingBlueLightBrush}"
+                  Visibility="Collapsed">
                 <Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
-                    <RowDefinition Height="30"/>
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="*" />
+                    <RowDefinition Height="30" />
                 </Grid.RowDefinitions>
-                <Grid Background="#FFE4F1F9">
+                <TextBlock Grid.Row="0"
+                           x:Uid="_accountsAddDevice_"
+                           Margin="12,6,4,8"
+                           Style="{StaticResource SubheaderTextBlockStyle}" />
+                <Grid Grid.Row="1">
                     <Grid.RowDefinitions>
-                        <RowDefinition Height="*"/>
-                        <RowDefinition Height="auto"/>
-                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="*" />
+                        <RowDefinition Height="auto" />
+                        <RowDefinition Height="*" />
                     </Grid.RowDefinitions>
-                    <TextBlock x:Name="_waitingAndResult_"
-                               VerticalAlignment="Center"
-                               Text="Exporting account on the Ring..."
+                    <TextBlock Grid.Row="0"
+                               x:Name="_waitingAndResult_"
+                               x:Uid="_accountsWaitingAndResult_"
+                               Margin="10,10,0,10"
                                HorizontalAlignment="Center"
-                               Grid.Row="0"
-                               Margin="10,10,0,10"/>
+                               VerticalAlignment="Center" />
                 </Grid>
-                <Grid Grid.Row="1">
-                    <StackPanel Orientation="Horizontal"
-                                HorizontalAlignment="Center">
-                        <Button x:Name="_closePin_"
-                                Grid.Row="1"
-                                VerticalAlignment="Center"
+                <Grid Grid.Row="2" Background="{StaticResource RingBlueMidBrush}">
+                    <StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
+                        <Button Grid.Row="1"
+                                x:Name="_closePin_"
                                 HorizontalAlignment="Center"
-                                Content="&#xE081;"
+                                VerticalAlignment="Center"
                                 Click="_closePin__Click"
-                                Style="{StaticResource ButtonStyle5}"/>
+                                Content="&#xE081;"
+                                Style="{StaticResource ButtonStyle5}">
+                            <ToolTipService.ToolTip>
+                                <TextBlock x:Uid="_tt_pin_gen_close_" />
+                            </ToolTipService.ToolTip>
+                        </Button>
                     </StackPanel>
                 </Grid>
             </Grid>
-            <!-- contacts + calls => smartpanelitems. -->
-            <Grid x:Name="_smartGrid_"
-                  Grid.Row="0">
+            <!--  contacts + calls => smartpanelitems.  -->
+            <Grid Grid.Row="0"
+                  x:Name="_smartGrid_"
+                  Background="{StaticResource RingBlueLightBrush}">
                 <Grid.RowDefinitions>
-                    <RowDefinition x:Name="_rowRingTxtBx_"
-                                   Height="40"/>
-                    <RowDefinition Height="auto"/>
-                    <RowDefinition Height="*"/>
+                    <RowDefinition x:Name="_contactsTitleRow_" Height="54" />
+                    <RowDefinition x:Name="_rowRingTxtBx_" Height="48" />
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="*" />
                 </Grid.RowDefinitions>
-                <Grid>
+                <TextBlock Grid.Row="0"
+                           x:Name="_contactsTitle_"
+                           x:Uid="_contactsTitle_"
+                           Margin="12,6,4,2"
+                           Style="{StaticResource SubheaderTextBlockStyle}" />
+                <Grid Grid.Row="1" Margin="0,0,0,10">
                     <Grid.ColumnDefinitions>
-                        <ColumnDefinition Width="*"/>
-                        <ColumnDefinition Width="Auto"/>
+                        <ColumnDefinition Width="*" />
+                        <ColumnDefinition Width="Auto" />
                     </Grid.ColumnDefinitions>
-                    <Border     x:Name="BackgroundElement"
-                                Grid.Column="0"
-                                Background="White"
-                                Margin="6"
-                                Opacity="1"
-                                Grid.ColumnSpan="2">
-                    </Border>
-                    <TextBox    x:Name="_ringTxtBx_"
-                                Grid.Column="0"
-                                VerticalAlignment="Center"
-                                BorderThickness="0"
-                                HorizontalAlignment="Stretch"
-                                Padding="4"
-                                Margin="6"
-                                Foreground="Black"
-                                Background="White"
-                                TextWrapping="Wrap"
-                                KeyUp="_ringTxtBx__KeyUp"
-                                Text="">
-                    </TextBox>
-                    <Button     x:Name="_addButton_"
-                                Background="Transparent"
-                                Grid.Column="1"
-                                FontFamily="Segoe MDL2 Assets"
-                                Foreground="#3bc1d3"
-                                Content=" &#xE1E2;"
-                                Click="_ringTxtBx__Click"
-                                BorderThickness="0"
-                                Visibility="Visible"
-                                IsTabStop="False"
-                                FontSize="20"
-                                Width="38"
-                                Margin="6"
-                                Padding="4,4,8,4"
-                                VerticalAlignment="Stretch">
+                    <Border Grid.Column="0"
+                            x:Name="BackgroundElement"
+                            Grid.ColumnSpan="2"
+                            Margin="12,4,12,4"
+                            Background="White"
+                            BorderBrush="LightGray"
+                            BorderThickness="1"
+                            Opacity="1" />
+                    <TextBox Grid.Column="0"
+                             x:Name="_ringTxtBx_"
+                             x:Uid="_ringTxtBx_"
+                             Margin="14,7,7,7"
+                             Padding="7,6,7,7"
+                             HorizontalAlignment="Stretch"
+                             VerticalAlignment="Center"
+                             Background="White"
+                             BorderThickness="0"
+                             Foreground="Black"
+                             IsSpellCheckEnabled="False"
+                             KeyUp="_ringTxtBx__KeyUp"
+                             TextWrapping="Wrap" />
+                    <Button Grid.Column="1"
+                            x:Name="_addButton_"
+                            Width="38"
+                            Margin="0,4,12,4"
+                            Padding="4,5,6,2"
+                            VerticalAlignment="Stretch"
+                            Background="Transparent"
+                            BorderThickness="0"
+                            Click="_ringTxtBx__Click"
+                            Content=" &#xE1E2;"
+                            FontFamily="Segoe MDL2 Assets"
+                            FontSize="18"
+                            Foreground="{StaticResource RingBlueMidBrush}"
+                            IsTabStop="False"
+                            Visibility="Visible">
                         <Button.RenderTransform>
-                            <TranslateTransform X="0"/>
+                            <TranslateTransform X="0" />
                         </Button.RenderTransform>
                     </Button>
                 </Grid>
-                <ListBox    x:Name="_smartList_"
-                            Grid.Row="2"
-                            Background="Transparent"
-                            Margin="0"
-                            SelectionChanged="_smartList__SelectionChanged"
-                            Padding="0"
-                            ScrollViewer.HorizontalScrollBarVisibility="Auto"
-                            ScrollViewer.HorizontalScrollMode="Disabled"
-                            MaxWidth="320"
-                            ItemContainerStyle="{StaticResource contactsListBoxStyle}"
-                            ItemTemplate="{StaticResource SmartPanelItemsTemplate}"/>
+                <ListBox Grid.Row="3"
+                         x:Name="_smartList_"
+                         MaxWidth="320"
+                         Margin="0"
+                         Padding="0"
+                         Background="Transparent"
+                         GotFocus="_smartList__GotFocus"
+                         ItemContainerStyle="{StaticResource contactsListBoxStyle}"
+                         ItemTemplate="{StaticResource SmartPanelItemsTemplate}"
+                         ScrollViewer.HorizontalScrollBarVisibility="Auto"
+                         ScrollViewer.HorizontalScrollMode="Disabled"
+                         SelectionChanged="_smartList__SelectionChanged" />
+            </Grid>
+            <!--  trust requests  -->
+            <Grid Grid.Row="0" x:Name="_incomingContactRequestGrid_">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="auto" />
+                </Grid.RowDefinitions>
+                <TextBlock Grid.Row="0"
+                           x:Name="_contactRequestsTitle_"
+                           x:Uid="_contactRequestsTitle_"
+                           Margin="12,6,4,8"
+                           Style="{StaticResource SubheaderTextBlockStyle}" />
+                <ListBox Grid.Row="1"
+                         x:Name="_incomingContactRequestList_"
+                         MaxWidth="320"
+                         Margin="0"
+                         Padding="0"
+                         Background="Transparent"
+                         ItemContainerStyle="{StaticResource contactsListBoxStyle}"
+                         ItemTemplate="{StaticResource ContactRequestItemsTemplate}"
+                         ScrollViewer.HorizontalScrollBarVisibility="Auto"
+                         ScrollViewer.HorizontalScrollMode="Disabled" />
             </Grid>
-            <!-- settings. -->
-            <Grid x:Name="_settingsMenu_"
-                  Grid.Row="0"
-                  Visibility="Collapsed"
-                  Background="#FFE4F1F9">
+            <!--  settings.  -->
+            <Grid Grid.Row="0"
+                  x:Name="_settingsMenu_"
+                  Background="{StaticResource RingBlueLightBrush}"
+                  Visibility="Collapsed">
                 <Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="*" />
                 </Grid.RowDefinitions>
-                <ScrollViewer
-                    ScrollViewer.VerticalScrollBarVisibility="Auto">
-                    <Grid x:Name="_videoSettings_"
-                      Grid.Row="0">
-                        <StackPanel Margin="10">
-                            <TextBlock Text="Video Device"
-                                   Margin="10"/>
-                            <ComboBox x:Name="_videoDeviceComboBox_"
+                <TextBlock Grid.Row="0"
+                           x:Name="_settingsTitle_"
+                           x:Uid="_settingsTitle_"
+                           Margin="12,6,4,8"
+                           Style="{StaticResource SubheaderTextBlockStyle}" />
+                <ScrollViewer Grid.Row="1"
+                              x:Name="_settingsScrollView_"
+                              ScrollViewer.VerticalScrollBarVisibility="Auto"
+                              ScrollViewer.VerticalScrollMode="Enabled">
+                    <!--  video settings  -->
+                    <StackPanel Margin="4">
+                        <TextBlock x:Uid="_settingsVideo_"
+                                   Margin="8"
+                                   Style="{StaticResource TitleTextBlockStyle}" />
+                        <TextBlock x:Uid="_settingsVideoDevice_"
+                                   Margin="10"
+                                   Style="{StaticResource BaseTextBlockStyle}" />
+                        <ComboBox x:Name="_videoDeviceComboBox_"
                                   Margin="10"
-                                  SelectionChanged="_videoDeviceComboBox__SelectionChanged">
-                            </ComboBox>
-                            <TextBlock Text="Video Resolution" Margin="10"/>
-                            <ComboBox x:Name="_videoResolutionComboBox_"
+                                  SelectionChanged="_videoDeviceComboBox__SelectionChanged" />
+                        <TextBlock x:Uid="_settingsVideoResolution_"
+                                   Margin="10"
+                                   Style="{StaticResource BaseTextBlockStyle}" />
+                        <ComboBox x:Name="_videoResolutionComboBox_"
                                   Margin="10"
-                                  SelectionChanged="_videoResolutionComboBox__SelectionChanged">
-                            </ComboBox>
-                            <TextBlock Text="Video Rate" Margin="10"/>
-                            <ComboBox x:Name="_videoRateComboBox_"
+                                  SelectionChanged="_videoResolutionComboBox__SelectionChanged" />
+                        <TextBlock x:Uid="_settingsVideoRate_"
+                                   Margin="10"
+                                   Style="{StaticResource BaseTextBlockStyle}" />
+                        <ComboBox x:Name="_videoRateComboBox_"
                                   Margin="10"
-                                  SelectionChanged="_videoRateComboBox__SelectionChanged">
-                            </ComboBox>
-                        </StackPanel>
-                    </Grid>
+                                  SelectionChanged="_videoRateComboBox__SelectionChanged" />
+                    </StackPanel>
                 </ScrollViewer>
             </Grid>
         </Grid>
     </Grid>
-
 </Page>
diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp
index cd008030cb12c416882a8a1dba366af8cb012c8c..667561e7ab0a19dcc58e550a9291d29eb15497e4 100644
--- a/SmartPanel.xaml.cpp
+++ b/SmartPanel.xaml.cpp
@@ -1,4 +1,4 @@
-/***************************************************************************
+/***************************************************************************
  * Copyright (C) 2016 by Savoir-faire Linux                                *
  * Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com>              *
  * Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com>          *
@@ -16,13 +16,23 @@
  * 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 "pch.h"
-#include <string>
-#include <direct.h>
 #include "SmartPanel.xaml.h"
-#include "qrencode.h"
+#include "ResourceManager.h"
+#include "Wizard.xaml.h"
+#include "WelcomePage.xaml.h"
+
 #include <MemoryBuffer.h>   // IMemoryBufferByteAccess
 #include "callmanager_interface.h"
+#include "configurationmanager_interface.h"
+#include "presencemanager_interface.h"
+
+#include <string>
+#include <direct.h>
+#include <regex>
+
+#include "lodepng.h"
 
 using namespace Platform;
 
@@ -35,6 +45,7 @@ using namespace Windows::Media::MediaProperties;
 using namespace Windows::UI::Xaml;
 using namespace Windows::Storage;
 using namespace Windows::UI::Xaml::Media::Imaging;
+using namespace Windows::UI::Xaml::Media::Animation;
 using namespace Windows::UI::Xaml::Shapes;
 using namespace Windows::UI::Xaml::Media;
 using namespace Concurrency;
@@ -43,21 +54,35 @@ using namespace Windows::Graphics::Imaging;
 using namespace Windows::Foundation;
 using namespace Concurrency;
 using namespace Platform::Collections;
-
+using namespace Windows::UI::Popups;
 using namespace Windows::ApplicationModel::Core;
+using namespace Windows::ApplicationModel::DataTransfer;
 using namespace Windows::Storage;
 using namespace Windows::UI::Core;
 using namespace Windows::System::Threading;
 
+using namespace Windows::UI::Xaml::Interop;
+
 SmartPanel::SmartPanel()
 {
     InitializeComponent();
 
-    /* populate accounts listBox*/
+    /* populate account list */
     _accountsList_->ItemsSource = AccountListItemsViewModel::instance->itemsList;
 
-    /* populate the smartlist */
-    _smartList_->ItemsSource = SmartPanelItemsViewModel::instance->itemsList;
+    /* populate account's device list */
+    // As the user must have the account in question selected before interacting with
+    // it's device list, no filtered list is required.
+    _devicesIdList_->ItemsSource = RingDeviceItemsViewModel::instance->itemsList;
+
+    /* populate the contact list */
+    _smartList_->ItemsSource = SmartPanelItemsViewModel::instance->itemsListFiltered;
+
+    /* populate banned contact list */
+    _bannedContactList_->ItemsSource = SmartPanelItemsViewModel::instance->itemsListBannedFiltered;
+
+    /* populate contact request list */
+    _incomingContactRequestList_->ItemsSource = ContactRequestItemsViewModel::instance->itemsListFiltered;
 
     /* connect delegates */
     Configuration::UserPreferences::instance->selectIndex += ref new SelectIndex([&](int index) {
@@ -66,63 +91,90 @@ SmartPanel::SmartPanel()
             if (accountsListSize > index) {
                 _accountsList_->SelectedIndex = index;
             }
-            else {
-                if (accountsListSize > 0)
-                    _accountsList_->SelectedIndex = 0;
+            else if (accountsListSize) {
+                _accountsList_->SelectedIndex = 0;
             }
-            updatePageContent();
-            updateUnreadMessagesState();
+            updateNotificationsState();
         }
     });
+
     Configuration::UserPreferences::instance->loadProfileImage += ref new LoadProfileImage([this]() {
+        MSG_("LOADING PROFILE IMAGE");
         StorageFolder^ localfolder = ApplicationData::Current->LocalFolder;
         String^ image_path = localfolder->Path + "\\.profile\\profile_image.png";
         auto uri = ref new Windows::Foundation::Uri(image_path);
         _selectedAccountAvatar_->ImageSource = ref new BitmapImage(uri);
+        Configuration::UserPreferences::instance->profileImageLoaded = true;
     });
     AccountsViewModel::instance->updateScrollView += ref new UpdateScrollView([this]() {
         _accountsListScrollView_->UpdateLayout();
         _accountsListScrollView_->ScrollToVerticalOffset(_accountsListScrollView_->ScrollableHeight);
     });
+
+    RingD::instance->networkChanged += ref new NetworkChanged([&]() {
+        CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
+            CoreDispatcherPriority::High, ref new DispatchedHandler([=]()
+        {
+            _networkConnectivityNotificationRow_->Height = RingD::instance->_hasInternet ? GridLength(0.) : GridLength(32.);
+        }));
+    });
+
     RingD::instance->incomingCall += ref new RingClientUWP::IncomingCall([&](
         String^ accountId, String^ callId, String^ from)
     {
         auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(accountId));
         auto contact = contactListModel->findContactByRingId(from);
 
-        if (contact == nullptr)
-            contact = contactListModel->addNewContact(from, from);
+        if (contact == nullptr) {
+            contact = contactListModel->addNewContact(from, from, TrustStatus::UNKNOWN, true);
+        }
 
         if (contact == nullptr) {
             return;
         }
 
-        RingD::instance->lookUpAddress(from);
+        contact->_isIncognitoContact = true;
 
-        SmartPanelItem^ item;
+        RingD::instance->lookUpAddress(Utils::toString(accountId), from);
 
-        item = SmartPanelItemsViewModel::instance->findItem(contact);
-        item->_callId = callId;
+        // buffer a toast
+        RingD::instance->unpoppedToasts.insert(std::make_pair(contact->ringID_,
+            [callId](String^ username) {
+            RingD::instance->ShowCallToast(RingD::instance->isInBackground, callId, username);
+        }));
 
-        /* move the item of the top of the list */
-        unsigned int index;
-        if (_smartList_->Items->IndexOf(item, &index)) {
+        if (auto item = SmartPanelItemsViewModel::instance->findItem(contact)) {
+            item->_callId = callId;
             SmartPanelItemsViewModel::instance->moveItemToTheTop(item);
             _smartList_->UpdateLayout();
             _smartList_->ScrollIntoView(item);
         }
-
-        SmartPanelItemsViewModel::instance->update();
     });
-    AccountsViewModel::instance->newUnreadMessage += ref new NewUnreadMessage(this, &SmartPanel::updateUnreadMessagesState);
+    AccountsViewModel::instance->newUnreadMessage += ref new NewUnreadMessage(this, &SmartPanel::updateContactNotificationsState);
+    AccountsViewModel::instance->contactDataModified += ref new ContactDataModified(this, &SmartPanel::OncontactDataModified);
+    AccountsViewModel::instance->newUnreadContactRequest += ref new NewUnreadContactRequest(this, &SmartPanel::updateNotificationsState);
     RingD::instance->stateChange += ref new StateChange(this, &SmartPanel::OnstateChange);
     RingD::instance->devicesListRefreshed += ref new RingClientUWP::DevicesListRefreshed(this, &RingClientUWP::Views::SmartPanel::OndevicesListRefreshed);
-    AccountsViewModel::instance->contactAdded += ref new ContactAdded([this](String^ accountId, Contact^ contact) {
+    AccountsViewModel::instance->contactAdded += ref new ContactAdded([&](String^ accountId, Contact^ contact) {
         auto smartPanelItem = ref new SmartPanelItem();
         smartPanelItem->_contact = contact;
         SmartPanelItemsViewModel::instance->itemsList->InsertAt(0, smartPanelItem);
+        if (contact->_accountIdAssociated == AccountListItemsViewModel::instance->getSelectedAccountId()) {
+            SmartPanelItemsViewModel::instance->itemsListFiltered->InsertAt(0, smartPanelItem);
+        }
     });
 
+    RingD::instance->vCardUpdated += ref new VCardUpdated([&](Contact^ contact)
+    {
+        Utils::runOnUIThread([this, contact]() {
+            SmartPanelItemsViewModel::instance->update({ "_bestName2", "_avatarImage", "_contact" });
+        });
+    });
+
+    RingD::instance->registrationStateRegistered += ref new RingClientUWP::RegistrationStateRegistered(this, &SmartPanel::OnregistrationStateChanged);
+    RingD::instance->registrationStateUnregistered += ref new RingClientUWP::RegistrationStateUnregistered(this, &SmartPanel::OnregistrationStateChanged);
+    RingD::instance->registrationStateTrying += ref new RingClientUWP::RegistrationStateTrying(this, &SmartPanel::OnregistrationStateChanged);
+
     RingD::instance->exportOnRingEnded += ref new RingClientUWP::ExportOnRingEnded(this, &RingClientUWP::Views::SmartPanel::OnexportOnRingEnded);
     RingD::instance->accountUpdated += ref new RingClientUWP::AccountUpdated(this, &RingClientUWP::Views::SmartPanel::OnaccountUpdated);
     RingD::instance->registeredNameFound += ref new RingClientUWP::RegisteredNameFound(this, &RingClientUWP::Views::SmartPanel::OnregisteredNameFound);
@@ -135,9 +187,19 @@ SmartPanel::SmartPanel()
     RingD::instance->callPlaced += ref new RingClientUWP::CallPlaced(this, &RingClientUWP::Views::SmartPanel::OncallPlaced);
     RingD::instance->incomingAccountMessage += ref new RingClientUWP::IncomingAccountMessage(this, &RingClientUWP::Views::SmartPanel::OnincomingAccountMessage);
 
+    RingD::instance->newBuddyNotification += ref new RingClientUWP::NewBuddyNotification(this, &RingClientUWP::Views::SmartPanel::OnnewBuddyNotification);
+
+    _networkConnectivityNotificationRow_->Height = Utils::hasInternet() ? 0 : 32;
+
     selectMenu(MenuOpen::CONTACTS_LIST);
 }
 
+void
+SmartPanel::OnregistrationStateChanged(const std::string& accountId)
+{
+    AccountListItemsViewModel::instance->update(ViewModel::NotifyStrings::notifyAccountItem);
+}
+
 void
 SmartPanel::OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code)
 {
@@ -149,19 +211,27 @@ SmartPanel::OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus st
     }
 
     switch (state) {
+    case CallStatus::INCOMING_RINGING:
+    {
+        updateCallAnimationState(item, true);
+        break;
+    }
     case CallStatus::NONE:
     case CallStatus::ENDED:
     {
+        updateCallAnimationState(item, false);
         auto callsList = DRing::getCallList();
         if (callsList.empty())
             _settingsMenuButton_->Visibility = VIS::Visible;
 
-        SmartPanelItemsViewModel::instance->update();
         break;
     }
     case CallStatus::IN_PROGRESS:
     {
+        updateCallAnimationState(item, false);
         SmartPanelItemsViewModel::instance->_selectedItem = item;
+        _smartList_->SelectedIndex = SmartPanelItemsViewModel::instance->getFilteredIndex(item->_contact);
+        _settingsMenuButton_->Visibility = VIS::Collapsed;
         summonVideoPage();
         break;
     }
@@ -177,6 +247,30 @@ SmartPanel::OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus st
     }
 }
 
+void
+SmartPanel::updateCallAnimationState(SmartPanelItem^ item, bool state)
+{
+    auto items = _smartList_->Items;
+    for (int i = 0; i < items->Size; ++i) {
+        if (auto message = dynamic_cast<SmartPanelItem^>(items->GetAt(i))) {
+            if (message == item) {
+                auto depObj = _smartList_->ItemContainerGenerator->ContainerFromItem(items->GetAt(i));
+                auto gridElement = Utils::xaml::FindVisualChildByName(depObj, "_contactAvatarGrid_");
+                auto grid = dynamic_cast<Grid^>(gridElement);
+                auto ellipse = dynamic_cast<Ellipse^>(grid->Children->GetAt(1));
+                auto eventTrigger = dynamic_cast<EventTrigger^>(ellipse->Triggers->GetAt(0));
+                auto beginStoryboard = dynamic_cast<BeginStoryboard^>(eventTrigger->Actions->GetAt(0));
+                if (beginStoryboard) {
+                    if (state)
+                        beginStoryboard->Storyboard->Begin();
+                    else
+                        beginStoryboard->Storyboard->Stop();
+                }
+            }
+        }
+    }
+}
+
 void
 RingClientUWP::Views::SmartPanel::updatePageContent()
 {
@@ -184,32 +278,23 @@ RingClientUWP::Views::SmartPanel::updatePageContent()
     if (!accountListItem)
         return;
 
-    // update ContactListModel with account's contact list
-    //ContactListModel::instance->_contactsList =  accountListItem->_account->_contactsList;
-
-    auto name = accountListItem->_account->name_; // refacto remove name variable and use the link directly on the next line... like _upnpnState..._
-
-    accountListItem->_isSelected = true;
-
-    Configuration::UserPreferences::instance->PREF_ACCOUNT_INDEX = _accountsList_->SelectedIndex;
-    Configuration::UserPreferences::instance->save();
-
-    _selectedAccountName_->Text = name; // refacto : bind this in xaml directly
-    ///_devicesIdList_->ItemsSource = account->_devicesIdList;
-    _deviceId_->Text = accountListItem->_account->_deviceId; /* this is the current device ...
-    ... in the way to get all associated devices, we have to querry the daemon : */
+    _selectedAccountName_->Text = accountListItem->_account->_bestName;
+    _selectedAccountUsername_->Text = accountListItem->_account->_bestName2;
+    _deviceId_->Text = accountListItem->_account->_deviceId;
+    _deviceName_->Text = accountListItem->_account->_deviceName;
 
     _devicesMenuButton_->Visibility = (accountListItem->_account->accountType_ == "RING")
                                       ? Windows::UI::Xaml::Visibility::Visible
                                       : Windows::UI::Xaml::Visibility::Collapsed;
 
-    _shareMenuButton_->Visibility = (accountListItem->_account->accountType_ == "RING")
-                                    ? Windows::UI::Xaml::Visibility::Visible
-                                    : Windows::UI::Xaml::Visibility::Collapsed;
-
+    _enabledState_->IsOn = accountListItem->_account->_active;
     _upnpState_->IsOn = accountListItem->_account->_upnpState;
+    _autoAnswerToggle_->IsOn = accountListItem->_account->_autoAnswer;
+    _dhtPublicInCallsToggle_->IsOn = accountListItem->_account->_dhtPublicInCalls;
+    _turnEnabledToggle_->IsOn = accountListItem->_account->_turnEnabled;
+    _turnEditionTextBox_->Text = accountListItem->_account->_turnAddress;
 
-    if (_upnpState_->IsOn) {
+    if (_RegisterStateEdition_->IsOn) {
         _usernameTextBoxEdition_->IsEnabled = true;
         _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
 
@@ -218,11 +303,17 @@ RingClientUWP::Views::SmartPanel::updatePageContent()
         _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     }
 
+    ContactRequestItemsViewModel::instance->refreshFilteredItemsList();
+    ContactRequestItemsViewModel::instance->update(ViewModel::NotifyStrings::notifyContactRequestItem);
+
+    SmartPanelItemsViewModel::instance->refreshFilteredItemsList();
+    SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem);
 }
 
 void RingClientUWP::Views::SmartPanel::setMode(RingClientUWP::Views::SmartPanel::Mode mode)
 {
-    _rowRingTxtBx_->Height = (mode == RingClientUWP::Views::SmartPanel::Mode::Normal)? 40 : 0;
+    _contactsTitleRow_->Height = (mode == RingClientUWP::Views::SmartPanel::Mode::Normal) ? 54 : 0;
+    _rowRingTxtBx_->Height = (mode == RingClientUWP::Views::SmartPanel::Mode::Normal)? 48 : 0;
     selectMenu(MenuOpen::CONTACTS_LIST);
 }
 
@@ -231,10 +322,12 @@ void RingClientUWP::Views::SmartPanel::_addAccountBtn__Click(Platform::Object^ s
     _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
 
+    _accountCreationMenuGrid_->UpdateLayout();
+    _accountCreationMenuScrollViewer_->ScrollToVerticalOffset(0);
+
     _createAccountYes_->IsEnabled = false;
 
     _accountTypeComboBox_->SelectedIndex = 0;
-    _upnpStateAccountCreation_->IsOn = true;
     _RegisterStateEdition_->IsOn = true;
     _accountAliasTextBox_->Text = "";
     _usernameTextBox_->Text = "";
@@ -249,7 +342,7 @@ void RingClientUWP::Views::SmartPanel::_createAccountYes__Click(Platform::Object
     {
         RingD::instance->createRINGAccount(_accountAliasTextBox_->Text
                                            , _ringPasswordBoxAccountCreation_->Password
-                                           , _upnpStateAccountCreation_->IsOn
+                                           , true
                                            , (_RegisterState_->IsOn) ? _usernameTextBox_->Text : "");
 
         _ringPasswordBoxAccountCreation_->Password = "";
@@ -276,53 +369,105 @@ void RingClientUWP::Views::SmartPanel::_createAccountYes__Click(Platform::Object
     selectMenu(MenuOpen::ACCOUNTS_LIST);
 }
 
-
 void RingClientUWP::Views::SmartPanel::_createAccountNo__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     selectMenu(MenuOpen::ACCOUNTS_LIST);
 }
 
-/* using the usual selection behaviour doesn't allow us to deselect by simple click. The selection is managed
-   by Grid_PointerReleased */
 void
 SmartPanel::_smartList__SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
 {
-    auto listbox = dynamic_cast<ListBox^>(sender); // same as _smartList_
-    listbox->SelectedItem = nullptr;
-    return;
+    auto listbox = safe_cast<ListBox^>(sender);
+    auto item = safe_cast<SmartPanelItem^>(listbox->SelectedItem);
+
+    if (!item)
+        return;
+
+    auto contact = item->_contact;
+
+    if (contact == nullptr)
+    {
+        ERR_("SmartPanelItem without contact");
+        return;
+    }
+
+    if (contact->_contactStatus == ContactStatus::WAITING_FOR_ACTIVATION) {
+        return;
+    }
+
+    /* we set the current selected item */
+    if (SmartPanelItemsViewModel::instance->_selectedItem != item) {
+        SmartPanelItemsViewModel::instance->_selectedItem = item;
+
+        /* at this point we check if a call is in progress with the current selected contact*/
+        auto selectedAccountId = AccountListItemsViewModel::instance->getSelectedAccountId();
+        auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(selectedAccountId));
+        // TODO: don't clear messages if the user does not see the message panel from the VideoPage
+        if (contact) {
+            contact->_unreadMessages = 0;
+            updateNotificationsState();
+            contactListModel->saveContactsToFile();
+        }
+
+        /* summon the video when in a call */
+        if (item->_callStatus == CallStatus::IN_PROGRESS
+            || item->_callStatus == CallStatus::PAUSED
+            || item->_callStatus == CallStatus::PEER_PAUSED) {
+            summonVideoPage();
+            return;
+        }
+
+        /* else, summon the message text page*/
+        summonMessageTextPage();
+    }
 }
 
 void
 SmartPanel::_accountList__SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
 {
     auto listbox = safe_cast<ListBox^>(sender);
-    // disable deselction from listbox
-    if (listbox->SelectedItem == nullptr)
-    {
-        if (e->RemovedItems->Size > 0)
-        {
+    // disable deselection from listbox
+    undoListBoxDeselection(listbox, e);
+    auto accountListItem = safe_cast<AccountListItem^>(listbox->SelectedItem);
+    if (accountListItem == nullptr) {
+        listbox->SelectedIndex = 0;
+        accountListItem = safe_cast<AccountListItem^>(listbox->SelectedItem);
+    }
+    _selectedAccountName_->Text = accountListItem->_account->_bestName;
+    _selectedAccountUsername_->Text = accountListItem->_account->_bestName2;
+    AccountListItemsViewModel::instance->_selectedItem = accountListItem;
+    accountListItem->_isSelected = true;
+
+    SmartPanelItemsViewModel::instance->update({ "_avatarImage" });
+    ContactRequestItemsViewModel::instance->update({ "_avatarImage" });
+
+    updatePageContent();
+    updateNotificationsState();
+
+    Configuration::UserPreferences::instance->PREF_ACCOUNT_INDEX = _accountsList_->SelectedIndex;
+    Configuration::UserPreferences::instance->PREF_ACCOUNT_ID = accountListItem->_account->accountID_;
+    Configuration::UserPreferences::instance->save();
+}
+
+void
+SmartPanel::undoListBoxDeselection(ListBox^ listBox, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
+{
+    // disable deselection from listbox
+    if (listBox->SelectedItem == nullptr) {
+        if (e->RemovedItems->Size > 0) {
             Object^ itemToReselect = e->RemovedItems->GetAt(0);
-            for each (auto item in listbox->Items) {
+            for each (auto item in listBox->Items) {
                 if (item == itemToReselect) {
-                    listbox->SelectedItem = itemToReselect;
+                    listBox->SelectedItem = itemToReselect;
                     continue;
                 }
             }
         }
     }
-    auto account = safe_cast<AccountListItem^>(listbox->SelectedItem);
-    AccountListItemsViewModel::instance->_selectedItem = account;
-
-    updatePageContent();
-}
-
-void RingClientUWP::Views::SmartPanel::_ringTxtBx__Click(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
-{
-    RingD::instance->lookUpName(_ringTxtBx_->Text);
 }
 
 void
-RingClientUWP::Views::SmartPanel::_rejectIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+SmartPanel::_rejectIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     auto button = dynamic_cast<Button^>(e->OriginalSource);
     if (button) {
@@ -335,7 +480,7 @@ RingClientUWP::Views::SmartPanel::_rejectIncomingCallBtn__Click(Platform::Object
 }
 
 void
-RingClientUWP::Views::SmartPanel::_acceptIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+SmartPanel::_acceptIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     auto button = dynamic_cast<Button^>(e->OriginalSource);
     if (button) {
@@ -355,38 +500,47 @@ RingClientUWP::Views::SmartPanel::_acceptIncomingCallBtn__Click(Platform::Object
 }
 
 void
-SmartPanel::_callContact__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+SmartPanel::_callBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     auto button = dynamic_cast<Button^>(e->OriginalSource);
     if (button) {
         /* force to hide the button, avoid attempting to call several times... */
         button->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
 
-        _settingsMenuButton_->Visibility = VIS::Collapsed;
-
         auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
-        if (item) {
-            auto contact = item->_contact;
-            if (contact)
-            {
-                for (auto it : SmartPanelItemsViewModel::instance->itemsList)
-                    if (it->_callStatus == CallStatus::IN_PROGRESS)
-                        RingD::instance->pauseCall(Utils::toString(it->_callId));
-
-                if (item->_callStatus == CallStatus::ENDED || item->_callStatus == CallStatus::NONE) {
-                    item->_callStatus = CallStatus::OUTGOING_REQUESTED;
-                    RingD::instance->placeCall(contact);
-                    item->_contact->_lastTime = "looking for " + item->_contact->_name + ".";
-                }
+        if (item)
+            placeCall(item);
+    }
+}
 
-                /* move the item of the top of the list */
-                unsigned int index;
-                if (_smartList_->Items->IndexOf(item, &index)) {
-                    SmartPanelItemsViewModel::instance->moveItemToTheTop(item);
-                    _smartList_->UpdateLayout();
-                    _smartList_->ScrollIntoView(item);
-                }
-            }
+void
+SmartPanel::placeCall(SmartPanelItem^ item)
+{
+    auto contact = item->_contact;
+    if (contact) {
+        // select item
+        //SmartPanelItemsViewModel::instance->_selectedItem = item;
+        unsigned index = SmartPanelItemsViewModel::instance->getFilteredIndex(item->_contact);
+        //_smartList_->SelectedIndex = index;
+
+        for (auto it : SmartPanelItemsViewModel::instance->itemsList)
+            if (it->_callStatus == CallStatus::IN_PROGRESS)
+                RingD::instance->pauseCall(Utils::toString(it->_callId));
+
+        if (item->_callStatus == CallStatus::ENDED || item->_callStatus == CallStatus::NONE) {
+            _settingsMenuButton_->Visibility = VIS::Collapsed;
+            item->_callStatus = CallStatus::OUTGOING_REQUESTED;
+            RingD::instance->placeCall(contact);
+            auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+            auto lookingForString = loader->GetString("_callsLookingFor_");
+            item->_contact->_lastTime = lookingForString + item->_contact->_name + ".";
+        }
+
+        /* move the item of the top of the list */
+        if (_smartList_->Items->IndexOf(item, &index)) {
+            SmartPanelItemsViewModel::instance->moveItemToTheTop(item);
+            _smartList_->UpdateLayout();
+            _smartList_->ScrollIntoView(item);
         }
     }
 }
@@ -404,7 +558,8 @@ void RingClientUWP::Views::SmartPanel::_cancelCallBtn__Click(Platform::Object^ s
     }
 }
 
-void RingClientUWP::Views::SmartPanel::Grid_PointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
+void
+SmartPanel::SmartPanelItem_Grid_PointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
     auto grid = dynamic_cast<Grid^>(sender);
     auto item = dynamic_cast<SmartPanelItem^>(grid->DataContext);
@@ -416,8 +571,8 @@ void RingClientUWP::Views::SmartPanel::Grid_PointerEntered(Platform::Object^ sen
     item->_isHovered = true;
 }
 
-
-void RingClientUWP::Views::SmartPanel::Grid_PointerExited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
+void
+SmartPanel::SmartPanelItem_Grid_PointerExited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
     auto grid = dynamic_cast<Grid^>(sender);
     auto item = dynamic_cast<SmartPanelItem^>(grid->DataContext);
@@ -428,73 +583,16 @@ void RingClientUWP::Views::SmartPanel::Grid_PointerExited(Platform::Object^ send
     }
 }
 
-void RingClientUWP::Views::SmartPanel::generateQRcode()
+void
+SmartPanel::SmartPanelItem_Grid_PointerMoved(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
-    auto ringId = AccountListItemsViewModel::instance->_selectedItem->_account->ringID_;
-    auto ringId2 = Utils::toString(ringId);
-
-    _ringId_->Text = ringId;
-
-    auto qrcode = QRcode_encodeString(ringId2.c_str(),
-                                      0, //Let the version be decided by libqrencode
-                                      QR_ECLEVEL_L, // Lowest level of error correction
-                                      QR_MODE_8, // 8-bit data mode
-                                      1);
-
-    if (!qrcode) {
-        WNG_("Failed to generate QR code: ");
-        return;
-    }
-
-    const int STRETCH_FACTOR = 4;
-    const int widthQrCode = qrcode->width;
-    const int widthBitmap = STRETCH_FACTOR * widthQrCode;
-
-    unsigned char* qrdata = qrcode->data;
-
-    auto frame = ref new SoftwareBitmap(BitmapPixelFormat::Bgra8, widthBitmap, widthBitmap, BitmapAlphaMode::Premultiplied);
-
-    const int BYTES_PER_PIXEL = 4;
-
-
-    BitmapBuffer^ buffer = frame->LockBuffer(BitmapBufferAccessMode::ReadWrite);
-    IMemoryBufferReference^ reference = buffer->CreateReference();
-
-    Microsoft::WRL::ComPtr<IMemoryBufferByteAccess> byteAccess;
-    if (SUCCEEDED(reinterpret_cast<IUnknown*>(reference)->QueryInterface(IID_PPV_ARGS(&byteAccess))))
-    {
-        byte* data;
-        unsigned capacity;
-        byteAccess->GetBuffer(&data, &capacity);
-
-        auto desc = buffer->GetPlaneDescription(0);
-
-        unsigned char* row, * p;
-        p = qrcode->data;
-
-        for (int u = 0 ; u < widthBitmap ; u++) {
-            for (int v = 0; v < widthBitmap; v++) {
-                int x = static_cast<int>((float)u / (float)widthBitmap * (float)widthQrCode);
-                int y = static_cast<int>((float)v / (float)widthBitmap * (float)widthQrCode);
-
-                auto currPixelRow = desc.StartIndex + desc.Stride * u + BYTES_PER_PIXEL * v;
-                row = (p + (y * widthQrCode));
-
-                if (*(row + x) & 0x1) {
-                    data[currPixelRow + 3] = 255;
-                }
-            }
-        }
-
-    }
-    delete reference;
-    delete buffer;
-
-    auto sbSource = ref new Media::Imaging::SoftwareBitmapSource();
+    auto grid = dynamic_cast<Grid^>(sender);
+    auto item = dynamic_cast<SmartPanelItem^>(grid->DataContext);
 
-    sbSource->SetBitmapAsync(frame);
+    for (auto it : SmartPanelItemsViewModel::instance->itemsList)
+        it->_isHovered = false;
 
-    _selectedAccountQrCode_->Source = sbSource;
+    item->_isHovered = true;
 }
 
 void RingClientUWP::Views::SmartPanel::checkStateAddAccountMenu()
@@ -604,10 +702,8 @@ void RingClientUWP::Views::SmartPanel::checkStateEditionMenu()
         if (isPublic)
             if (isUsernameValid && isAccountAlias || isAlreadyRegistered) {
                 _acceptAccountModification_->IsEnabled = true;
-                //_registerOnBlockchainEdition_->IsEnabled = true;
             } else {
                 _acceptAccountModification_->IsEnabled = false;
-                //_registerOnBlockchainEdition_->IsEnabled = false;
             }
         else if (isAccountAlias)
             _acceptAccountModification_->IsEnabled = true;
@@ -633,7 +729,8 @@ void RingClientUWP::Views::SmartPanel::ringTxtBxPlaceHolderDelay(String^ placeHo
         Dispatcher->RunAsync(CoreDispatcherPriority::High,
                              ref new DispatchedHandler([this]()
         {
-            _ringTxtBx_->PlaceholderText = "";
+            auto placeHolderText = ResourceMananger::instance->getStringResource("_ringTxtBxPlaceholderText_");
+            _ringTxtBx_->PlaceholderText = placeHolderText;
         }));
     }), delay);
 }
@@ -705,7 +802,7 @@ Object ^ RingClientUWP::Views::HasAnActiveCall::ConvertBack(Object ^ value, Wind
 RingClientUWP::Views::HasAnActiveCall::HasAnActiveCall()
 {}
 
-Object ^ RingClientUWP::Views::NewMessageBubleNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+Object ^ RingClientUWP::Views::NewMessageBubbleNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
     auto unreadMessages = static_cast<uint32>(value);
 
@@ -715,13 +812,15 @@ Object ^ RingClientUWP::Views::NewMessageBubleNotification::Convert(Object ^ val
     return Windows::UI::Xaml::Visibility::Collapsed;
 }
 
-Object ^ RingClientUWP::Views::NewMessageBubleNotification::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+Object ^ RingClientUWP::Views::NewMessageNotificationToNumber::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
-    throw ref new Platform::NotImplementedException();
-}
+    auto unreadMessages = static_cast<uint32>(value);
 
-RingClientUWP::Views::NewMessageBubleNotification::NewMessageBubleNotification()
-{}
+    if (unreadMessages > 9)
+        return "9+";
+
+    return unreadMessages.ToString();
+}
 
 void RingClientUWP::Views::SmartPanel::_addDevice__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
@@ -731,12 +830,33 @@ void RingClientUWP::Views::SmartPanel::_addDevice__Click(Platform::Object^ sende
 }
 
 
-void RingClientUWP::Views::SmartPanel::OndevicesListRefreshed(Platform::Collections::Vector<Platform::String ^, std::equal_to<Platform::String ^>, true> ^devicesList)
+void RingClientUWP::Views::SmartPanel::OndevicesListRefreshed(Map<String^, String^>^ deviceMap)
 {
+    if (!AccountListItemsViewModel::instance->_selectedItem)
+        return;
+
     _waitingDevicesList_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-    AccountListItemsViewModel::instance->_selectedItem->_account->_devicesIdList = devicesList;
-    _devicesIdList_->ItemsSource = devicesList;
-    _devicesIdList_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+
+    RingDeviceItemsViewModel::instance->itemsList->Clear();
+
+    for each (auto device in deviceMap) {
+        if (AccountListItemsViewModel::instance->_selectedItem->_account->_deviceId == device->Key) {
+            AccountListItemsViewModel::instance->_selectedItem->_account->_deviceName == device->Value;
+            _deviceName_->Text = device->Value;
+        }
+        else {
+            RingDeviceItemsViewModel::instance->itemsList->Append(ref new RingDeviceItem(device->Key, device->Value));
+        }
+    }
+
+    if (deviceMap->Size < 2) {
+        _noDevicesList_->Visibility = VIS::Visible;
+        _devicesIdList_->Visibility = VIS::Collapsed;
+    }
+    else {
+        _noDevicesList_->Visibility = VIS::Collapsed;
+        _devicesIdList_->Visibility = VIS::Visible;
+    }
 }
 
 
@@ -761,6 +881,7 @@ void RingClientUWP::Views::SmartPanel::OnexportOnRingEnded(Platform::String ^acc
     _waitingAndResult_->Text = pin;
     _closePin_->Visibility = Windows::UI::Xaml::Visibility::Visible;
 
+    RingD::instance->hideLoadingOverlay("PIN generated", SuccessColor, 500);
 }
 
 
@@ -769,13 +890,8 @@ void RingClientUWP::Views::SmartPanel::_closePin__Click(Platform::Object^ sender
     selectMenu(MenuOpen::CONTACTS_LIST);
 
     // refacto : do something better...
-    _waitingAndResult_->Text = "Exporting account on the Ring...";
-}
-
-
-void RingClientUWP::Views::SmartPanel::_shareMenuDone__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
-{
-    selectMenu(MenuOpen::CONTACTS_LIST);
+    auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+    _waitingAndResult_->Text = loader->GetString("_accountsWaitingAndResult_.Text");
 }
 
 Object ^ RingClientUWP::Views::AccountTypeToSourceImage::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
@@ -788,6 +904,13 @@ Object ^ RingClientUWP::Views::AccountTypeToSourceImage::Convert(Object ^ value,
     return ref new BitmapImage(uri);
 }
 
+Object ^ RingClientUWP::Views::RingAccountTypeToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    if (dynamic_cast<String^>(value) == "RING")
+        return VIS::Visible;
+    return VIS::Collapsed;
+}
+
 Object ^ RingClientUWP::Views::AccountTypeToSourceImage::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
     throw ref new Platform::NotImplementedException();
@@ -798,9 +921,7 @@ RingClientUWP::Views::AccountTypeToSourceImage::AccountTypeToSourceImage()
 
 Object ^ RingClientUWP::Views::AccountSelectedToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
-    //auto accountId = static_cast<bool(value);
-
-    if (/*AccountListItemsViewModel::instance->_selectedItem->_account->_isSelected ==*/ (bool)value == true)
+    if ((bool)value == true)
         return Windows::UI::Xaml::Visibility::Visible;
 
     return Windows::UI::Xaml::Visibility::Collapsed;
@@ -817,25 +938,26 @@ RingClientUWP::Views::AccountSelectedToVisibility::AccountSelectedToVisibility()
 
 void RingClientUWP::Views::SmartPanel::_editAccountMenuButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
-    auto account = AccountListItemsViewModel::instance->_selectedItem->_account;
+    _scrollViewerEditionMenu_->UpdateLayout();
+    _scrollViewerEditionMenu_->ScrollToVerticalOffset(0);
 
-    auto volatileAccountDetails = RingD::instance->getVolatileAccountDetails(account);
+    auto account = AccountListItemsViewModel::instance->_selectedItem->_account;
 
     _accountAliasTextBoxEdition_->Text = account->name_;
     _accountEditionGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-    _deleteAccountEdition_->IsOn = false;
-    _deleteAccountEdition_->IsEnabled = (AccountListItemsViewModel::instance->itemsList->Size > 1)? true : false;
     _createAccountYes_->IsEnabled = false;
 
-    _whatWilHappendeleteRingAccountEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-    _whatWilHappendeleteSipAccountEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-
     _sipAccountStackEdition_->Visibility = (account->accountType_ == "SIP")
                                            ? Windows::UI::Xaml::Visibility::Visible
                                            :Windows::UI::Xaml::Visibility::Collapsed;
     _ringStackEdition_->Visibility = (account->accountType_ == "RING")
                                      ? Windows::UI::Xaml::Visibility::Visible
                                      : Windows::UI::Xaml::Visibility::Collapsed;
+
+    _ringStackEdition2_->Visibility = (account->accountType_ == "RING")
+        ? Windows::UI::Xaml::Visibility::Visible
+        : Windows::UI::Xaml::Visibility::Collapsed;
+
     _sipHostnameEdition_->Text = account->_sipHostname;
     _sipUsernameEditionTextBox_->Text = account->_sipUsername;
     _sipPasswordEdition_->Password = account->_sipPassword;
@@ -849,8 +971,8 @@ void RingClientUWP::Views::SmartPanel::_editAccountMenuButton__Click(Platform::O
         _usernameTextBoxEdition_->Text = registeredName;
         _RegisterStateEdition_->IsEnabled = false;
 
-        //_registerOnBlockchainEdition_->IsEnabled = false;
-        _whatWilHappenEdition_->Text = "You are already registered.";
+        auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+        _whatWillHappenEdition_->Text = loader->GetString("_whatWillHappen_0_");
         _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     } else {
         _RegisterStateEdition_->IsOn = false;
@@ -859,11 +981,20 @@ void RingClientUWP::Views::SmartPanel::_editAccountMenuButton__Click(Platform::O
         _usernameTextBoxEdition_->Text = "";
         _RegisterStateEdition_->IsEnabled = true;
 
-        //_registerOnBlockchainEdition_->IsEnabled = false;
-        _whatWilHappenEdition_->Text = "You are not yet registered.";
+        auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+        _whatWillHappenEdition_->Text = loader->GetString("_whatWillHappen_1_");
         _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     }
 
+    auto nBannedContacts = AccountsViewModel::instance->bannedContacts(account->accountID_);
+    if (nBannedContacts) {
+        _accountsShowBannedList_->IsEnabled = true;
+    }
+    else {
+        _accountsShowBannedList_->IsEnabled = false;
+    }
+    setBannedListState(false);
+
     checkStateEditionMenu();
 }
 
@@ -873,41 +1004,29 @@ void RingClientUWP::Views::SmartPanel::_acceptAccountModification__Click(Platfor
     auto account = AccountListItemsViewModel::instance->_selectedItem->_account;
     auto accountId = account->accountID_;
 
-    // mettre ca en visibility du bouton delete
-    auto accountsListSize = dynamic_cast<Vector<AccountListItem^>^>(_accountsList_->ItemsSource)->Size;
+    account->name_ = _accountAliasTextBoxEdition_->Text;
 
-    /* if the delete button is toggled, just delete the account */
-    if (_deleteAccountEdition_->IsOn == true && accountsListSize > 1) {
-        AccountListItem^ item;
-        for each (item in AccountListItemsViewModel::instance->itemsList)
-            if (item->_account->accountID_ == accountId)
-                break;
-
-        if (item)
-            AccountListItemsViewModel::instance->removeItem(item);
-
-        RingD::instance->deleteAccount(accountId);
-
-    } else { /* otherwise edit the account */
-
-        account->name_ = _accountAliasTextBoxEdition_->Text;
+    if (account->accountType_ == "RING") {
+        account->_active = _enabledState_->IsOn;
+        account->_upnpState = _upnpState_->IsOn;
+        account->_autoAnswer = _autoAnswerToggle_->IsOn;
+        account->_dhtPublicInCalls = _dhtPublicInCallsToggle_->IsOn;
+        account->_turnEnabled = _turnEnabledToggle_->IsOn;
+        if (_turnEditionTextBox_->Text != "")
+            account->_turnAddress = _turnEditionTextBox_->Text;
+    }
+    else {
+        account->_sipHostname = _sipHostnameEdition_->Text;
+        account->_sipUsername = _sipUsernameEditionTextBox_->Text;
+        account->_sipPassword = _sipPasswordEdition_->Password;
+    }
 
-        if (account->accountType_ == "RING") {
-            account->_upnpState = _upnpState_->IsOn;
-        }
-        else {
-            account->_sipHostname = _sipHostnameEdition_->Text;
-            account->_sipUsername = _sipUsernameEditionTextBox_->Text;
-            account->_sipPassword = _sipPasswordEdition_->Password;
-        }
+    RingD::instance->updateAccount(accountId);
 
-        RingD::instance->updateAccount(accountId);
-    }
+    selectMenu(MenuOpen::ACCOUNTS_LIST);
 
     updatePageContent();
 
-    selectMenu(MenuOpen::CONTACTS_LIST);
-
     if (_usernameValidEdition_->Visibility == Windows::UI::Xaml::Visibility::Visible && _usernameTextBoxEdition_->Text->Length() > 2)
         RingD::instance->registerName_new(Utils::toString(account->accountID_), "", Utils::toString(_usernameTextBoxEdition_->Text));
 }
@@ -922,6 +1041,7 @@ void RingClientUWP::Views::SmartPanel::_cancelAccountModification__Click(Platfor
 void RingClientUWP::Views::SmartPanel::OnaccountUpdated(RingClientUWP::Account ^account)
 {
     updatePageContent();
+    updateNotificationsState();
 }
 
 void RingClientUWP::Views::SmartPanel::_passwordBoxAccountCreationCheck__PasswordChanged(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
@@ -949,7 +1069,6 @@ void RingClientUWP::Views::SmartPanel::_accountTypeComboBox__SelectionChanged(Pl
         _ringAccountCreationStack_->Visibility = Windows::UI::Xaml::Visibility::Visible;
         _sipAccountCreationStack_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
         _createAccountYes_->IsEnabled = false;
-        _upnpStateAccountCreation_->IsOn = true;
     } else { /* SIP type is selected */
         _ringAccountCreationStack_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
         _sipAccountCreationStack_->Visibility = Windows::UI::Xaml::Visibility::Visible;
@@ -998,83 +1117,42 @@ void RingClientUWP::Views::SmartPanel::_selectedAccountAvatarContainer__PointerE
 void
 RingClientUWP::Views::SmartPanel::_selectedAccountAvatarContainer__PointerReleased(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
-    CameraCaptureUI^ cameraCaptureUI = ref new CameraCaptureUI();
-    cameraCaptureUI->PhotoSettings->Format = CameraCaptureUIPhotoFormat::Jpeg;
-    cameraCaptureUI->PhotoSettings->CroppedSizeInPixels = Size(40, 40);
-
-    create_task(cameraCaptureUI->CaptureFileAsync(CameraCaptureUIMode::Photo))
-    .then([this](StorageFile^ photoFile)
-    {
-        if (photoFile != nullptr) {
-            auto brush = ref new ImageBrush();
-
-            auto circle = ref new Ellipse();
-            circle->Height = 40;
-            circle->Width = 40;
-            auto path = photoFile->Path;
-            auto uri = ref new Windows::Foundation::Uri(path);
-            auto bitmapImage = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage();
-            bitmapImage->UriSource = uri;
-
-            std::string fileBuffer = Utils::getStringFromFile(Utils::toString(photoFile->Path));
-            std::string profilePath = RingD::instance->getLocalFolder() + ".profile";
-            _mkdir(profilePath.c_str());
-            std::ofstream file((profilePath + "\\profile_image.png"),
-                               std::ios::out | std::ios::trunc | std::ios::binary);
-            if (file.is_open()) {
-                file << fileBuffer;
-                file.close();
+    create_task(Configuration::getProfileImageAsync()).then([&](task<BitmapImage^> image){
+        try {
+            if (auto bitmapImage = image.get()) {
+                _selectedAccountAvatar_->ImageSource = bitmapImage;
             }
-
-            Configuration::UserPreferences::instance->PREF_PROFILE_HASPHOTO = true;
-            Configuration::UserPreferences::instance->save();
-
-            brush->ImageSource = bitmapImage;
-            circle->Fill = brush;
-            _selectedAccountAvatar_->ImageSource = bitmapImage;
+        }
+        catch (Platform::Exception^ e) {
+            EXC_(e);
         }
     });
 }
 
-
 void RingClientUWP::Views::SmartPanel::_selectedAccountAvatarContainer__PointerExited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
     _photoboothIcon_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _shaderPhotoboothIcon_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
 }
 
-
 void RingClientUWP::Views::SmartPanel::_smartList__PointerExited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
 
 }
 
-
-void RingClientUWP::Views::SmartPanel::Grid_PointerMoved(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
-{
-    auto grid = dynamic_cast<Grid^>(sender);
-    auto item = dynamic_cast<SmartPanelItem^>(grid->DataContext);
-
-    for (auto it : SmartPanelItemsViewModel::instance->itemsList)
-        it->_isHovered = false;
-
-    item->_isHovered = true;
-}
-
 // NAME SERVICE
 
 void RingClientUWP::Views::SmartPanel::_registerOnBlockchainEdition__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     auto account = AccountListItemsViewModel::instance->_selectedItem->_account;
-
-    //RingD::instance->registerName(account->accountID_, "", _usernameTextBoxEdition_->Text);
     RingD::instance->registerName_new(Utils::toString(account->accountID_), "", Utils::toString(_usernameTextBoxEdition_->Text));
 }
 
 
 void RingClientUWP::Views::SmartPanel::_usernameTextBoxEdition__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
 {
-    RingD::instance->lookUpName(_usernameTextBoxEdition_->Text);
+    auto accountId = AccountListItemsViewModel::instance->getSelectedAccountId();
+    RingD::instance->lookUpName(Utils::toString(accountId), _usernameTextBoxEdition_->Text);
 
     _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
@@ -1082,8 +1160,23 @@ void RingClientUWP::Views::SmartPanel::_usernameTextBoxEdition__KeyUp(Platform::
     checkStateEditionMenu();
 }
 
-void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string& address, const std::string& name)
+void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string& accountId, const std::string& address, const std::string& name)
 {
+    // In the case where the lookup was for a local account's username, we need just
+    // update the account's username property and return.
+    if (status == LookupStatus::SUCCESS) {
+        if (Account^ account = AccountsViewModel::instance->findAccountByRingID(Utils::toPlatformString(address))) {
+            MSG_("Account username lookup complete");
+            account->_username = Utils::toPlatformString(name);
+            // If the the account is currently selected, update the account best-name
+            if (AccountListItemsViewModel::instance->_selectedItem->_account == account) {
+                _selectedAccountName_->Text = account->_bestName;
+               _selectedAccountUsername_->Text = account->_bestName2;
+            }
+            return;
+        }
+    }
+
     if (menuOpen == MenuOpen::ACCOUNTS_LIST) { // if true, we did the lookup for a new account
         /* note : this code do both check for edit and creation menu. It doesn't affect the use and it's easier to
            implement. */
@@ -1092,10 +1185,8 @@ void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::Look
             switch (status)
             {
             case LookupStatus::SUCCESS:
-                _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-                _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-                break;
             case LookupStatus::INVALID_NAME:
+            case LookupStatus::ERRORR:
                 _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
                 _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
                 break;
@@ -1103,10 +1194,6 @@ void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::Look
                 _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
                 _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
                 break;
-            case LookupStatus::ERRORR:
-                _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-                _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-                break;
             }
             checkStateEditionMenu();
             return;
@@ -1117,10 +1204,8 @@ void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::Look
             switch (status)
             {
             case LookupStatus::SUCCESS:
-                _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-                _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-                break;
             case LookupStatus::INVALID_NAME:
+            case LookupStatus::ERRORR:
                 _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
                 _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
                 break;
@@ -1128,10 +1213,6 @@ void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::Look
                 _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
                 _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
                 break;
-            case LookupStatus::ERRORR:
-                _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-                _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-                break;
             }
             checkStateAddAccountMenu();
             return;
@@ -1139,10 +1220,13 @@ void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::Look
 
     }
     else { // if false, we are looking for a registered user (contact)
-        auto selectedAccountId = AccountListItemsViewModel::instance->getSelectedAccountId();
-        auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(selectedAccountId));
+        auto contactListModel = AccountsViewModel::instance->getContactListModel(std::string(accountId));
         auto contact = contactListModel->findContactByName(Utils::toPlatformString(name));
 
+        // Try looking up a contact added by address
+        if (contact == nullptr)
+            contact = contactListModel->findContactByName(Utils::toPlatformString(address));
+
         if (contact == nullptr)
             return;
 
@@ -1152,84 +1236,135 @@ void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::Look
             if (contact->_contactStatus == ContactStatus::WAITING_FOR_ACTIVATION) {
                 contact->_contactStatus = ContactStatus::READY;
                 contact->ringID_ = Utils::toPlatformString(address);
-                ringTxtBxPlaceHolderDelay("username found and added.", 5000);
+                contact->_avatarColorString = Utils::getRandomColorStringFromString(contact->ringID_);
+                auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+                ringTxtBxPlaceHolderDelay(loader->GetString("_contactsUserAdded_"), 5000);
+
+                // send contact request
+                if (contact->_trustStatus == TrustStatus::UNKNOWN) {
+                    auto vcard = Configuration::UserPreferences::instance->getVCard();
+                    RingD::instance->sendContactRequest(accountId, address, vcard->asString());
+                    contact->_name = Utils::toPlatformString(name);
+                    contact->_trustStatus = TrustStatus::CONTACT_REQUEST_SENT;
+                    SmartPanelItemsViewModel::instance->refreshFilteredItemsList();
+                    SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem);
+                }
+                else if (contact->_trustStatus == TrustStatus::INCOMING_CONTACT_REQUEST) {
+                    contact->_name = Utils::toPlatformString(name);
+                    ContactRequestItemsViewModel::instance->update(ViewModel::NotifyStrings::notifyContactRequestItem);
+                }
                 contactListModel->saveContactsToFile();
             }
             else {
-                /* in that case we delete a possible suroggate */
-                for each (Contact^ co in contactListModel->_contactsList) {
-                    if (co->_contactStatus == ContactStatus::WAITING_FOR_ACTIVATION
-                            && co->_name == Utils::toPlatformString(name)) {
-                        auto item = SmartPanelItemsViewModel::instance->findItem(co);
-                        contactListModel->deleteContact(co);
+                /* in that case we delete a possible temporary item */
+                for each (Contact^ contact in contactListModel->_contactsList) {
+                    if (contact->_contactStatus == ContactStatus::WAITING_FOR_ACTIVATION
+                            && contact->_name == Utils::toPlatformString(name)) {
+                        auto item = SmartPanelItemsViewModel::instance->findItem(contact);
+                        contactListModel->deleteContact(contact);
                         SmartPanelItemsViewModel::instance->removeItem(item);
                     }
-
                 }
-
             }
-
-            /* open the text message page */
-            auto item = SmartPanelItemsViewModel::instance->findItem(contact);
-
-            //if (item->_callStatus != CallStatus::INCOMING_RINGING) {// refacto : do something better
-            //    SmartPanelItemsViewModel::instance->_selectedItem = item;
-            //    summonMessageTextPage();
-            //}
+            if (!contact->subscribed_) {
+                MSG_("account: " + accountId + " subscribing to buddy presence for ringID: " + Utils::toString(contact->ringID_));
+                RingD::instance->subscribeBuddy(accountId, Utils::toString(contact->ringID_), true);
+                contact->subscribed_ = true;
+            }
         }
         break;
         case LookupStatus::INVALID_NAME:
-            if (name.length() == 40) {
-
+        {
+            MSG_("INVALID_NAME LOOKUP RESULT");
+            std::regex sha1_regex("[0-9a-f]{40}");
+            if (std::regex_match(name, sha1_regex)) {
                 /* first we check if some contact is registred with this ring id */
                 auto contactAlreadyRecorded = contactListModel->findContactByRingId(Utils::toPlatformString(name));
                 if (contactAlreadyRecorded) {
-                    ringTxtBxPlaceHolderDelay("you already have a contact with this ring id.", 5000);
                     /* delete the contact added recently */
                     auto item = SmartPanelItemsViewModel::instance->findItem(contact);
-                    contactListModel->deleteContact(contact);
-                    SmartPanelItemsViewModel::instance->removeItem(item);
-
-                    /* open the message text with the contact already recorder*/
-                    item = SmartPanelItemsViewModel::instance->findItem(contactAlreadyRecorded);
-
-                    //if (item->_callStatus != CallStatus::INCOMING_RINGING) { // refacto : do something better
-                    //    SmartPanelItemsViewModel::instance->_selectedItem = item;
-                    //    summonMessageTextPage();
-                    //}
-                    break;
+                    if (item->_contact->_trustStatus != TrustStatus::INCOMING_CONTACT_REQUEST &&
+                        item->_contact->_trustStatus != TrustStatus::UNKNOWN &&
+                        item->_contact->_contactStatus == ContactStatus::WAITING_FOR_ACTIVATION) {
+                        contactListModel->deleteContact(contact);
+                        SmartPanelItemsViewModel::instance->removeItem(item);
+                        auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+                        ringTxtBxPlaceHolderDelay(loader->GetString("_contactsContactExists_"), 5000);
+                    }
+                    else if (item->_contact->_trustStatus == TrustStatus::UNKNOWN) {
+                        SmartPanelItemsViewModel::instance->refreshFilteredItemsList();
+                        SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem);
+                    }
                 }
+                else {
+                    auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+                    ringTxtBxPlaceHolderDelay(loader->GetString("_contactsRingIdAdded_"), 5000);
+                    contact->ringID_ = Utils::toPlatformString(name);
+                    contact->_contactStatus = ContactStatus::READY;
+
+                    if (contact && !contact->subscribed_) {
+                        MSG_("account: " + accountId + " subscribing to buddy presence for ringID: " + Utils::toString(contact->ringID_));
+                        RingD::instance->subscribeBuddy(accountId, Utils::toString(contact->ringID_), true);
+                        contact->subscribed_ = true;
+                    }
 
-                ringTxtBxPlaceHolderDelay("ring id added.", 5000); // refacto : we should check if it's an actual ring id
-                contact->ringID_ = Utils::toPlatformString(name);
-                contact->_contactStatus = ContactStatus::READY;
-                contactListModel->saveContactsToFile();
+                    // send contact request
+                    if (contact->_trustStatus == TrustStatus::UNKNOWN) {
+                        auto vcard = Configuration::UserPreferences::instance->getVCard();
+                        RingD::instance->sendContactRequest(accountId, address, vcard->asString());
+                        contact->_trustStatus = TrustStatus::CONTACT_REQUEST_SENT;
+                        SmartPanelItemsViewModel::instance->refreshFilteredItemsList();
+                        SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem);
+                    }
+                }
             }
             else {
-                ringTxtBxPlaceHolderDelay("username invalid.", 5000);
+                auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+                ringTxtBxPlaceHolderDelay(loader->GetString("_contactsUsernameInvalid_"), 5000);
                 auto item = SmartPanelItemsViewModel::instance->findItem(contact);
                 contactListModel->deleteContact(contact);
                 SmartPanelItemsViewModel::instance->removeItem(item);
-                contactListModel->saveContactsToFile();
             }
+            contactListModel->saveContactsToFile();
             break;
+        }
         case LookupStatus::NOT_FOUND:
         {
-            ringTxtBxPlaceHolderDelay("username not found.", 5000);
-            auto item = SmartPanelItemsViewModel::instance->findItem(contact);
-            contactListModel->deleteContact(contact);
-            SmartPanelItemsViewModel::instance->removeItem(item);
-            contactListModel->saveContactsToFile();
+            std::regex sha1_regex("[0-9a-f]{40}");
+            if (std::regex_match(address, sha1_regex)) {
+                RingD::instance->lookUpName(accountId, Utils::toPlatformString(address));
+            }
+            else {
+                auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+                ringTxtBxPlaceHolderDelay(loader->GetString("_contactsUsernameNotFound_"), 5000);
+                auto item = SmartPanelItemsViewModel::instance->findItem(contact);
+                contactListModel->deleteContact(contact);
+                SmartPanelItemsViewModel::instance->removeItem(item);
+                contactListModel->saveContactsToFile();
+            }
             break;
         }
         case LookupStatus::ERRORR:
-            ringTxtBxPlaceHolderDelay("network error!", 5000);
-            auto item = SmartPanelItemsViewModel::instance->findItem(contact);
-            contactListModel->deleteContact(contact);
-            SmartPanelItemsViewModel::instance->removeItem(item);
-            contactListModel->saveContactsToFile();
+            std::regex sha1_regex("[0-9a-f]{40}");
+            if (std::regex_match(address, sha1_regex)) {
+                RingD::instance->lookUpName(accountId, Utils::toPlatformString(address));
+            }
+            else {
+                auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+                ringTxtBxPlaceHolderDelay(loader->GetString("_contactsNetworkError_"), 5000);
+                auto item = SmartPanelItemsViewModel::instance->findItem(contact);
+                contactListModel->deleteContact(contact);
+                SmartPanelItemsViewModel::instance->removeItem(item);
+                contactListModel->saveContactsToFile();
+            }
             break;
         }
+
+        auto unpoppedToast = RingD::instance->unpoppedToasts.find(Utils::toPlatformString(address));
+        if (unpoppedToast != RingD::instance->unpoppedToasts.end()) {
+            unpoppedToast->second(Utils::toPlatformString(name));
+            RingD::instance->unpoppedToasts.erase(Utils::toPlatformString(address));
+        }
     }
 }
 
@@ -1239,19 +1374,22 @@ void RingClientUWP::Views::SmartPanel::_RegisterState__Toggled(Platform::Object^
     auto toggleSwitch = dynamic_cast<ToggleSwitch^>(sender);
 
     // avoid trouble when InitializeComponent is called.
-    if (_usernameTextBox_ == nullptr || _whatWilHappen_ == nullptr)
+    if (_usernameTextBox_ == nullptr || _whatWillHappen_ == nullptr)
         return;
 
     bool isPublic = toggleSwitch->IsOn;
 
     if (isPublic) {
-        RingD::instance->lookUpName(_usernameTextBox_->Text);
+        auto accountId = AccountListItemsViewModel::instance->getSelectedAccountId();
+        RingD::instance->lookUpName(Utils::toString(accountId), _usernameTextBox_->Text);
         _usernameTextBox_->IsEnabled = true;
-        _whatWilHappen_->Text = "peoples will find you with your username.";
+        auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+        _whatWillHappen_->Text = loader->GetString("_whatWillHappen_0_");
     }
     else {
         _usernameTextBox_->IsEnabled = false;
-        _whatWilHappen_->Text = "you'll have to send your ringId.";
+        auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+        _whatWillHappen_->Text = loader->GetString("_whatWillHappen_2_");
         _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
         _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     }
@@ -1264,21 +1402,22 @@ void RingClientUWP::Views::SmartPanel::_RegisterStateEdition__Toggled(Platform::
     auto toggleSwitch = dynamic_cast<ToggleSwitch^>(sender);
 
     // avoid trouble when InitializeComponent is called.
-    if (_usernameTextBoxEdition_ == nullptr /*|| _registerOnBlockchainEdition_ == nullptr*/ || _whatWilHappen_ == nullptr)
+    if (_usernameTextBoxEdition_ == nullptr || _whatWillHappen_ == nullptr)
         return;
 
     bool isPublic = toggleSwitch->IsOn;
 
     if (isPublic) {
-        RingD::instance->lookUpName(_usernameTextBoxEdition_->Text);
+        auto accountId = AccountListItemsViewModel::instance->getSelectedAccountId();
+        RingD::instance->lookUpName(Utils::toString(accountId), _usernameTextBoxEdition_->Text);
         _usernameTextBoxEdition_->IsEnabled = true;
-        //_registerOnBlockchainEdition_->IsEnabled = true;
-        _whatWilHappen_->Text = "You are not yet registered.";
+        auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+        _whatWillHappen_->Text = loader->GetString("_whatWillHappen_1_");
     }
     else {
         _usernameTextBoxEdition_->IsEnabled = false;
-        // _registerOnBlockchainEdition_->IsEnabled = false;
-        _whatWilHappen_->Text = "You'll have to send your ringId.";
+        auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+        _whatWillHappen_->Text = loader->GetString("_whatWillHappen_2_");
         _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
         _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     }
@@ -1289,35 +1428,11 @@ void RingClientUWP::Views::SmartPanel::_RegisterStateEdition__Toggled(Platform::
 
 void RingClientUWP::Views::SmartPanel::_usernameTextBox__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
 {
-    RingD::instance->lookUpName(_usernameTextBox_->Text);
+    auto accountId = AccountListItemsViewModel::instance->getSelectedAccountId();
+    RingD::instance->lookUpName(Utils::toString(accountId), _usernameTextBox_->Text);
 
     _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-
-
-}
-
-
-
-void RingClientUWP::Views::SmartPanel::_deleteAccountEdition__Toggled(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
-{
-    auto accountType = AccountListItemsViewModel::instance->_selectedItem->_account->accountType_;
-
-    if (accountType=="RING")
-        _whatWilHappendeleteRingAccountEdition_->Visibility = (_deleteAccountEdition_->IsOn)
-                ? Windows::UI::Xaml::Visibility::Visible
-                : Windows::UI::Xaml::Visibility::Collapsed;
-    else
-        _whatWilHappendeleteSipAccountEdition_->Visibility = (_deleteAccountEdition_->IsOn)
-                ? Windows::UI::Xaml::Visibility::Visible
-                : Windows::UI::Xaml::Visibility::Collapsed;
-
-    _learnMoreDeleteAccountEdition_->Visibility = (_deleteAccountEdition_->IsOn)
-            ? Windows::UI::Xaml::Visibility::Visible
-            : Windows::UI::Xaml::Visibility::Collapsed;
-
-    _scrollViewerEditionMenu_->UpdateLayout();
-    _scrollViewerEditionMenu_->ScrollToVerticalOffset(_scrollViewerEditionMenu_->ScrollableHeight);
 }
 
 // VIDEO
@@ -1389,7 +1504,7 @@ SmartPanel::_videoRateComboBox__SelectionChanged(Platform::Object^ sender, Windo
                     }));
                 }
                 catch (Exception^ e) {
-                    WriteException(e);
+                    EXC_(e);
                 }
             });
         }
@@ -1469,43 +1584,6 @@ SmartPanel::populateVideoRateSettingsComboBox()
 }
 
 
-
-void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
-{
-    if (e->Key == Windows::System::VirtualKey::Enter) {
-        for (auto item : SmartPanelItemsViewModel::instance->itemsList) {
-            if (item->_contact->_name == _ringTxtBx_->Text || item->_contact->ringID_ == _ringTxtBx_->Text) {
-                SmartPanelItemsViewModel::instance->_selectedItem = item;
-                summonMessageTextPage();
-            }
-        }
-
-        auto selectedAccountId = AccountListItemsViewModel::instance->getSelectedAccountId();
-        auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(selectedAccountId));
-        auto contact = contactListModel->addNewContact(_ringTxtBx_->Text, "", ContactStatus::WAITING_FOR_ACTIVATION);
-        RingD::instance->lookUpName(_ringTxtBx_->Text);
-
-        _ringTxtBx_->Text = "";
-
-        for (auto item : SmartPanelItemsViewModel::instance->itemsList) {
-            item->_showMe = Windows::UI::Xaml::Visibility::Visible;
-        }
-        return;
-    }
-
-    for (auto item : SmartPanelItemsViewModel::instance->itemsList) {
-        auto str1 = Utils::toString(item->_contact->_name);
-        auto str2 = Utils::toString(_ringTxtBx_->Text);
-
-        if (str1.find(str2) != std::string::npos)
-            item->_showMe = Windows::UI::Xaml::Visibility::Visible;
-        else
-            item->_showMe = Windows::UI::Xaml::Visibility::Collapsed;
-    }
-
-}
-
-
 void RingClientUWP::Views::SmartPanel::_linkThisDeviceBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
@@ -1524,6 +1602,7 @@ void RingClientUWP::Views::SmartPanel::_step2button__Click(Platform::Object^ sen
     _addAccountYes_->Visibility = Windows::UI::Xaml::Visibility::Visible;
     _addAccountNo_->Visibility = Windows::UI::Xaml::Visibility::Visible;
 
+    _addAccountYes_->IsEnabled = false;
     _PINTextBox_->Text = "";
     _ArchivePassword_->Password = "";
     _response_->Text = "";
@@ -1544,17 +1623,18 @@ void RingClientUWP::Views::SmartPanel::_addAccountNo__Click(Platform::Object^ se
 
 void RingClientUWP::Views::SmartPanel::_addAccountYes__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
-    this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, ref new Windows::UI::Core::DispatchedHandler([this]() {
-        RingD::instance->registerThisDevice(_PINTextBox_->Text, _ArchivePassword_->Password);
-        _ArchivePassword_->Password = "";
-        _PINTextBox_->Text = "";
-    }));
+    selectMenu(MenuOpen::ACCOUNTS_LIST);
+    RingD::instance->showLoadingOverlay(ResourceMananger::instance->getStringResource("_m_add_device_"), SuccessColor);
+    RingD::instance->registerThisDevice(_PINTextBox_->Text, _ArchivePassword_->Password);
+    _ArchivePassword_->Password = "";
+    _PINTextBox_->Text = "";
 }
 
 
 void RingClientUWP::Views::SmartPanel::OnregistrationStateErrorGeneric(const std::string& accountId)
 {
-    _response_->Text = "Credentials error or PIN expired.";
+    auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+    _response_->Text = loader->GetString("_accountsCredentialsExpired_");
 }
 
 
@@ -1564,14 +1644,18 @@ void RingClientUWP::Views::SmartPanel::_PINTextBox__GotFocus(Platform::Object^ s
 }
 
 
-void RingClientUWP::Views::SmartPanel::OnregistrationStateRegistered()
+void RingClientUWP::Views::SmartPanel::OnregistrationStateRegistered(const std::string& accountId)
 {
-    _addAccountNo__Click(nullptr, nullptr);
 }
 
 void RingClientUWP::Views::SmartPanel::OncallPlaced(Platform::String ^callId)
 {
-    SmartPanelItemsViewModel::instance->_selectedItem = nullptr;
+    //SmartPanelItemsViewModel::instance->_selectedItem = nullptr;
+}
+
+void RingClientUWP::Views::SmartPanel::OncontactDataModified(Platform::String ^account, Contact^ contact)
+{
+    updateNotificationsState();
 }
 
 Object ^ RingClientUWP::Views::ContactStatusNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
@@ -1595,54 +1679,6 @@ RingClientUWP::Views::ContactStatusNotification::ContactStatusNotification()
 
 void RingClientUWP::Views::SmartPanel::selectMenu(MenuOpen menu)
 {
-
-
-    _contactsListMenuButton_->IsChecked = (menu == MenuOpen::CONTACTS_LIST) ? true : false;
-    _smartGrid_->Visibility = (menu == MenuOpen::CONTACTS_LIST)
-                              ? Windows::UI::Xaml::Visibility::Visible
-                              : Windows::UI::Xaml::Visibility::Collapsed;
-
-    _accountsMenuButton_->IsChecked = (menu == MenuOpen::ACCOUNTS_LIST) ? true : false;
-    _accountsMenuGrid_->Visibility = (menu == MenuOpen::ACCOUNTS_LIST)
-                                     ? Windows::UI::Xaml::Visibility::Visible
-                                     : Windows::UI::Xaml::Visibility::Collapsed;
-
-    _shareMenuButton_->IsChecked = (menu == MenuOpen::SHARE) ? true : false;
-    _shareMenuGrid_->Visibility = (menu == MenuOpen::SHARE)
-                                  ? Windows::UI::Xaml::Visibility::Visible
-                                  : Windows::UI::Xaml::Visibility::Collapsed;
-
-    _devicesMenuButton_->IsChecked = (menu == MenuOpen::DEVICE) ? true : false;
-    _devicesMenuGrid_->Visibility = (menu == MenuOpen::DEVICE)
-                                    ? Windows::UI::Xaml::Visibility::Visible
-                                    : Windows::UI::Xaml::Visibility::Collapsed;
-
-    _settingsMenuButton_->IsChecked = (menu == MenuOpen::SETTINGS) ? true : false;
-    _settingsMenu_->Visibility = (menu == MenuOpen::SETTINGS)
-                                 ? Windows::UI::Xaml::Visibility::Visible
-                                 : Windows::UI::Xaml::Visibility::Collapsed;
-
-    /* manage the account menu */
-    _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-    _accountEditionGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-    _accountAddMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-
-    /* manage the share icon*/
-    if (menu == MenuOpen::SHARE && menuOpen != MenuOpen::SHARE) {
-        generateQRcode();
-        _qrCodeIconWhite_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-        _qrCodeIconBlack_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-    }
-    else if (menu != MenuOpen::SHARE && menuOpen == MenuOpen::SHARE) {
-        _qrCodeIconBlack_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-        _qrCodeIconWhite_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-    }
-
-    /* manage adding device menu */
-    _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-    _waitingDevicesList_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-    _waitingForPin_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-
     /* manage the video preview */
     if (menu == MenuOpen::SETTINGS && menuOpen != MenuOpen::SETTINGS) {
         auto vcm = Video::VideoManager::instance->captureManager();
@@ -1658,91 +1694,118 @@ void RingClientUWP::Views::SmartPanel::selectMenu(MenuOpen menu)
         auto vcm = Video::VideoManager::instance->captureManager();
         if (vcm->deviceList->Size > 0) {
             vcm->StopPreviewAsync()
-            .then([](task<void> stopPreviewTask)
+                .then([](task<void> stopPreviewTask)
             {
                 try {
                     stopPreviewTask.get();
                     Video::VideoManager::instance->captureManager()->isSettingsPreviewing = false;
                 }
                 catch (Exception^ e) {
-                    WriteException(e);
+                    EXC_(e);
                 }
             });
         }
         hidePreviewPage();
     }
 
+    _contactsListMenuButton_->IsChecked = (menu == MenuOpen::CONTACTS_LIST) ? true : false;
+    _smartGrid_->Visibility = (menu == MenuOpen::CONTACTS_LIST) ? VIS::Visible : VIS::Collapsed;
+
+    _contactRequestListMenuButton_->IsChecked = (menu == MenuOpen::CONTACTREQUEST_LIST) ? true : false;
+    _incomingContactRequestGrid_->Visibility = (menu == MenuOpen::CONTACTREQUEST_LIST) ? VIS::Visible : VIS::Collapsed;
+
+    _accountsMenuButton_->IsChecked = (menu == MenuOpen::ACCOUNTS_LIST) ? true : false;
+    _accountsMenuGrid_->Visibility = (menu == MenuOpen::ACCOUNTS_LIST) ? VIS::Visible : VIS::Collapsed;
+
+    _devicesMenuButton_->IsChecked = (menu == MenuOpen::DEVICE) ? true : false;
+    _devicesMenuGrid_->Visibility = (menu == MenuOpen::DEVICE) ? VIS::Visible : VIS::Collapsed;
+
+    _settingsMenuButton_->IsChecked = (menu == MenuOpen::SETTINGS) ? true : false;
+    _settingsMenu_->Visibility = (menu == MenuOpen::SETTINGS) ? VIS::Visible : VIS::Collapsed;
+
+    /* manage the account menu */
+    _accountCreationMenuGrid_->Visibility = VIS::Collapsed;
+    _accountEditionGrid_->Visibility = VIS::Collapsed;
+    _accountAddMenuGrid_->Visibility = VIS::Collapsed;
+
+    if (menu == MenuOpen::CONTACTREQUEST_LIST) {
+        _incomingContactRequestList_->SelectedIndex = -1;
+        ContactRequestItemsViewModel::instance->_selectedItem = nullptr;
+    }
+
+    /* manage adding device menu */
+    _addingDeviceGrid_->Visibility = VIS::Collapsed;
+    _waitingDevicesList_->Visibility = VIS::Collapsed;
+    _waitingForPin_->Visibility = VIS::Collapsed;
+
     menuOpen = menu;
 }
 
-/* if you changed the name of Grid_PointerReleased, be sure to change it in the comment about the selection */
-void RingClientUWP::Views::SmartPanel::Grid_PointerReleased(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
+void
+SmartPanel::_addAccountInputValidation__KeyUp(Platform::Object ^ sender, RoutedEventArgs ^ e)
 {
-    auto grid = dynamic_cast<Grid^>(sender);
-    auto item = dynamic_cast<SmartPanelItem^>(grid->DataContext);
-
-    if (item) {
-        /* if the contact is not yet ready to be used, typically when we are waiting a lookup from the blockachin*/
-        auto contact = item->_contact;
+    bool isPasswordValid = (!_PINTextBox_->Text->IsEmpty()) && (!_ArchivePassword_->Password->IsEmpty()) ? true : false;
+    _addAccountYes_->IsEnabled = isPasswordValid;
+}
 
-        if (contact == nullptr)
-        {
-            ERR_("SmartPanelIem without contact");
-            return;
-        }
+void
+SmartPanel::updateNotificationsState()
+{
+    updateContactNotificationsState(nullptr);
+}
 
-        if (contact->_contactStatus == ContactStatus::WAITING_FOR_ACTIVATION) {
-            return;
+void
+SmartPanel::updateContactNotificationsState(Contact^ contact)
+{
+    if (contact != nullptr) {
+        auto smartListIndex = SmartPanelItemsViewModel::instance->getIndex(contact);
+        auto smartPanelItem = SmartPanelItemsViewModel::instance->findItem(contact);
+        auto selectedSmartPanelItem = SmartPanelItemsViewModel::instance->_selectedItem;
+        auto frame = dynamic_cast<Windows::UI::Xaml::Controls::Frame^>(Window::Current->Content);
+        auto mainPage = dynamic_cast<RingClientUWP::MainPage^>(frame->Content);
+        if (_smartList_->SelectedIndex != smartListIndex &&
+            !(selectedSmartPanelItem == smartPanelItem && mainPage->currentFrame == FrameOpen::MESSAGE)) {
+            contact->_unreadMessages++;
+            /* saveContactsToFile used to save the notification */
+            auto selectedAccountId = AccountListItemsViewModel::instance->getSelectedAccountId();
+            auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(selectedAccountId));
+            contactListModel->saveContactsToFile();
         }
+    }
 
-        /* if the contact was already selected, just do a deselection and live the message text page*/
-        if (item == SmartPanelItemsViewModel::instance->_selectedItem)
-        {
-            SmartPanelItemsViewModel::instance->_selectedItem = nullptr;
-            summonWelcomePage();
-            return;
-        }
+    auto selectedAccountId = Utils::toString(AccountListItemsViewModel::instance->getSelectedAccountId());
+    if (!selectedAccountId.empty()) {
 
-        /* we set the current selected item */
-        SmartPanelItemsViewModel::instance->_selectedItem = item;
+        auto selectedAccountMessages = AccountsViewModel::instance->unreadMessages(Utils::toPlatformString(selectedAccountId));
+        auto selectedAccountContactRequests = AccountsViewModel::instance->unreadContactRequests(Utils::toPlatformString(selectedAccountId));
 
-        /* at this point we check if a call is in progress with the current selected contact*/
-        auto selectedAccountId = AccountListItemsViewModel::instance->getSelectedAccountId();
-        auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(selectedAccountId));
-        if (item->_callStatus == CallStatus::IN_PROGRESS
-                || item->_callStatus == CallStatus::PAUSED
-                || item->_callStatus == CallStatus::PEER_PAUSED) {
-            if (contact) {
-                contact->_unreadMessages = 0;
-                updateUnreadMessagesState();
-                contactListModel->saveContactsToFile();
-            }
+        _unreadMessagesCircle_->Visibility = selectedAccountMessages ? VIS::Visible : VIS::Collapsed;
+        _unreadContactRequestsCircle_->Visibility = selectedAccountContactRequests ? VIS::Visible : VIS::Collapsed;
 
-            summonVideoPage();
-            return;
-        }
+        auto totalMessages = AccountListItemsViewModel::instance->unreadMessages();
+        auto totalContactRequests = AccountListItemsViewModel::instance->unreadContactRequests();
 
-        /* else, summont the message text page*/
-        summonMessageTextPage();
-        contact->_unreadMessages = 0;
-        updateUnreadMessagesState();
-        contactListModel->saveContactsToFile();
+        auto totalNonSelectedNotifications = (totalMessages + totalContactRequests) - (selectedAccountMessages + selectedAccountContactRequests);
+        _unreadAccountNotificationsCircle_->Visibility = (totalNonSelectedNotifications > 0) ? VIS::Visible : VIS::Collapsed;
     }
-}
 
-void
-SmartPanel::updateUnreadMessagesState()
-{
-    _unreadAccountMessagesCircle_->Visibility = AccountListItemsViewModel::instance->unreadMessages() ?
-            VIS::Visible : VIS::Collapsed;
+    ContactRequestItemsViewModel::instance->refreshFilteredItemsList();
+    ContactRequestItemsViewModel::instance->update(ViewModel::NotifyStrings::notifyContactRequestItem);
+
+    SmartPanelItemsViewModel::instance->refreshFilteredItemsList();
+    SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem);
+
+    AccountListItemsViewModel::instance->update(ViewModel::NotifyStrings::notifyAccountItem);
 }
 
 Object ^ RingClientUWP::Views::boolToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
+    auto direction = static_cast<String^>(parameter);
+    Visibility if_true = (direction == "Inverted") ? Visibility::Collapsed : Visibility::Visible;
+    Visibility if_false = (direction == "Inverted") ? Visibility::Visible : Visibility::Collapsed;
     if (static_cast<bool>(value))
-        return Windows::UI::Xaml::Visibility::Visible;
-
-    return  Windows::UI::Xaml::Visibility::Collapsed;
+        return if_true;
+    return  if_false;
 }
 
 Object ^ RingClientUWP::Views::boolToVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
@@ -1768,6 +1831,31 @@ OneToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName ta
     return  Windows::UI::Xaml::Visibility::Collapsed;
 }
 
+Object^
+UnreadAccountNotificationsString::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto account = static_cast<Account^>(value);
+    String^ notificationString;
+    std::string notification_string;
+    std::string description;
+    if (static_cast<String^>(parameter) == "Summary") {
+        notification_string = std::to_string(account->_unreadMessages + account->_unreadContactRequests);
+    }
+    else {
+        if (account->_unreadMessages) {
+            description = account->_unreadMessages == 1 ? " Message" : " Messages";
+            notification_string.append(std::to_string(account->_unreadMessages) + description);
+        }
+        if (account->_unreadContactRequests) {
+            if (account->_unreadMessages)
+                notification_string.append(", ");
+            description = account->_unreadContactRequests == 1 ? " Contact request" : " Contact requests";
+            notification_string.append(std::to_string(account->_unreadContactRequests) + description);
+        }
+    }
+    return Utils::toPlatformString(notification_string);
+}
+
 Object^
 MoreThanOneToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
@@ -1777,12 +1865,42 @@ MoreThanOneToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::Typ
     return  Windows::UI::Xaml::Visibility::Collapsed;
 }
 
+Object^
+MoreThanZeroToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    if (static_cast<unsigned>(value) > 0)
+        return Windows::UI::Xaml::Visibility::Visible;
+
+    return  Windows::UI::Xaml::Visibility::Collapsed;
+}
+
+Object^
+PartialTrustToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto direction = static_cast<String^>(parameter);
+    Visibility if_true = (direction == "Inverted") ? Visibility::Collapsed : Visibility::Visible;
+    Visibility if_false = (direction == "Inverted") ? Visibility::Visible : Visibility::Collapsed;
+    if (static_cast<TrustStatus>(value) == TrustStatus::CONTACT_REQUEST_SENT)
+        return if_true;
+    return  if_false;
+}
+
+Object^
+TrustedToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    if (static_cast<Contact^>(value)->_isTrusted)
+        return Windows::UI::Xaml::Visibility::Visible;
+
+    return  Windows::UI::Xaml::Visibility::Collapsed;
+}
+
 Object^
 SelectedAccountToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
     auto contact = static_cast<Contact^>(value);
     auto callStatus = SmartPanelItemsViewModel::instance->findItem(contact)->_callStatus;
     auto isCall = ( callStatus != CallStatus::NONE && callStatus != CallStatus::ENDED ) ? true : false;
+
     if (contact->_accountIdAssociated == AccountListItemsViewModel::instance->getSelectedAccountId() || isCall)
         return Windows::UI::Xaml::Visibility::Visible;
 
@@ -1803,8 +1921,17 @@ void RingClientUWP::Views::SmartPanel::OnincomingAccountMessage(Platform::String
         _smartList_->ScrollIntoView(item);
     }
 
-    _unreadAccountMessagesCircle_->Visibility = AccountListItemsViewModel::instance->unreadMessages() ?
-        VIS::Visible : VIS::Collapsed;
+    auto selectedAccountId = Utils::toString(AccountListItemsViewModel::instance->getSelectedAccountId());
+    if (!selectedAccountId.empty()) {
+        auto selectedAccountMessages = AccountsViewModel::instance->unreadMessages(Utils::toPlatformString(selectedAccountId));
+        auto selectedAccountContactRequests = AccountsViewModel::instance->unreadContactRequests(Utils::toPlatformString(selectedAccountId));
+
+        auto totalMessages = AccountListItemsViewModel::instance->unreadMessages();
+        auto totalContactRequests = AccountListItemsViewModel::instance->unreadContactRequests();
+
+        auto totalNonSelectedNotifications = (totalMessages + totalContactRequests) - (selectedAccountMessages + selectedAccountContactRequests);
+        _unreadAccountNotificationsCircle_->Visibility = (totalNonSelectedNotifications > 0) ? VIS::Visible : VIS::Collapsed;
+    }
 }
 
 Object ^ RingClientUWP::Views::CallStatusToSpinnerVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
@@ -1828,105 +1955,153 @@ Object ^ RingClientUWP::Views::CallStatusToSpinnerVisibility::ConvertBack(Object
 RingClientUWP::Views::CallStatusToSpinnerVisibility::CallStatusToSpinnerVisibility()
 {}
 
-Object ^ RingClientUWP::Views::CallStatusForIncomingCallAnimatedEllipse::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+Object ^ RingClientUWP::Views::CallStatusForIncomingCallEllipse::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
+    auto direction = static_cast<String^>(parameter);
+    Visibility if_true = (direction == "Inverted") ? Visibility::Collapsed : Visibility::Visible;
+    Visibility if_false = (direction == "Inverted") ? Visibility::Visible : Visibility::Collapsed;
+
     auto callStatus = static_cast<CallStatus>(value);
 
     if (callStatus == CallStatus::INCOMING_RINGING) {
-        return  Windows::UI::Xaml::Visibility::Visible;
+        return  if_true;
     }
     else {
-        return  Windows::UI::Xaml::Visibility::Collapsed;
+        return  if_false;
     }
 }
 
-Object ^ RingClientUWP::Views::CallStatusForIncomingCallAnimatedEllipse::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+Object ^ RingClientUWP::Views::CallStatusForIncomingCallEllipse::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
     throw ref new Platform::NotImplementedException();
 }
 
-RingClientUWP::Views::CallStatusForIncomingCallAnimatedEllipse::CallStatusForIncomingCallAnimatedEllipse()
-{}
-
-Object ^ RingClientUWP::Views::CallStatusForIncomingCallStaticEllipse::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    auto callStatus = static_cast<CallStatus>(value);
-
-    if (callStatus == CallStatus::INCOMING_RINGING) {
-        return  Windows::UI::Xaml::Visibility::Collapsed;
-    }
-    else {
-        return  Windows::UI::Xaml::Visibility::Visible;
+void
+SmartPanel::addToContactList(String^ name)
+{
+    // invalidate temporary contact item creation early for poorly formatted searches
+    static const std::regex RINGID_VALIDATOR("[0-9a-f]{40}");
+    static const std::regex NAME_VALIDATOR{ "^[a-zA-Z0-9-_]{3,32}$" };
+    auto isUsername = std::regex_match(Utils::toString(name), NAME_VALIDATOR);
+    auto isRingId = std::regex_match(Utils::toString(name), RINGID_VALIDATOR);
+    if (!(isUsername || isRingId)) {
+        ringTxtBxPlaceHolderDelay(ResourceMananger::instance->getStringResource("_contactsUsernameInvalid_"), 5000);
+        return;
     }
-}
-
-Object ^ RingClientUWP::Views::CallStatusForIncomingCallStaticEllipse::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    throw ref new Platform::NotImplementedException();
-}
 
-RingClientUWP::Views::CallStatusForIncomingCallStaticEllipse::CallStatusForIncomingCallStaticEllipse()
-{}
+    auto selectedAccountId = AccountListItemsViewModel::instance->getSelectedAccountId();
 
+    auto account = AccountsViewModel::instance->findItem(selectedAccountId);
+    auto hasInternet = Utils::hasInternet();
+    if (account->accountType_ == "RING" && (!hasInternet || account->_registrationState != RegistrationState::REGISTERED)) {
+        auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+        ringTxtBxPlaceHolderDelay(loader->GetString("_accountNotRegistered_"), 5000);
+        return;
+    }
 
-void RingClientUWP::Views::SmartPanel::_ringTxtBx__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
-{
+    auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(selectedAccountId));
     for (auto item : SmartPanelItemsViewModel::instance->itemsList) {
-        if (item->_contact->_name == _ringTxtBx_->Text || item->_contact->ringID_ == _ringTxtBx_->Text) {
+        if ((item->_contact->_name == name || item->_contact->ringID_ == name) &&
+            selectedAccountId == item->_contact->_accountIdAssociated &&
+            item->_contact->_trustStatus >= TrustStatus::CONTACT_REQUEST_SENT) {
             SmartPanelItemsViewModel::instance->_selectedItem = item;
             summonMessageTextPage();
+            return;
         }
+        else if ((item->_contact->_name == name || item->_contact->ringID_ == name) &&
+                 item->_contact->_trustStatus == TrustStatus::INCOMING_CONTACT_REQUEST) {
+            // In this case, we are potentially attempting to send a trust request to a
+            // peer who has already sent us one. For now we shall just send a trust request,
+            // so they receive our vcard and remove our corresponding contact request control item.
+            /* DRing::acceptTrustRequest(  Utils::toString(item->_contact->_accountIdAssociated),
+                                        Utils::toString(item->_contact->ringID_)); */
+            auto vcard = Configuration::UserPreferences::instance->getVCard();
+            RingD::instance->sendContactRequest(Utils::toString(item->_contact->_accountIdAssociated),
+                                                Utils::toString(item->_contact->ringID_),
+                                                vcard->asString());
+            item->_contact->_trustStatus = TrustStatus::TRUSTED;
+            contactListModel->saveContactsToFile();
 
-        auto selectedAccountId = AccountListItemsViewModel::instance->getSelectedAccountId();
-        auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(selectedAccountId));
-        auto contact = contactListModel->addNewContact(_ringTxtBx_->Text, "", ContactStatus::WAITING_FOR_ACTIVATION);
-        RingD::instance->lookUpName(_ringTxtBx_->Text);
+            auto spi = SmartPanelItemsViewModel::instance->findItem(item->_contact);
+            SmartPanelItemsViewModel::instance->moveItemToTheTop(spi);
+            SmartPanelItemsViewModel::instance->refreshFilteredItemsList();
+            SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem);
 
-        _ringTxtBx_->Text = "";
+            if (auto cri = ContactRequestItemsViewModel::instance->findItem(item->_contact))
+                ContactRequestItemsViewModel::instance->removeItem(cri);
 
-        for (auto item : SmartPanelItemsViewModel::instance->itemsList) {
-            item->_showMe = Windows::UI::Xaml::Visibility::Visible;
+            ContactRequestItemsViewModel::instance->refreshFilteredItemsList();
+            ContactRequestItemsViewModel::instance->update(ViewModel::NotifyStrings::notifyContactRequestItem);
+
+            MSG_("Auto-accepted Contact Request from: " + item->_contact->ringID_);
+            return;
         }
-        return;
+    }
+
+    if (isRingId) {
+        contactListModel->addNewContact(_ringTxtBx_->Text, "", TrustStatus::UNKNOWN, false, ContactStatus::READY);
+        RingD::instance->lookUpAddress(Utils::toString(selectedAccountId), name);
+    }
+    else {
+        contactListModel->addNewContact(_ringTxtBx_->Text, "", TrustStatus::UNKNOWN, false, ContactStatus::WAITING_FOR_ACTIVATION);
+        RingD::instance->lookUpName(Utils::toString(selectedAccountId), name);
     }
 
     for (auto item : SmartPanelItemsViewModel::instance->itemsList) {
-        auto str1 = Utils::toString(item->_contact->_name);
-        auto str2 = Utils::toString(_ringTxtBx_->Text);
+        item->_isVisible = Windows::UI::Xaml::Visibility::Visible;
+    }
+}
 
-        if (str1.find(str2) != std::string::npos)
-            item->_showMe = Windows::UI::Xaml::Visibility::Visible;
-        else
-            item->_showMe = Windows::UI::Xaml::Visibility::Collapsed;
+void RingClientUWP::Views::SmartPanel::_ringTxtBx__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    if (_ringTxtBx_->Text != "") {
+        addToContactList(_ringTxtBx_->Text);
+        _ringTxtBx_->Text = "";
     }
 }
 
+void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
+{
+    if (e->Key == Windows::System::VirtualKey::Enter) {
+        if (_ringTxtBx_->Text != "") {
+            addToContactList(_ringTxtBx_->Text);
+            _ringTxtBx_->Text = "";
+        }
+    }
+}
 
 void RingClientUWP::Views::SmartPanel::_contactsListMenuButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     selectMenu(MenuOpen::CONTACTS_LIST);
 }
 
+void RingClientUWP::Views::SmartPanel::_contactRequestListMenuButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    selectMenu(MenuOpen::CONTACTREQUEST_LIST);
+}
 
 void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     selectMenu(MenuOpen::ACCOUNTS_LIST);
 }
 
-
 void RingClientUWP::Views::SmartPanel::_shareMenuButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
-    selectMenu(MenuOpen::SHARE);
+    auto frame = dynamic_cast<Windows::UI::Xaml::Controls::Frame^>(Window::Current->Content);
+    RingD::instance->raiseShareRequested();
+    showWelcomePage();
+    //selectMenu(MenuOpen::SHARE);
 }
 
-
 void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     selectMenu(MenuOpen::DEVICE);
 
+    _pinGeneratorYes_->IsEnabled = false;
     _passwordForPinGenerator_->Password = "";
     // refacto : do something better...
-    _waitingAndResult_->Text = "Exporting account on the Ring...";
+    auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+    _waitingAndResult_->Text = loader->GetString("_accountsWaitingAndResult_.Text");
 
     _waitingDevicesList_->Visibility = Windows::UI::Xaml::Visibility::Visible;
     _devicesIdList_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
@@ -1934,15 +2109,30 @@ void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Click(Platform::Objec
     auto account = AccountListItemsViewModel::instance->_selectedItem->_account;
 
     _deviceId_->Text = account->_deviceId;
+    _deviceName_->Text = account->_deviceName;
     if (_deviceId_->Text->IsEmpty()) {
-        _deviceId_->Text = "No device id found!";
+        _deviceId_->Text = loader->GetString("_accountsNoDeviceId_");
         ERR_("device Id not found for account " + Utils::toString(account->_deviceId));
     }
 
-    RingD::instance->askToRefreshKnownDevices(account->accountID_);
-
+    RingD::instance->getKnownDevices(account->accountID_);
 }
 
+void
+SmartPanel::showWelcomePage()
+{
+    if (menuOpen == MenuOpen::SETTINGS)
+        selectMenu(MenuOpen::CONTACTS_LIST);
+
+    // de-select item from Listbox only
+    _smartList_->SelectedIndex = -1;
+
+    if (SmartPanelItemsViewModel::instance->_selectedItem) {
+        SmartPanelItemsViewModel::instance->_selectedItem = nullptr;
+    }
+
+    summonWelcomePage();
+}
 
 void RingClientUWP::Views::SmartPanel::_settingsMenuButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
@@ -1951,12 +2141,17 @@ void RingClientUWP::Views::SmartPanel::_settingsMenuButton__Click(Platform::Obje
 
 void RingClientUWP::Views::SmartPanel::_passwordForPinGenerator__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
 {
-    if (e->Key == Windows::System::VirtualKey::Enter)
+    bool isPasswordValid = (_passwordForPinGenerator_->Password->IsEmpty()) ? false : true;
+    _pinGeneratorYes_->IsEnabled = isPasswordValid;
+
+    if (e->Key == Windows::System::VirtualKey::Enter && isPasswordValid)
         requestPin();
 }
 
 void RingClientUWP::Views::SmartPanel::requestPin()
 {
+    RingD::instance->showLoadingOverlay(ResourceMananger::instance->getStringResource("_m_generating_pin_"), SuccessColor);
+
     _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _waitingForPin_->Visibility = Windows::UI::Xaml::Visibility::Visible;
 
@@ -1969,3 +2164,589 @@ void RingClientUWP::Views::SmartPanel::requestPin()
 
     RingD::instance->askToExportOnRing(accountId, password);
 }
+
+void
+SmartPanel::ContactRequestItem_Grid_PointerReleased(Platform::Object ^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ e)
+{
+    return;
+}
+
+void
+SmartPanel::ContactRequestItem_Grid_PointerEntered(Platform::Object ^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ e)
+{
+    return;
+}
+
+void
+SmartPanel::ContactRequestItem_Grid_PointerExited(Platform::Object ^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ e)
+{
+    return;
+}
+
+void
+SmartPanel::ContactRequestItem_Grid_PointerMoved(Platform::Object ^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ e)
+{
+    return;
+}
+
+
+void
+SmartPanel::_acceptContactRequestBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    if (Utils::hasInternet()) {
+        auto button = dynamic_cast<Button^>(e->OriginalSource);
+        if (button) {
+            auto item = dynamic_cast<ContactRequestItem^>(button->DataContext);
+            if (item) {
+                auto contact = item->_contact;
+                auto accountId = contact->_accountIdAssociated;
+                if (auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(accountId))) {
+                    DRing::acceptTrustRequest(Utils::toString(accountId), Utils::toString(contact->ringID_));
+                    contact->_trustStatus = TrustStatus::TRUSTED;
+                    contactListModel->saveContactsToFile();
+
+                    auto spi = SmartPanelItemsViewModel::instance->findItem(contact);
+                    SmartPanelItemsViewModel::instance->moveItemToTheTop(spi);
+
+                    ContactRequestItemsViewModel::instance->removeItem(item);
+
+                    updateNotificationsState();
+
+                    MSG_("Accepted Contact Request from: " + contact->ringID_);
+                }
+            }
+        }
+    }
+}
+
+void
+SmartPanel::_rejectContactRequestBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    if (Utils::hasInternet()) {
+        auto button = dynamic_cast<Button^>(e->OriginalSource);
+        if (button) {
+            auto item = dynamic_cast<ContactRequestItem^>(button->DataContext);
+            if (item) {
+                auto contact = item->_contact;
+                auto accountId = contact->_accountIdAssociated;
+                if (auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(accountId))) {
+                    DRing::discardTrustRequest(Utils::toString(accountId), Utils::toString(contact->ringID_));
+                    contactListModel->deleteContact(contact);
+                    contactListModel->saveContactsToFile();
+
+                    ContactRequestItemsViewModel::instance->removeItem(item);
+
+                    updateNotificationsState();
+
+                    MSG_("Discarded Contact Request from: " + contact->ringID_);
+                }
+            }
+        }
+    }
+}
+
+void
+SmartPanel::_blockContactBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    if (Utils::hasInternet()) {
+        auto button = dynamic_cast<Button^>(e->OriginalSource);
+        if (button) {
+            auto item = dynamic_cast<ContactRequestItem^>(button->DataContext);
+            if (item) {
+                auto contact = item->_contact;
+                auto accountId = contact->_accountIdAssociated;
+                if (auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(accountId))) {
+                    DRing::removeContact(Utils::toString(accountId), Utils::toString(contact->ringID_), true);
+
+                    contact->_trustStatus = TrustStatus::BLOCKED;
+                    contactListModel->saveContactsToFile();
+
+                    ContactRequestItemsViewModel::instance->removeItem(item);
+
+                    updateNotificationsState();
+
+                    MSG_("Blocked Contact with ringId: " + contact->ringID_);
+                }
+            }
+        }
+    }
+}
+
+void
+SmartPanel::OnnewBuddyNotification(const std::string& accountId, const std::string& address, int status)
+{
+    for (auto account : AccountsViewModel::instance->accountsList) {
+        auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(account->accountID_));
+        for (auto contact : contactListModel->_contactsList)
+            if (contact->ringID_ == Utils::toPlatformString(address))
+                contact->_presenceStatus = status;
+    }
+}
+
+Object^
+ContactAccountTypeToVisibility::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto contact = static_cast<Contact^>(value);
+    auto parameterString = static_cast<String^>(parameter);
+    auto associatedAccount = AccountsViewModel::instance->findItem(contact->_accountIdAssociated);
+    if (associatedAccount->accountType_ == parameterString)
+        return VIS::Visible;
+    return VIS::Collapsed;
+}
+
+Object^
+ContactConferenceableToVisibility::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
+{
+    // Hide the option until more or less fully functional
+    return VIS::Collapsed;
+
+    auto contact = static_cast<Contact^>(value);
+    if (SmartPanelItemsViewModel::instance->isInCall()) {
+        auto selectedItem = SmartPanelItemsViewModel::instance->_selectedItem;
+        if (contact != selectedItem->_contact) {
+            return VIS::Visible;
+        }
+    }
+    return VIS::Collapsed;
+}
+
+Object^
+CachedImageConverter::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto path = static_cast<String^>(value);
+    if (path == nullptr)
+        return nullptr;
+    return RingClientUWP::ResourceMananger::instance->imageFromRelativePath(path);
+}
+
+Object^
+NameToInitialConverter::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto name = static_cast<String^>(value);
+    return Utils::getUpperInitial(name);
+}
+
+Object^
+HasAvatarToVisibility::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto contact = static_cast<Contact^>(value);
+    auto parameterString = static_cast<String^>(parameter);
+    auto positiveResult = parameterString != "Inverted" ? VIS::Visible : VIS::Collapsed;
+    auto negtiveResult = parameterString != "Inverted" ? VIS::Collapsed : VIS::Visible;
+    return contact->_avatarImage != L" " ? positiveResult : negtiveResult;
+}
+
+Object^
+AccountRegistrationStateToString::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto account = static_cast<Account^>(value);
+    auto registrationState = account->_registrationState;
+
+    if (account->accountType_ == "SIP")
+        return "Ready";
+
+    if (registrationState == RegistrationState::REGISTERED) {
+        return "Online";
+    }
+    return "Offline";
+}
+
+Object^
+AccountRegistrationStateToForeground::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto account = static_cast<Account^>(value);
+    auto registrationState = account->_registrationState;
+
+    if (registrationState == RegistrationState::REGISTERED || account->accountType_ == "SIP") {
+        return ref new SolidColorBrush(Utils::ColorFromString(SuccessColor));
+    }
+    return ref new SolidColorBrush(Utils::ColorFromString(ErrorColor));
+}
+
+// This converter will be used to determine the visibility of the
+// message bubble spikes.
+Object^
+MessageChainBreakToVisibility::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
+{
+    if (SmartPanelItemsViewModel::instance->_selectedItem) {
+        auto msgIndex = static_cast<int>(value);
+        auto messages = SmartPanelItemsViewModel::instance->_selectedItem->_contact->_conversation->_messages;
+
+        if (!messages->Size)
+            return VIS::Collapsed;
+
+        auto message = messages->GetAt(msgIndex);
+        auto parameterString = static_cast<String^>(parameter);
+
+        if (parameterString == "First") {
+            // The converter is being used to determine if this message is the first
+            // of a series. If it is the first message of the chain, return visible,
+            // otherwise, return collapsed.
+            bool isFirstofSequence = false;
+            if (messages->Size) {
+                if (msgIndex == 0) {
+                    isFirstofSequence = true;
+                }
+                else {
+                    auto previousMessage = messages->GetAt(msgIndex - 1);
+                    if (message->FromContact != previousMessage->FromContact)
+                        isFirstofSequence = true;
+                }
+            }
+            if (isFirstofSequence)
+                return VIS::Visible;
+        }
+        else if (parameterString == "Last") {
+            // The converter is being used to determine if this message is the last
+            // of a series. If it is the last message of the chain, return visible,
+            // otherwise, return collapsed.
+            bool isLastofSequence = false;
+            if (msgIndex < messages->Size) {
+                if (msgIndex == messages->Size - 1) {
+                    isLastofSequence = true;
+                }
+                else {
+                    auto nextMessage = messages->GetAt(msgIndex + 1);
+                    if (message->FromContact != nextMessage->FromContact)
+                        isLastofSequence = true;
+                }
+            }
+            if (isLastofSequence)
+                return VIS::Visible;
+        }
+    }
+
+    return VIS::Collapsed;
+}
+
+// This converter is being used to determine if this message is the last
+// of a series. If it is the last message of the chain, return a positive
+// GridLength otherwise, return a GridLength of 0.
+Object^
+MessageChainBreakToHeight::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
+{
+    if (SmartPanelItemsViewModel::instance->_selectedItem) {
+        auto msgIndex = static_cast<int>(value);
+        auto messages = SmartPanelItemsViewModel::instance->_selectedItem->_contact->_conversation->_messages;
+        if (!messages->Size)
+            return GridLength(0.0);
+
+        auto message = messages->GetAt(msgIndex);
+
+        // If this is the last message in the list, then make it visible by returning
+        // a positive GridLength
+        bool isLastofSequence = false;
+        if (msgIndex < messages->Size) {
+            if (msgIndex == messages->Size - 1) {
+                isLastofSequence = true;
+            }
+            else {
+                auto nextMessage = messages->GetAt(msgIndex + 1);
+                if (message->FromContact != nextMessage->FromContact)
+                    isLastofSequence = true;
+            }
+        }
+        if (isLastofSequence)
+            return GridLength(14.0);
+    }
+
+    return GridLength(0.0);
+}
+
+Object^
+MessageDateTimeString::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
+{
+    if (SmartPanelItemsViewModel::instance->_selectedItem) {
+        auto msgIndex = static_cast<int>(value);
+        auto messages = SmartPanelItemsViewModel::instance->_selectedItem->_contact->_conversation->_messages;
+        if (!messages->Size)
+            return "Now";
+
+        auto message = messages->GetAt(msgIndex);
+
+        bool isLastofSequence = false;
+        if (msgIndex < messages->Size) {
+            if (msgIndex == messages->Size - 1) {
+                isLastofSequence = true;
+            }
+            else {
+                auto nextMessage = messages->GetAt(msgIndex + 1);
+                if (message->FromContact != nextMessage->FromContact)
+                    isLastofSequence = true;
+            }
+        }
+
+        if (message && isLastofSequence) {
+            auto messageDateTime = Utils::time::epochToDateTime(message->TimeReceived);
+            auto currentDateTime = Utils::time::currentDateTime();
+            auto currentDay = Utils::time::dateTimeToString(currentDateTime, "shortdate");
+            auto messageDay = Utils::time::dateTimeToString(messageDateTime, "shortdate");
+            if (messageDay != currentDay)
+                return Utils::time::dateTimeToString(messageDateTime, "dayofweek");
+            else if (Utils::time::currentTimestamp() - message->TimeReceived > 60)
+                return Utils::time::dateTimeToString(messageDateTime, "hour minute");
+        }
+    }
+    return "Now";
+}
+
+Object^
+PresenceStatus::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto parameterString = static_cast<String^>(parameter);
+    auto presenceStatus = static_cast<int>(value);
+
+    auto offlineColor = ref new SolidColorBrush(Utils::ColorFromString("#00000000"));
+    SolidColorBrush^ onlineColor;
+
+    if (parameterString == "Border") {
+        onlineColor = ref new SolidColorBrush(Utils::ColorFromString("#ffffffff"));
+    }
+    else
+        onlineColor = ref new SolidColorBrush(Utils::ColorFromString(SuccessColor));
+
+    return presenceStatus <= 0 ? offlineColor : onlineColor;
+}
+
+void
+SmartPanel::_smartList__GotFocus(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    auto frame = dynamic_cast<Windows::UI::Xaml::Controls::Frame^>(Window::Current->Content);
+    dynamic_cast<RingClientUWP::MainPage^>(frame->Content)->focusOnMessagingTextbox();
+}
+
+void
+SmartPanel::_showBannedList__PointerPressed(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
+{
+    if (_bannedContactListGrid_->Visibility == VIS::Collapsed) {
+        setBannedListState(true);
+    }
+    else {
+        setBannedListState(false);
+    }
+}
+
+void
+SmartPanel::setBannedListState(bool visible)
+{
+    if (visible) {
+        _bannedContactListGrid_->Visibility = VIS::Visible;
+        _accountsShowBannedList_->Content = ResourceMananger::instance->getStringResource("_accountsHideBannedList_");
+        _scrollViewerEditionMenu_->UpdateLayout();
+        _scrollViewerEditionMenu_->ScrollToVerticalOffset(_scrollViewerEditionMenu_->ScrollableHeight);
+    }
+    else {
+        _bannedContactListGrid_->Visibility = VIS::Collapsed;
+        _accountsShowBannedList_->Content = ResourceMananger::instance->getStringResource("_accountsShowBannedList_");
+    }
+}
+
+void RingClientUWP::Views::SmartPanel::_addBannedContactBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    auto button = dynamic_cast<Button^>(e->OriginalSource);
+    if (button) {
+        auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
+        if (item) {
+            auto contact = item->_contact;
+            auto accountId = contact->_accountIdAssociated;
+            if (auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(accountId))) {
+                DRing::addContact(Utils::toString(accountId), Utils::toString(contact->ringID_));
+
+                contact->_trustStatus = TrustStatus::TRUSTED;
+                contactListModel->saveContactsToFile();
+
+                updateNotificationsState();
+
+                MSG_("Added blocked contact to contacts with ringId: " + contact->ringID_);
+            }
+        }
+    }
+}
+
+
+void
+SmartPanel::SmartPanelItem_Grid_RightTapped(Platform::Object^ sender, Windows::UI::Xaml::Input::RightTappedRoutedEventArgs^ e)
+{
+    auto grid = static_cast<Grid^>(sender);
+    auto item = static_cast<SmartPanelItem^>(grid->DataContext);
+    if (_smartList_->SelectedIndex == -1) {
+        // if no item is already selected, select the one right tapped
+        _smartList_->SelectedIndex = SmartPanelItemsViewModel::instance->getFilteredIndex(item->_contact);
+        item->_isSelected = true;
+    }
+    auto flyoutOwner = static_cast<FrameworkElement^>(sender);
+    auto menuFlyout = static_cast<MenuFlyout^>(FlyoutBase::GetAttachedFlyout(flyoutOwner));
+    auto videoCallButton = menuFlyout->Items->GetAt(0);
+    videoCallButton->Visibility = item->_isCallable ? VIS::Visible : VIS::Collapsed;
+    FlyoutBase::ShowAttachedFlyout(flyoutOwner);
+}
+
+
+void RingClientUWP::Views::SmartPanel::_videocall_MenuFlyoutItem_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
+{
+    auto item = static_cast<SmartPanelItem^>(static_cast<MenuFlyoutItem^>(sender)->DataContext);
+    placeCall(item);
+}
+
+void RingClientUWP::Views::SmartPanel::SmartPanelItem_Grid_DoubleTapped(Platform::Object^ sender, Windows::UI::Xaml::Input::DoubleTappedRoutedEventArgs^ e)
+{
+    auto grid = static_cast<Grid^>(sender);
+    auto item = static_cast<SmartPanelItem^>(grid->DataContext);
+    placeCall(item);
+    auto index = SmartPanelItemsViewModel::instance->getFilteredIndex(item->_contact);
+    _smartList_->SelectedIndex = index;
+    SmartPanelItemsViewModel::instance->_selectedItem = item;
+}
+
+void RingClientUWP::Views::SmartPanel::_addToConference_MenuFlyoutItem__Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
+{
+    auto item = static_cast<SmartPanelItem^>(static_cast<MenuFlyoutItem^>(sender)->DataContext);
+    auto selectedAccount = AccountListItemsViewModel::instance->_selectedItem->_account;
+    auto selectedAccountId = selectedAccount->accountID_;
+    std::vector<std::string> participantList;
+    String^ prefix = selectedAccount->accountType_ == "RING" ? "ring:" : "";
+    auto selectedItem = SmartPanelItemsViewModel::instance->_selectedItem;
+    participantList.emplace_back(Utils::toString(prefix + selectedItem->_contact->ringID_ + "," + selectedAccountId));
+    participantList.emplace_back(Utils::toString(prefix + item->_contact->ringID_ + "," + selectedAccountId));
+    DRing::createConfFromParticipantList(participantList);
+}
+
+
+void RingClientUWP::Views::SmartPanel::_copyRingID_MenuFlyoutItem__Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
+{
+    auto item = static_cast<SmartPanelItem^>(static_cast<MenuFlyoutItem^>(sender)->DataContext);
+    DataPackage^ dataPackage = ref new DataPackage();
+    dataPackage->SetText(item->_contact->ringID_);
+    Clipboard::SetContent(dataPackage);
+}
+
+
+void
+SmartPanel::_revokeDeviceButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    auto button = static_cast<Button^>(sender);
+    auto deviceItem = static_cast<RingDeviceItem^>(button->DataContext);
+
+    auto stackPanel = ref new StackPanel();
+    stackPanel->Orientation = Orientation::Vertical;
+    auto textBlock = ref new TextBlock();
+    textBlock->HorizontalAlignment = Windows::UI::Xaml::HorizontalAlignment::Center;
+    textBlock->FontSize = 14;
+    textBlock->Text = "Please enter your account password";
+    auto passwordBox = ref new PasswordBox();
+    passwordBox->PlaceholderText = "Password";
+    passwordBox->Height = 32;
+    passwordBox->Margin = Windows::UI::Xaml::Thickness(0.0, 20.0, 0.0, 0.0);
+    stackPanel->Children->Append(textBlock);
+    stackPanel->Children->Append(passwordBox);
+    auto dialog = ref new ContentDialog();
+    dialog->Content = stackPanel;
+    dialog->Title = "";
+    dialog->IsSecondaryButtonEnabled = true;
+    dialog->PrimaryButtonText = "Ok";
+    dialog->SecondaryButtonText = "Cancel";
+
+    create_task(dialog->ShowAsync())
+        .then([=](task<ContentDialogResult> dialogTask) {
+        try {
+            auto result = dialogTask.get();
+            if (result == ContentDialogResult::Primary) {
+                auto accountId = Utils::toString(AccountListItemsViewModel::instance->getSelectedAccountId());
+                auto password = Utils::toString(passwordBox->Password);
+                auto deviceId = Utils::toString(deviceItem->_deviceId);
+                RingD::instance->revokeDevice(accountId, password, deviceId);
+            }
+            else {
+                MSG_("revoking device cancelled");
+            }
+        }
+        catch (Exception^ e) {
+            EXC_(e);
+        }
+    });
+}
+
+
+void RingClientUWP::Views::SmartPanel::_deviceName__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
+{
+    if (e->Key == Windows::System::VirtualKey::Enter) {
+        auto selectedAccount = AccountListItemsViewModel::instance->_selectedItem->_account;
+        if (_deviceName_->Text == "") {
+            _deviceName_->Text = selectedAccount->_deviceName;
+        }
+        else {
+            MSG_("changing device name, (" + selectedAccount->_deviceName + " -> " + _deviceName_->Text + ")");
+            selectedAccount->_deviceName = _deviceName_->Text;
+            RingD::instance->updateAccount(selectedAccount->accountID_);
+        }
+        _deviceName_->IsEnabled = false;
+        _deviceName_->IsEnabled = true;
+    }
+}
+
+
+void RingClientUWP::Views::SmartPanel::_deviceName__LostFocus(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    auto selectedAccount = AccountListItemsViewModel::instance->_selectedItem->_account;
+    _deviceName_->Text = selectedAccount->_deviceName;
+}
+
+
+void RingClientUWP::Views::SmartPanel::_turnEnabledToggle__Toggled(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    auto toggleSwitch = dynamic_cast<ToggleSwitch^>(sender);
+    auto isTurnEnabledToggleOn = toggleSwitch->IsOn;
+    // grey out turn server edit box
+    if (_turnEditionTextBox_)
+        _turnEditionTextBox_->IsEnabled = isTurnEnabledToggleOn;
+}
+
+
+void
+SmartPanel::_deleteAccountButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    auto messageDialog = ref new MessageDialog("Are you sure you want to delete this account?", "Delete Account");
+
+    messageDialog->Commands->Append(ref new UICommand("Cancel", ref new UICommandInvokedHandler([this](IUICommand^ command)
+    {})));
+    messageDialog->Commands->Append(ref new UICommand("Delete", ref new UICommandInvokedHandler([this](IUICommand^ command)
+    {
+        auto accountItem = AccountListItemsViewModel::instance->_selectedItem;
+        auto account = accountItem->_account;
+        auto accountId = account->accountID_;
+
+        RingD::instance->deleteAccount(accountId);
+        AccountListItemsViewModel::instance->removeItem(accountItem);
+    })));
+
+    messageDialog->DefaultCommandIndex = 1;
+
+    messageDialog->ShowAsync();
+}
+
+
+void
+SmartPanel::_removeContact_MenuFlyoutItem__Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
+{
+    if (auto item = static_cast<SmartPanelItem^>(static_cast<MenuFlyoutItem^>(sender)->DataContext)) {
+        auto contact = item->_contact;
+
+        auto messageDialog = ref new MessageDialog("Are you sure you want to remove this contact?", "Remove Contact");
+
+        messageDialog->Commands->Append(ref new UICommand("Cancel", ref new UICommandInvokedHandler([this](IUICommand^ command)
+        {})));
+        messageDialog->Commands->Append(ref new UICommand("Remove", ref new UICommandInvokedHandler([this, item, contact](IUICommand^ command)
+        {
+            RingD::instance->raiseShareRequested();
+            showWelcomePage();
+            String^ accountIdAssociated = SmartPanelItemsViewModel::instance->getAssociatedAccountId(item);
+            if (auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(accountIdAssociated)))
+                contactListModel->deleteContact(contact);
+            SmartPanelItemsViewModel::instance->removeItem(item);
+        })));
+
+        messageDialog->DefaultCommandIndex = 1;
+
+        messageDialog->ShowAsync();
+    }
+}
diff --git a/SmartPanel.xaml.h b/SmartPanel.xaml.h
index 68c927ed5d4a8684ea01a5d634ec4a4fadca104d..83f3e7394d9c1924a96e25790e53080e8715ff5c 100644
--- a/SmartPanel.xaml.h
+++ b/SmartPanel.xaml.h
@@ -1,7 +1,7 @@
-#pragma once
-/**************************************************************************
+/**************************************************************************
 * Copyright (C) 2016 by Savoir-faire Linux                                *
 * Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com>              *
+* Author: Traczyk Andreas <andreas.traczyk@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    *
@@ -16,12 +16,17 @@
 * 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 "SmartPanel.g.h"
 
+#include <regex>
+
 using namespace Windows::UI::Xaml;
 using namespace Windows::UI::Xaml::Controls;
 using namespace Windows::UI::Xaml::Input;
 using namespace Windows::UI::Xaml::Interop;
+using namespace Windows::UI::Xaml::Documents;
 
 namespace RingClientUWP
 {
@@ -36,6 +41,96 @@ delegate void HidePreviewPage();
 namespace Views
 {
 
+public ref class ContactAccountTypeToVisibility sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    ContactAccountTypeToVisibility() {};
+};
+
+public ref class ContactConferenceableToVisibility sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    ContactConferenceableToVisibility() {};
+};
+
+public ref class CachedImageConverter sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    CachedImageConverter() {};
+};
+
+public ref class NameToInitialConverter sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    NameToInitialConverter() {};
+};
+
+public ref class HasAvatarToVisibility sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    HasAvatarToVisibility() {};
+};
+
+public ref class AccountRegistrationStateToString sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    AccountRegistrationStateToString() {};
+};
+
+public ref class AccountRegistrationStateToForeground sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    AccountRegistrationStateToForeground() {};
+};
+
+public ref class MessageChainBreakToVisibility sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    MessageChainBreakToVisibility() {};
+};
+
+public ref class MessageChainBreakToHeight sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    MessageChainBreakToHeight() {};
+};
+
+public ref class MessageDateTimeString sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    MessageDateTimeString() {};
+};
+
 public ref class IncomingVisibility sealed : IValueConverter {
 public:
     virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
@@ -43,6 +138,15 @@ public:
     IncomingVisibility();
 };
 
+public ref class PresenceStatus sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    PresenceStatus() {};
+};
+
 public ref class OutGoingVisibility sealed : IValueConverter {
 public:
     virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
@@ -64,6 +168,15 @@ public:
     AccountTypeToSourceImage();
 };
 
+public ref class RingAccountTypeToVisibility sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    }
+    RingAccountTypeToVisibility() {};
+};
+
 public ref class AccountSelectedToVisibility sealed : IValueConverter {
 public:
     virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
@@ -71,11 +184,22 @@ public:
     AccountSelectedToVisibility();
 };
 
-public ref class NewMessageBubleNotification sealed : IValueConverter {
+public ref class NewMessageNotificationToNumber sealed : IValueConverter {
 public:
     virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
-    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language);
-    NewMessageBubleNotification();
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    NewMessageNotificationToNumber() {};
+};
+
+public ref class NewMessageBubbleNotification sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    NewMessageBubbleNotification() {};
 };
 
 public ref class CollapseEmptyString sealed : IValueConverter {
@@ -117,6 +241,15 @@ public:
     OneToVisibility() {};
 };
 
+public ref class UnreadAccountNotificationsString sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    UnreadAccountNotificationsString() {};
+};
+
 public ref class MoreThanOneToVisibility sealed : IValueConverter {
 public:
     virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
@@ -126,34 +259,54 @@ public:
     MoreThanOneToVisibility() {};
 };
 
-public ref class SelectedAccountToVisibility sealed : IValueConverter {
+public ref class MoreThanZeroToVisibility sealed : IValueConverter {
 public:
     virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
     virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
         return nullptr;
     };
-    SelectedAccountToVisibility() {};
+    MoreThanZeroToVisibility() {};
 };
 
-public ref class CallStatusToSpinnerVisibility sealed : IValueConverter {
+public ref class PartialTrustToVisibility sealed : IValueConverter {
 public:
     virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
-    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language);
-    CallStatusToSpinnerVisibility();
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    PartialTrustToVisibility() {};
+};
+
+public ref class TrustedToVisibility sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    TrustedToVisibility() {};
+};
+
+public ref class SelectedAccountToVisibility sealed : IValueConverter {
+public:
+    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
+    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
+        return nullptr;
+    };
+    SelectedAccountToVisibility() {};
 };
 
-public ref class CallStatusForIncomingCallAnimatedEllipse sealed : IValueConverter {
+public ref class CallStatusToSpinnerVisibility sealed : IValueConverter {
 public:
     virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
     virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language);
-    CallStatusForIncomingCallAnimatedEllipse();
+    CallStatusToSpinnerVisibility();
 };
 
-public ref class CallStatusForIncomingCallStaticEllipse sealed : IValueConverter {
+public ref class CallStatusForIncomingCallEllipse sealed : IValueConverter {
 public:
     virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
     virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language);
-    CallStatusForIncomingCallStaticEllipse();
+    CallStatusForIncomingCallEllipse() {};
 };
 
 
@@ -176,6 +329,7 @@ internal:
 private:
     enum class MenuOpen {
         CONTACTS_LIST,
+        CONTACTREQUEST_LIST,
         ACCOUNTS_LIST,
         SHARE,
         DEVICE,
@@ -183,18 +337,18 @@ private:
     } menuOpen;
 
     /* functions */
+    void setBannedListState(bool visible);
     void _addAccountBtn__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _createAccountYes__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _createAccountNo__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _smartList__SelectionChanged(Platform::Object^ sender, SelectionChangedEventArgs^ e);
     void _accountList__SelectionChanged(Platform::Object^ sender, SelectionChangedEventArgs^ e);
-    void _ringTxtBx__Click(Platform::Object^ sender, KeyRoutedEventArgs^ e);
     void _rejectIncomingCallBtn__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _acceptIncomingCallBtn__Click(Platform::Object^ sender, RoutedEventArgs^ e);
-    void _callContact__Click(Platform::Object^ sender, RoutedEventArgs^ e);
+    void _callBtn__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _cancelCallBtn__Click(Platform::Object^ sender, RoutedEventArgs^ e);
-    void Grid_PointerEntered(Platform::Object^ sender, PointerRoutedEventArgs^ e);
-    void Grid_PointerExited(Platform::Object^ sender, PointerRoutedEventArgs^ e);
+    void SmartPanelItem_Grid_PointerEntered(Platform::Object^ sender, PointerRoutedEventArgs^ e);
+    void SmartPanelItem_Grid_PointerExited(Platform::Object^ sender, PointerRoutedEventArgs^ e);
     void generateQRcode();
     void _videoDeviceComboBox__SelectionChanged(Platform::Object^ sender, RoutedEventArgs^);
     void _videoResolutionComboBox__SelectionChanged(Platform::Object^ sender, RoutedEventArgs^);
@@ -207,13 +361,15 @@ private:
     void ringTxtBxPlaceHolderDelay(String^ placeHolderText, int delayInMilliSeconds);
     void showLinkThisDeviceStep1();
     void OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code);
+    void addToContactList(String^ name);
+    void undoListBoxDeselection(ListBox^ listBox, SelectionChangedEventArgs^ e);
+    void placeCall(SmartPanelItem^ item);
     void _addDevice__Click(Platform::Object^ sender, RoutedEventArgs^ e);
-    void OndevicesListRefreshed(Platform::Collections::Vector<Platform::String ^, std::equal_to<Platform::String ^>, true> ^devicesList);
+    void OndevicesListRefreshed(Map<String^, String^>^ deviceMap);
     void _pinGeneratorYes__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _pinGeneratorNo__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void OnexportOnRingEnded(Platform::String ^accountId, Platform::String ^pin);
     void _closePin__Click(Platform::Object^ sender, RoutedEventArgs^ e);
-    void _shareMenuDone__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _editAccountMenuButton__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _acceptAccountModification__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _cancelAccountModification__Click(Platform::Object^ sender, RoutedEventArgs^ e);
@@ -226,13 +382,12 @@ private:
     void _selectedAccountAvatarContainer__PointerReleased(Platform::Object^ sender, PointerRoutedEventArgs^ e);
     void _selectedAccountAvatarContainer__PointerExited(Platform::Object^ sender, PointerRoutedEventArgs^ e);
     void _smartList__PointerExited(Platform::Object^ sender, PointerRoutedEventArgs^ e);
-    void Grid_PointerMoved(Platform::Object^ sender, PointerRoutedEventArgs^ e);
+    void SmartPanelItem_Grid_PointerMoved(Platform::Object^ sender, PointerRoutedEventArgs^ e);
     void _registerOnBlockchainEdition__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _usernameTextBoxEdition__KeyUp(Platform::Object^ sender, KeyRoutedEventArgs^ e);
-    void OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string& address, const std::string& name);
+    void OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string& accountId, const std::string& address, const std::string& name);
     void _RegisterState__Toggled(Platform::Object^ sender, RoutedEventArgs^ e);
     void _usernameTextBox__KeyUp(Platform::Object^ sender, KeyRoutedEventArgs^ e);
-    void _deleteAccountEdition__Toggled(Platform::Object^ sender, RoutedEventArgs^ e);
     void _RegisterStateEdition__Toggled(Platform::Object^ sender, RoutedEventArgs^ e);
     void _ringTxtBx__KeyUp(Platform::Object^ sender, KeyRoutedEventArgs^ e);
     void _linkThisDeviceBtn__Click(Platform::Object^ sender, RoutedEventArgs^ e);
@@ -242,11 +397,16 @@ private:
     void _addAccountYes__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void OnregistrationStateErrorGeneric(const std::string& accountId);
     void _PINTextBox__GotFocus(Platform::Object^ sender, RoutedEventArgs^ e);
-    void OnregistrationStateRegistered();
+    void OnregistrationStateRegistered(const std::string& accountId);
     void OncallPlaced(Platform::String ^callId);
-    void updateUnreadMessagesState();
+    void OncontactDataModified(Platform::String ^account, Contact^ contact);
+    void OnnewBuddyNotification(const std::string& accountId, const std::string& address, int status);
+    void updateContactNotificationsState(Contact^ contact);
+    void updateNotificationsState();
     void selectMenu(MenuOpen menu);
-    void Grid_PointerReleased(Platform::Object^ sender, PointerRoutedEventArgs^ e);
+    void _addAccountInputValidation__KeyUp(Platform::Object^ sender, RoutedEventArgs^ e);
+    void OnregistrationStateChanged(const std::string& accountId);
+    void updateCallAnimationState(SmartPanelItem^ item, bool state);
     void OnincomingAccountMessage(Platform::String ^accountId, Platform::String ^from, Platform::String ^payload);
     void _ringTxtBx__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _contactsListMenuButton__Click(Platform::Object^ sender, RoutedEventArgs^ e);
@@ -254,8 +414,31 @@ private:
     void _shareMenuButton__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _devicesMenuButton__Click(Platform::Object^ sender, RoutedEventArgs^ e);
     void _settingsMenuButton__Click(Platform::Object^ sender, RoutedEventArgs^ e);
+    void showWelcomePage();
     void _passwordForPinGenerator__KeyUp(Platform::Object^ sender, KeyRoutedEventArgs^ e);
     void requestPin();
+    void ContactRequestItem_Grid_PointerReleased(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+    void ContactRequestItem_Grid_PointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+    void ContactRequestItem_Grid_PointerExited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+    void ContactRequestItem_Grid_PointerMoved(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+    void _contactRequestListMenuButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _acceptContactRequestBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _rejectContactRequestBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _blockContactBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _smartList__GotFocus(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _showBannedList__PointerPressed(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+    void _addBannedContactBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void SmartPanelItem_Grid_RightTapped(Platform::Object^ sender, Windows::UI::Xaml::Input::RightTappedRoutedEventArgs^ e);
+    void _videocall_MenuFlyoutItem_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e);
+    void _addToConference_MenuFlyoutItem__Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e);
+    void _copyRingID_MenuFlyoutItem__Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e);
+    void SmartPanelItem_Grid_DoubleTapped(Platform::Object^ sender, Windows::UI::Xaml::Input::DoubleTappedRoutedEventArgs^ e);
+    void _revokeDeviceButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _deviceName__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
+    void _deviceName__LostFocus(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _turnEnabledToggle__Toggled(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _deleteAccountButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _removeContact_MenuFlyoutItem__Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e);
 };
 }
 }
diff --git a/SmartPanelItem.cpp b/SmartPanelItem.cpp
index eb7131dc1a834919df4d3e134fde76c45f95e28c..2f50388bf174a91b8a5a698aa25b092ad7c26549 100644
--- a/SmartPanelItem.cpp
+++ b/SmartPanelItem.cpp
@@ -46,6 +46,12 @@ SmartPanelItem::muteVideo(bool state)
     RingD::instance->muteVideo(_callId, state);
 }
 
+void
+SmartPanelItem::startCallTimer()
+{
+    call_.callStartTime = std::chrono::steady_clock::now();;
+}
+
 void
 SmartPanelItem::NotifyPropertyChanged(String^ propertyName)
 {
@@ -67,7 +73,7 @@ SmartPanelItem::OncallPlaced(Platform::String ^callId)
 }
 
 void
-SmartPanelItem::notifyPropertyChanged(String^ propertyName)
+SmartPanelItem::raiseNotifyPropertyChanged(String^ propertyName)
 {
     NotifyPropertyChanged(propertyName);
 }
\ No newline at end of file
diff --git a/SmartPanelItem.h b/SmartPanelItem.h
index 56580eefad185cf763d469c5a1f2c64449328379..3c11b1104805c5fbe7c07234b5bea1fb9173a09d 100644
--- a/SmartPanelItem.h
+++ b/SmartPanelItem.h
@@ -23,6 +23,8 @@ using namespace Windows::Data::Json;
 using namespace Windows::UI::Xaml;
 using namespace Windows::UI::Xaml::Data;
 
+#include <chrono>
+
 namespace RingClientUWP
 {
 namespace Controls
@@ -33,11 +35,12 @@ public ref class SmartPanelItem sealed : public INotifyPropertyChanged
 public:
     SmartPanelItem();
 
-    void muteVideo(bool state);
-
-    void notifyPropertyChanged(String^ propertyName);
+    void raiseNotifyPropertyChanged(String^ propertyName);
     virtual event PropertyChangedEventHandler^ PropertyChanged;
 
+    void muteVideo(bool state);
+    void startCallTimer();
+
     property Contact^ _contact {
         Contact^ get() { return contact_; }
         void set(Contact^ value) {
@@ -46,7 +49,27 @@ public:
         }
     };
 
-    property String^ _callId;
+    property String^ _callId {
+        String^ get() {
+            return Utils::toPlatformString(call_.id);
+        }
+        void set(String^ value) {
+            call_.id = Utils::toString(value);
+        }
+    };
+
+    property String^ _callTime {
+        String^ get() {
+            auto duration = std::chrono::steady_clock::now() - call_.callStartTime;
+            auto hours = std::chrono::duration_cast<std::chrono::hours>(duration).count();
+            auto minutes = std::chrono::duration_cast<std::chrono::minutes>(duration).count() - hours * 60;
+            auto seconds = std::chrono::duration_cast<std::chrono::seconds>(duration).count() - minutes * 60;
+            auto hoursString = !hours ? "" : (hours < 10 ? "0" + hours.ToString() : hours.ToString()) + ":";
+            auto minutesString = minutes < 10 ? "0" + minutes.ToString() : minutes.ToString();
+            auto secondsString = seconds < 10 ? "0" + seconds.ToString() : seconds.ToString();
+            return hoursString + minutesString + ":" + secondsString;
+        }
+    };
 
     property CallStatus _callStatus {
         CallStatus get() { return callStatus_; }
@@ -62,11 +85,12 @@ public:
 
     property bool _audioMuted;
 
-    property Visibility _showMe {
-        Visibility get() { return showMe_; }
+    property Visibility _isVisible {
+        Visibility get() { return isVisible_; }
         void set(Visibility value) {
-            showMe_ = value;
-            NotifyPropertyChanged("_showMe");
+            isVisible_ = value;
+            NotifyPropertyChanged("_isVisible");
+            NotifyPropertyChanged("_isCallable");
         }
     }
 
@@ -75,6 +99,7 @@ public:
         void set(bool value) {
             isSelected_ = value;
             NotifyPropertyChanged("_isSelected");
+            NotifyPropertyChanged("_isCallable");
         }
     }
 
@@ -99,13 +124,15 @@ protected:
     void NotifyPropertyChanged(String^ propertyName);
 
 private:
-    Visibility showMe_ = Visibility::Visible;
+    Visibility isVisible_;
+    bool isSelected_;
+    bool isHovered_;
+
     CallStatus callStatus_;
     Contact^ contact_;
     String^ callId_;
+    Call call_;
     bool videoMuted_;
-    bool isSelected_;
-    bool isHovered_;
 
     void OncallPlaced(Platform::String ^callId);
 };
diff --git a/SmartPanelItemsViewModel.cpp b/SmartPanelItemsViewModel.cpp
index 0253e3738a4d7bbb90ba1762d19337ee9b671958..5cc783731bb8e8ed35a3b581f77afb12f39b029c 100644
--- a/SmartPanelItemsViewModel.cpp
+++ b/SmartPanelItemsViewModel.cpp
@@ -20,6 +20,8 @@
 
 #include "SmartPanelItemsViewModel.h"
 
+#include "configurationmanager_interface.h"
+
 using namespace Windows::ApplicationModel::Core;
 using namespace Windows::Data::Json;
 using namespace Windows::Storage;
@@ -34,20 +36,20 @@ using namespace ViewModel;
 SmartPanelItemsViewModel::SmartPanelItemsViewModel()
 {
     itemsList_ = ref new Vector<SmartPanelItem^>();
+    itemsListFiltered_ = ref new Vector<SmartPanelItem^>();
+    itemsListBannedFiltered_ = ref new Vector<SmartPanelItem^>();
+
     RingD::instance->stateChange += ref new RingClientUWP::StateChange(this, &RingClientUWP::ViewModel::SmartPanelItemsViewModel::OnstateChange);
 }
 
 bool
 SmartPanelItemsViewModel::isInCall()
 {
-    bool isInCall = false;
     for (auto item : itemsList) {
-        if (item->_callId && item->_callStatus == CallStatus::IN_PROGRESS) {
-            isInCall = true;
-            break;
-        }
+        if (item->_callId && item->_callStatus == CallStatus::IN_PROGRESS)
+            return true;
     }
-    return isInCall;
+    return false;
 }
 
 SmartPanelItem^
@@ -102,12 +104,28 @@ SmartPanelItemsViewModel::getIndex(Contact^ contact)
     return i;
 }
 
+unsigned int
+SmartPanelItemsViewModel::getFilteredIndex(Contact^ contact)
+{
+    unsigned int i;
+    for (i = 0; i < itemsList_->Size; i++) {
+        if (itemsListFiltered_->GetAt(i)->_contact == contact)
+            break;
+    }
+    return i;
+}
+
 void RingClientUWP::ViewModel::SmartPanelItemsViewModel::removeItem(SmartPanelItem ^ item)
 {
     unsigned int index;
 
-    if (itemsList->IndexOf(item, &index))
+    if (itemsList->IndexOf(item, &index)) {
         itemsList->RemoveAt(index);
+
+        if (itemsListFiltered->IndexOf(item, &index)) {
+            itemsListFiltered->RemoveAt(index);
+        }
+    }
 }
 
 void RingClientUWP::ViewModel::SmartPanelItemsViewModel::moveItemToTheTop(SmartPanelItem ^ item)
@@ -127,6 +145,12 @@ void RingClientUWP::ViewModel::SmartPanelItemsViewModel::moveItemToTheTop(SmartP
 
                 itemsList->RemoveAt(spi_index);
                 itemsList->InsertAt(0, item);
+            }
+        }
+        if (itemsListFiltered->IndexOf(item, &spi_index)) {
+            if (spi_index != 0) {
+                itemsListFiltered->RemoveAt(spi_index);
+                itemsListFiltered->InsertAt(0, item);
                 item->_isHovered = false;
             }
         }
@@ -149,17 +173,23 @@ void RingClientUWP::ViewModel::SmartPanelItemsViewModel::OnstateChange(Platform:
     auto timestampFormatter = ref new DateTimeFormatter("day month year hour minute second");
 
     switch (state) {
+    case CallStatus::NONE:
+    {
+        break;
+    }
     case CallStatus::ENDED:
     {
         item->_contact->_lastTime = "Last call : " + timestampFormatter->Format(dateTime) + ".";
         String^ accountIdAssociated = getAssociatedAccountId(item);
         if (auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(accountIdAssociated)))
             contactListModel->saveContactsToFile();
+        refreshFilteredItemsList();
         break;
     }
     case CallStatus::IN_PROGRESS:
     {
         item->_contact->_lastTime = "in progress.";
+        item->startCallTimer();
         break;
     }
     case CallStatus::PEER_PAUSED:
@@ -181,6 +211,11 @@ void RingClientUWP::ViewModel::SmartPanelItemsViewModel::OnstateChange(Platform:
     }
     case CallStatus::INCOMING_RINGING:
         item->_contact->_lastTime = "incoming call from " + item->_contact->_name + ".";
+        refreshFilteredItemsList();
+        break;
+    case CallStatus::AUTO_ANSWERING:
+        item->_contact->_lastTime = "in progress.";
+        refreshFilteredItemsList();
         break;
     default:
         break;
@@ -197,10 +232,68 @@ SmartPanelItemsViewModel::getAssociatedAccountId(SmartPanelItem^ item)
 }
 
 void
-SmartPanelItemsViewModel::update()
+SmartPanelItemsViewModel::update(const std::vector<std::string>& properties)
 {
-    for each (SmartPanelItem^ item in itemsList) {
-        item->notifyPropertyChanged("");
-        item->_contact->notifyPropertyChanged("");
+    for each (SmartPanelItem^ item in itemsListFiltered_) {
+        for each (std::string prop in properties) {
+            item->raiseNotifyPropertyChanged(Utils::toPlatformString(prop));
+            item->_contact->raiseNotifyPropertyChanged(Utils::toPlatformString(prop));
+        }
     }
-}
+}
+
+void
+SmartPanelItemsViewModel::refreshFilteredItemsList()
+{
+    auto selectedAccountId = AccountListItemsViewModel::instance->getSelectedAccountId();
+
+    std::for_each(begin(itemsList_), end(itemsList_),
+        [selectedAccountId, this](SmartPanelItem^ item) {
+        static unsigned spi_index;
+        auto isInList = itemsListFiltered->IndexOf(item, &spi_index);
+        auto isCall = ( item->_callStatus != CallStatus::NONE &&
+                        item->_callStatus != CallStatus::ENDED ) ? true : false;
+        auto account = AccountsViewModel::instance->findItem(item->_contact->_accountIdAssociated);
+        // 1. Filters out non-account contacts that are NOT incoming calls
+        // 2. Filters out account contacts that don't trust us yet
+        if ((item->_contact->_accountIdAssociated == selectedAccountId || isCall) &&
+            (item->_contact->_isTrusted ||
+            (account->_dhtPublicInCalls && item->_contact->_isIncognitoContact &&
+             item->_contact->_trustStatus == TrustStatus::INCOMING_CONTACT_REQUEST ||
+             item->_contact->_trustStatus == TrustStatus::UNKNOWN))) {
+            if (!isInList) {
+                if (isCall)
+                    itemsListFiltered_->InsertAt(0, item);
+                else
+                    itemsListFiltered_->Append(item);
+            }
+        }
+        else if (isInList) {
+            itemsListFiltered_->RemoveAt(spi_index);
+        }
+    });
+    refreshFilteredBannedItemsList();
+}
+
+void
+SmartPanelItemsViewModel::refreshFilteredBannedItemsList()
+{
+    auto selectedAccountId = AccountListItemsViewModel::instance->getSelectedAccountId();
+
+    std::for_each(begin(itemsList_), end(itemsList_),
+        [selectedAccountId, this](SmartPanelItem^ item) {
+        static unsigned spi_index;
+        auto isInList = itemsListBannedFiltered->IndexOf(item, &spi_index);
+        auto isBanned = item->_contact->_trustStatus == TrustStatus::BLOCKED ? true : false;
+        auto account = AccountsViewModel::instance->findItem(item->_contact->_accountIdAssociated);
+        // Filters out non-account contacts that are NOT banned
+        if (item->_contact->_accountIdAssociated == selectedAccountId && isBanned) {
+            if (!isInList) {
+                itemsListBannedFiltered->InsertAt(0, item);
+            }
+        }
+        else if (isInList) {
+            itemsListBannedFiltered->RemoveAt(spi_index);
+        }
+    });
+}
\ No newline at end of file
diff --git a/SmartPanelItemsViewModel.h b/SmartPanelItemsViewModel.h
index 96822aeec169faac7edaacd90d6200b59e7c0eaa..2a690cf73511a0e424bedabb184c5c1ff66d67b8 100644
--- a/SmartPanelItemsViewModel.h
+++ b/SmartPanelItemsViewModel.h
@@ -26,14 +26,16 @@ using namespace RingClientUWP::Controls;
 
 namespace RingClientUWP
 {
-namespace ViewModel {
+namespace ViewModel
+{
 
-public ref class SmartPanelItemsViewModel sealed
+ref class SmartPanelItemsViewModel sealed
 {
 public:
     bool isInCall();
     String^ getAssociatedAccountId(SmartPanelItem^ item);
-    void update();
+    void refreshFilteredItemsList();
+    void refreshFilteredBannedItemsList();
 
 internal:
     /* singleton */
@@ -47,49 +49,73 @@ internal:
     }
 
     /* functions */
+    void update(const std::vector<std::string>& properties);
     SmartPanelItem^ findItem(String^ callId);
     SmartPanelItem^ findItem(Contact^ contact);
     SmartPanelItem^ findItemByRingID(String^ ringID);
 
     unsigned int getIndex(String^ callId);
     unsigned int getIndex(Contact^ contact);
+    unsigned int getFilteredIndex(Contact^ contact);
+
     void removeItem(SmartPanelItem^ item);
     void moveItemToTheTop(SmartPanelItem^ item);
 
-    property Vector<SmartPanelItem^>^ itemsList
+    property IObservableVector<SmartPanelItem^>^ itemsList
     {
-        Vector<SmartPanelItem^>^ get()
-        {
+        IObservableVector<SmartPanelItem^>^ get() {
             return itemsList_;
         }
     }
 
+    property IObservableVector<SmartPanelItem^>^ itemsListFiltered
+    {
+        IObservableVector<SmartPanelItem^>^ get() {
+            return itemsListFiltered_;
+        }
+        void set(IObservableVector<SmartPanelItem^>^ value) {
+            itemsListFiltered_ = dynamic_cast<Vector<SmartPanelItem^>^>(value);
+        }
+    }
+
+    property IObservableVector<SmartPanelItem^>^ itemsListBannedFiltered
+    {
+        IObservableVector<SmartPanelItem^>^ get() {
+            return itemsListBannedFiltered_;
+        }
+        void set(IObservableVector<SmartPanelItem^>^ value) {
+            itemsListBannedFiltered_ = dynamic_cast<Vector<SmartPanelItem^>^>(value);
+        }
+    }
+
     property SmartPanelItem^ _selectedItem
     {
-        SmartPanelItem^ get()
-        {
+        SmartPanelItem^ get() {
             return currentItem_;
         }
-        void set(SmartPanelItem^ value)
-        {
+        void set(SmartPanelItem^ value) {
             oldItem_ = currentItem_;
             currentItem_ = value;
 
             if (oldItem_ != nullptr)
                 oldItem_->_isSelected = false;
 
-            if (currentItem_ != nullptr)
+            if (currentItem_ != nullptr) {
                 currentItem_->_isSelected = true;
-
-            //newContactSelected();
+            }
         }
     }
 
 private:
     SmartPanelItemsViewModel(); // singleton
+
     Vector<SmartPanelItem^>^ itemsList_;
+    Vector<SmartPanelItem^>^ itemsListFiltered_;
+    Vector<SmartPanelItem^>^ itemsListBannedFiltered_;
+
     SmartPanelItem^ currentItem_;
     SmartPanelItem^ oldItem_;
+
     void OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code);
 };
 }
diff --git a/SplitViews.xaml b/SplitViews.xaml
new file mode 100644
index 0000000000000000000000000000000000000000..0c0fba0bc0db04197d50a32527747a256c102650
--- /dev/null
+++ b/SplitViews.xaml
@@ -0,0 +1,473 @@
+<!-- **********************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas<andreas.traczyk@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/> .  *
+*********************************************************************** -->
+<ResourceDictionary
+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+
+    <Style x:Key="AnimatedSplitView" TargetType="SplitView">
+        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
+        <Setter Property="VerticalContentAlignment" Value="Stretch"/>
+        <Setter Property="OpenPaneLength" Value="{ThemeResource SplitViewOpenPaneThemeLength}"/>
+        <Setter Property="CompactPaneLength" Value="{ThemeResource SplitViewCompactPaneThemeLength}"/>
+        <Setter Property="PaneBackground" Value="{ThemeResource SystemControlPageBackgroundChromeLowBrush}"/>
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="SplitView">
+                    <Grid Background="{TemplateBinding Background}">
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="DisplayModeStates">
+                                <VisualStateGroup.Transitions>
+                                    <VisualTransition From="OpenInlineLeft" To="Closed">
+                                        <Storyboard>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible" />
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneTransform" Storyboard.TargetProperty="TranslateX">
+                                                <!--<SplineDoubleKeyFrame KeyTime="0:0:0.5" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding TemplateSettings.NegativeOpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>-->
+                                                <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                                                <LinearDoubleKeyFrame KeyTime="0:0:2"  Value="{Binding TemplateSettings.NegativeOpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                            <!--..-->
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="ContentTransform" Storyboard.TargetProperty="TranslateX">
+                                                <!--<SplineDoubleKeyFrame KeyTime="0:0:0.5" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding TemplateSettings.NegativeOpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>-->
+                                                <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.OpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}" />
+                                                <LinearDoubleKeyFrame KeyTime="0:0:2" Value="0"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                            <!--..-->
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
+                                                <!--<SplineDoubleKeyFrame KeyTime="0:0:0.5" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding TemplateSettings.OpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>-->
+                                                <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                                                <LinearDoubleKeyFrame KeyTime="0:0:2"  Value="{Binding TemplateSettings.OpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                        </Storyboard>
+                                    </VisualTransition>
+                                    <VisualTransition From="Closed" To="OpenOverlayLeft">
+                                        <Storyboard>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneTransform" Storyboard.TargetProperty="TranslateX">
+                                                <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.NegativeOpenPaneLength}"/>
+                                                <SplineDoubleKeyFrame KeyTime="0:0:0.35" KeySpline="0.1,0.9 0.2,1.0" Value="0"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
+                                                <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.OpenPaneLength}"/>
+                                                <SplineDoubleKeyFrame KeyTime="0:0:0.35" KeySpline="0.1,0.9 0.2,1.0" Value="0"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                        </Storyboard>
+                                    </VisualTransition>
+                                    <VisualTransition From="Closed" To="OpenOverlayRight">
+                                        <Storyboard>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneTransform" Storyboard.TargetProperty="TranslateX">
+                                                <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.OpenPaneLength}"/>
+                                                <SplineDoubleKeyFrame KeyTime="0:0:0.35" KeySpline="0.1,0.9 0.2,1.0" Value="0"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
+                                                <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.NegativeOpenPaneLength}"/>
+                                                <SplineDoubleKeyFrame KeyTime="0:0:0.35" KeySpline="0.1,0.9 0.2,1.0" Value="0"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                        </Storyboard>
+                                    </VisualTransition>
+                                    <VisualTransition From="ClosedCompactLeft" To="OpenCompactOverlayLeft">
+                                        <Storyboard>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CompactPaneGridLength, FallbackValue=0}"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.Column)">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
+                                                <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.NegativeOpenPaneLengthMinusCompactLength}"/>
+                                                <SplineDoubleKeyFrame KeyTime="0:0:0.35" KeySpline="0.1,0.9 0.2,1.0" Value="0"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                        </Storyboard>
+                                    </VisualTransition>
+                                    <VisualTransition From="ClosedCompactRight" To="OpenCompactOverlayRight">
+                                        <Storyboard>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="*"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition2" Storyboard.TargetProperty="Width">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CompactPaneGridLength, FallbackValue=0}"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
+                                                <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.OpenPaneLengthMinusCompactLength}"/>
+                                                <SplineDoubleKeyFrame KeyTime="0:0:0.35" KeySpline="0.1,0.9 0.2,1.0" Value="0"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                        </Storyboard>
+                                    </VisualTransition>
+                                    <VisualTransition From="OpenOverlayLeft" To="Closed">
+                                        <Storyboard>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneTransform" Storyboard.TargetProperty="TranslateX">
+                                                <SplineDoubleKeyFrame KeyTime="0:0:0.12" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.NegativeOpenPaneLength}"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
+                                                <SplineDoubleKeyFrame KeyTime="0:0:0.12" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.OpenPaneLength}"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                        </Storyboard>
+                                    </VisualTransition>
+                                    <VisualTransition From="OpenOverlayRight" To="Closed">
+                                        <Storyboard>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneTransform" Storyboard.TargetProperty="TranslateX">
+                                                <SplineDoubleKeyFrame KeyTime="0:0:0.12" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.OpenPaneLength}"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
+                                                <SplineDoubleKeyFrame KeyTime="0:0:0.12" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.NegativeOpenPaneLength}"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                        </Storyboard>
+                                    </VisualTransition>
+                                    <VisualTransition From="OpenCompactOverlayLeft" To="ClosedCompactLeft">
+                                        <Storyboard>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CompactPaneGridLength, FallbackValue=0}"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.Column)">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
+                                                <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
+                                                <SplineDoubleKeyFrame KeyTime="0:0:0.12" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.NegativeOpenPaneLengthMinusCompactLength}"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                        </Storyboard>
+                                    </VisualTransition>
+                                    <VisualTransition From="OpenCompactOverlayRight" To="ClosedCompactRight">
+                                        <Storyboard>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="*"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition2" Storyboard.TargetProperty="Width">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CompactPaneGridLength, FallbackValue=0}"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                            </ObjectAnimationUsingKeyFrames>
+                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
+                                                <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
+                                                <SplineDoubleKeyFrame KeyTime="0:0:0.12" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.OpenPaneLengthMinusCompactLength}"/>
+                                            </DoubleAnimationUsingKeyFrames>
+                                        </Storyboard>
+                                    </VisualTransition>
+                                </VisualStateGroup.Transitions>
+                                <VisualState x:Name="Closed"/>
+                                <VisualState x:Name="ClosedCompactLeft">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CompactPaneGridLength, FallbackValue=0}"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.Column)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimation Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX" To="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.NegativeOpenPaneLengthMinusCompactLength}" Duration="0:0:0"/>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="ClosedCompactRight">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="*"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition2" Storyboard.TargetProperty="Width">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CompactPaneGridLength, FallbackValue=0}"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="2"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimation Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX" To="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.OpenPaneLengthMinusCompactLength}" Duration="0:0:0"/>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="OpenOverlayLeft">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="OpenOverlayRight">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="OpenInlineLeft">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.Column)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="OpenInlineRight">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="*"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition2" Storyboard.TargetProperty="Width">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.OpenPaneGridLength, FallbackValue=0}"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="(Grid.Column)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="OpenCompactOverlayLeft">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CompactPaneGridLength, FallbackValue=0}"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.Column)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="OpenCompactOverlayRight">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="*"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition2" Storyboard.TargetProperty="Width">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CompactPaneGridLength, FallbackValue=0}"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
+                                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition x:Name="ColumnDefinition1" Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.OpenPaneGridLength, FallbackValue=0}"/>
+                            <ColumnDefinition x:Name="ColumnDefinition2" Width="*"/>
+                        </Grid.ColumnDefinitions>
+
+                        <!-- Content Area -->
+                        <Grid x:Name="ContentRoot" Grid.ColumnSpan="2">
+                            <Border Child="{TemplateBinding Content}"/>
+                            <Rectangle x:Name="LightDismissLayer" Fill="Transparent" Visibility="Collapsed"/>
+                        </Grid>
+
+                        <!-- Pane Content Area-->
+                        <Grid   x:Name="PaneRoot"
+                                Grid.ColumnSpan="2"
+                                HorizontalAlignment="Left"
+                                Visibility="Collapsed"
+                                Background="{TemplateBinding PaneBackground}"
+                                Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.OpenPaneLength}">
+                            <Grid.Clip>
+                                <RectangleGeometry x:Name="PaneClipRectangle">
+                                    <RectangleGeometry.Transform>
+                                        <CompositeTransform x:Name="PaneClipRectangleTransform"/>
+                                    </RectangleGeometry.Transform>
+                                </RectangleGeometry>
+                            </Grid.Clip>
+                            <Grid.RenderTransform>
+                                <CompositeTransform x:Name="PaneTransform"/>
+                            </Grid.RenderTransform>
+                            <Border Child="{TemplateBinding Pane}"/>
+                            <Rectangle  x:Name="HCPaneBorder"
+                                        x:DeferLoadStrategy="Lazy"
+                                        Visibility="Collapsed"
+                                        Fill="{ThemeResource SystemControlForegroundTransparentBrush}"
+                                        Width="1"
+                                        HorizontalAlignment="Right"/>
+                        </Grid>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+</ResourceDictionary>
\ No newline at end of file
diff --git a/Styles.xaml b/Styles.xaml
index 69347a8c4d6e40df07920c2e490e153cd9382eea..7a848d6077656c3adaa36d5a2a7662f9ede5ada4 100644
--- a/Styles.xaml
+++ b/Styles.xaml
@@ -15,686 +15,741 @@
 *                                                                         *
 * You should have received a copy of the GNU General Public License       *
 * along with this program.  If not, see <http://www.gnu.org/licenses/> .  *
-*********************************************************************** -->
-<ResourceDictionary
-    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+***********************************************************************-->
+<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 
-    <!-- general -->
-    <Style x:Key="Grid#3bc1d3" TargetType="Grid">
-        <Setter Property="Background"
-                Value="#3bc1d3"/>
-    </Style>
-    <Style x:Key="Stack#3bc1d3" TargetType="StackPanel">
-        <Setter Property="Background"
-                Value="#3bc1d3"/>
-    </Style>
-    <Style x:Key="TextStyle1"
-           TargetType="TextBlock">
-        <Setter Property="FontSize"
-                Value="20"/>
-        <Setter Property="Foreground"
-                Value="Black"/>
-    </Style>
-    <Style x:Key="TextStyle2"
-           TargetType="TextBlock">
-        <Setter Property="FontSize"
-                Value="20"/>
-        <Setter Property="VerticalAlignment"
-                Value="Center"/>
-        <Setter Property="Foreground"
-                Value="White"/>
-    </Style>
-    <Style x:Key="TextStyle3"
-           TargetType="TextBlock">
-        <Setter Property="FontSize"
-                Value="15"/>
-        <Setter Property="HorizontalAlignment"
-                Value="Center"/>
-        <Setter Property="VerticalAlignment"
-                Value="Center"/>
-        <Setter Property="Foreground"
-                Value="White"/>
-    </Style>
-    <Style x:Key="TextStyle_MiniNotification"
-           TargetType="TextBlock">
-        <Setter Property="FontSize"
-                Value="8"/>
-        <Setter Property="HorizontalAlignment"
-                Value="Center"/>
-        <Setter Property="VerticalAlignment"
-                Value="Center"/>
-        <Setter Property="Foreground"
-                Value="White"/>
-    </Style>
-    <Style x:Key="TextStyle4"
-           TargetType="TextBlock">
-        <Setter Property="FontSize"
-                Value="12"/>
-        <Setter Property="HorizontalAlignment"
-                Value="Center"/>
-        <Setter Property="VerticalAlignment"
-                Value="Center"/>
-        <Setter Property="Foreground"
-                Value="Black"/>
-    </Style>
-    <Style x:Key="TextStyle5"
-           TargetType="TextBlock">
-        <Setter Property="FontSize"
-                Value="15"/>
-        <Setter Property="HorizontalAlignment"
-                Value="Left"/>
-        <Setter Property="VerticalAlignment"
-                Value="Center"/>
-        <Setter Property="FontStyle"
-                Value="Italic"/>
-        <Setter Property="Foreground"
-                Value="Black"/>
-    </Style>
-    <Style x:Key="TextStyle6"
-           TargetType="TextBlock">
-        <Setter Property="FontSize"
-                Value="12"/>
-        <Setter Property="HorizontalAlignment"
-                Value="Left"/>
-        <Setter Property="VerticalAlignment"
-                Value="Center"/>
-        <Setter Property="Foreground"
-                Value="Black"/>
-    </Style>
-    <Style x:Key="TextStyle7"
-           TargetType="TextBlock">
-        <Setter Property="Foreground"
-                Value="White"/>
-    </Style>
-    <Style x:Key="TextSegoeStyle1"
-           TargetType="TextBlock">
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="FontSize"
-                Value="15"/>
-        <Setter Property="HorizontalAlignment"
-                Value="Center"/>
-        <Setter Property="VerticalAlignment"
-                Value="Center"/>
-        <Setter Property="Foreground"
-                Value="White"/>
-    </Style>
-    <Style x:Key="TextSegoeStyle-20pt-black"
-           TargetType="TextBlock">
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="FontSize"
-                Value="20"/>
-        <Setter Property="HorizontalAlignment"
-                Value="Left"/>
-        <Setter Property="VerticalAlignment"
-                Value="Center"/>
-        <Setter Property="Foreground"
-                Value="Black"/>
-    </Style>
-    <Style x:Key="TextSegoeStyle-24pt-black"
-           TargetType="TextBlock">
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="FontSize"
-                Value="24"/>
-        <Setter Property="HorizontalAlignment"
-                Value="Left"/>
-        <Setter Property="VerticalAlignment"
-                Value="Bottom"/>
-        <Setter Property="Foreground"
-                Value="Black"/>
-        <Setter Property="Margin"
-                Value="0,0,10,0"/>
-    </Style>
-    <Style x:Key="TextSegoeStyle-Centered-40pt-white"
-           TargetType="TextBlock">
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="FontSize"
-                Value="40"/>
-        <Setter Property="HorizontalAlignment"
-                Value="Center"/>
-        <Setter Property="VerticalAlignment"
-                Value="Center"/>
-        <Setter Property="Foreground"
-                Value="White"/>
-    </Style>
-    <Style x:Key="TextSegoeStyle-20pt-green"
-           TargetType="TextBlock">
-        <Setter Property="HorizontalAlignment"
-                Value="Center"/>
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="VerticalAlignment"
-                Value="Center"/>
-        <Setter Property="Foreground"
-                Value="Green"/>
-        <Setter Property="FontSize"
-                Value="20"/>
-    </Style>
-    <Style x:Key="TextSegoeStyle-20pt-red"
-           TargetType="TextBlock">
-        <Setter Property="HorizontalAlignment"
-                Value="Center"/>
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="VerticalAlignment"
-                Value="Center"/>
-        <Setter Property="Foreground"
-                Value="Red"/>
-        <Setter Property="FontSize"
-                Value="20"/>
-    </Style>
-    <Style x:Key="ButtonStyle1"
-           TargetType="Button">
-        <Setter Property="Width"
-                Value="50"/>
-        <Setter Property="Height"
-                Value="50"/>
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="Foreground"
-                Value="White"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
-    </Style>
-    <Style x:Key="HamburgerButtonStyle"
-           TargetType="Button">
-        <Setter Property="Width"
-                Value="50"/>
-        <Setter Property="Height"
-                Value="30"/>
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="Foreground"
-                Value="White"/>
-        <Setter Property="Background"
-                Value="Transparent"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
-    </Style>
-    <Style x:Key="ButtonStyle2"
-        TargetType="Button">
-        <Setter Property="Width"
-            Value="400"/>
-        <Setter Property="Height"
-            Value="30"/>
-        <Setter Property="FontFamily"
-            Value="Segoe MDL2 Assets"/>
-        <Setter Property="Foreground"
-            Value="White"/>
-        <Setter Property="Background"
-            Value="#3bc1d3"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
-    </Style>
-    <Style x:Key="ButtonStyle3"
-           TargetType="Button">
-        <Setter Property="Foreground"
-                Value="Black"/>
-        <Setter Property="Background"
-                Value="Transparent"/>
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="Width"
-                Value="80"/>
-        <Setter Property="Width"
-                Value="120"/>
-        <Setter Property="FontSize"
-                Value="70"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
-    </Style>
-    <Style x:Key="ButtonStyle4"
-           TargetType="Button">
-        <Setter Property="Foreground"
-                Value="White"/>
-        <Setter Property="Background"
-                Value="#3bc1d3"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
-    </Style>
-    <Style x:Key="ButtonStyle5"
-        TargetType="Button">
-        <Setter Property="Width"
-            Value="160"/>
-        <Setter Property="Height"
-            Value="30"/>
-        <Setter Property="FontFamily"
-            Value="Segoe MDL2 Assets"/>
-        <Setter Property="Foreground"
-            Value="White"/>
-        <Setter Property="Background"
-            Value="#3bc1d3"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
-    </Style>
-    <Style x:Key="ButtonStyle6"
-        TargetType="Button">
-        <Setter Property="Width"
-            Value="320"/>
-        <Setter Property="Height"
-            Value="30"/>
-        <Setter Property="FontFamily"
-            Value="Segoe MDL2 Assets"/>
-        <Setter Property="Foreground"
-            Value="White"/>
-        <Setter Property="Background"
-            Value="Transparent"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
-    </Style>
-    <Style x:Key="ButtonStyle7"
-        TargetType="Button">
-        <Setter Property="Width"
-            Value="20"/>
-        <Setter Property="Height"
-            Value="20"/>
-        <Setter Property="FontFamily"
-            Value="Segoe MDL2 Assets"/>
-        <Setter Property="Foreground"
-            Value="White"/>
-        <Setter Property="Background"
-            Value="Transparent"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
-    </Style>
-    <Style x:Key="ButtonStyle8"
-           TargetType="Button">
-        <Setter Property="Foreground"
-                Value="White"/>
-        <Setter Property="Background"
-                Value="#3bc1d3"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
-        <Setter Property="FontSize"
-                Value="30"/>
-    </Style>
-    <Style x:Key="ToggleButtonStyle1"
-           TargetType="ToggleButton">
-        <Setter Property="Width"
-                Value="46"/>
-        <Setter Property="Height"
-                Value="30"/>
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="Foreground"
-                Value="White"/>
-        <Setter Property="Background"
-                Value="Transparent"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
-    </Style>
-    <Style x:Key="smartGridButtonStyle"
-           TargetType="Button">
-        <Setter Property="Width"
-                Value="46"/>
-        <Setter Property="Height"
-                Value="30"/>
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="Foreground"
-                Value="White"/>
-        <Setter Property="Background"
-                Value="Transparent"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
-    </Style>
-    <Style x:Key="TextBoxStyle2"
-           TargetType="TextBox">
-        <Setter Property="IsReadOnly" Value="True"/>
-        <Setter Property="FontWeight" Value="Bold"/>
-        <Setter Property="Foreground" Value="Black"/>
-        <Setter Property="Background" Value="Transparent"/>
-        <Setter Property="BorderBrush" Value="Transparent"/>
-        <Setter Property="BorderThickness" Value="0"/>
-        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/>
-        <Setter Property="FontSize" Value="12"/>
+    <ResourceDictionary.MergedDictionaries>
+        <ResourceDictionary Source="ms-appx:///ScrollBars.xaml" />
+        <ResourceDictionary Source="ms-appx:///Buttons.xaml" />
+        <ResourceDictionary Source="ms-appx:///SplitViews.xaml" />
+    </ResourceDictionary.MergedDictionaries>
+
+    <!--  colors  -->
+    <Color x:Key="RingBlueLightColor">#ffe4f1f9</Color>
+    <SolidColorBrush x:Key="RingBlueLightBrush" Color="{StaticResource RingBlueLightColor}" />
+
+    <Color x:Key="RingBlueHighLight1Color">#ffcfebf5</Color>
+    <SolidColorBrush x:Key="RingBlueHighLight1Brush" Color="{StaticResource RingBlueHighLight1Color}" />
+    <Color x:Key="RingBlueHighLight2Color">#ffbae5f0</Color>
+    <SolidColorBrush x:Key="RingBlueHighLight2Brush" Color="{StaticResource RingBlueHighLight2Color}" />
+    <Color x:Key="RingBlueHighLight3Color">#ff90d9e6</Color>
+    <SolidColorBrush x:Key="RingBlueHighLight3Brush" Color="{StaticResource RingBlueHighLight3Color}" />
+
+    <Color x:Key="RingBlueMidColor">#ff3bc1d3</Color>
+    <SolidColorBrush x:Key="RingBlueMidBrush" Color="{StaticResource RingBlueMidColor}" />
+    <Color x:Key="RingBlueDarkColor">#ff1ba1b3</Color>
+    <SolidColorBrush x:Key="RingBlueDarkBrush" Color="{StaticResource RingBlueDarkColor}" />
+    <Color x:Key="RingBlueUltraDarkColor">#ff0b91a3</Color>
+    <SolidColorBrush x:Key="RingBlueUltraDarkBrush" Color="{StaticResource RingBlueUltraDarkColor}" />
+
+    <Color x:Key="RingMessagePageColor">#ffffffff</Color>
+    <SolidColorBrush x:Key="RingMessagePageBrush" Color="{StaticResource RingMessagePageColor}" />
+
+    <!--  general  -->
+    <Style x:Key="RingBlueMidGrid" TargetType="Grid">
+        <Setter Property="Background" Value="#3bc1d3" />
+    </Style>
+    <Style x:Key="RingBlueMidStackPanel" TargetType="StackPanel">
+        <Setter Property="Background" Value="#3bc1d3" />
+    </Style>
+    <Style x:Key="TextStyle1" TargetType="TextBlock">
+        <Setter Property="FontSize" Value="20" />
+        <Setter Property="Foreground" Value="Black" />
+    </Style>
+    <Style x:Key="TextStyle2" TargetType="TextBlock">
+        <Setter Property="FontSize" Value="20" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="Foreground" Value="White" />
+    </Style>
+    <Style x:Key="TextStyle3" TargetType="TextBlock">
+        <Setter Property="FontSize" Value="15" />
+        <Setter Property="HorizontalAlignment" Value="Center" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="Foreground" Value="White" />
+    </Style>
+    <Style x:Key="TextStyle_MiniNotification" TargetType="TextBlock">
+        <Setter Property="FontSize" Value="8" />
+        <Setter Property="HorizontalAlignment" Value="Center" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="Foreground" Value="White" />
+    </Style>
+    <Style x:Key="TextStyle4" TargetType="TextBlock">
+        <Setter Property="FontSize" Value="12" />
+        <Setter Property="HorizontalAlignment" Value="Center" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="Foreground" Value="Black" />
+    </Style>
+    <Style x:Key="TextStyle5" TargetType="TextBlock">
+        <Setter Property="FontSize" Value="15" />
+        <Setter Property="HorizontalAlignment" Value="Left" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="FontFamily" Value="SemiLight" />
+        <Setter Property="Foreground" Value="Black" />
+    </Style>
+    <Style x:Key="TextStyle6" TargetType="TextBlock">
+        <Setter Property="FontSize" Value="12" />
+        <Setter Property="HorizontalAlignment" Value="Left" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="Foreground" Value="Black" />
+    </Style>
+    <Style x:Key="TextStyle7" TargetType="TextBlock">
+        <Setter Property="Foreground" Value="White" />
+    </Style>
+    <Style x:Key="TextSegoeStyle1" TargetType="TextBlock">
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="FontSize" Value="15" />
+        <Setter Property="HorizontalAlignment" Value="Center" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="Foreground" Value="White" />
+    </Style>
+    <Style x:Key="TextSegoeStyle-20pt-black" TargetType="TextBlock">
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="FontSize" Value="20" />
+        <Setter Property="HorizontalAlignment" Value="Left" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="Foreground" Value="Black" />
+    </Style>
+    <Style x:Key="TextSegoeStyle-24pt-black" TargetType="TextBlock">
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="FontSize" Value="24" />
+        <Setter Property="HorizontalAlignment" Value="Left" />
+        <Setter Property="VerticalAlignment" Value="Bottom" />
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="Margin" Value="0,0,10,0" />
+    </Style>
+    <Style x:Key="TextSegoeStyle-Centered-40pt-white" TargetType="TextBlock">
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="FontSize" Value="40" />
+        <Setter Property="HorizontalAlignment" Value="Center" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="Foreground" Value="White" />
+    </Style>
+    <Style x:Key="TextSegoeStyle-20pt-green" TargetType="TextBlock">
+        <Setter Property="HorizontalAlignment" Value="Center" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="Foreground" Value="Green" />
+        <Setter Property="FontSize" Value="20" />
+    </Style>
+    <Style x:Key="TextSegoeStyle-20pt-red" TargetType="TextBlock">
+        <Setter Property="HorizontalAlignment" Value="Center" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="VerticalAlignment" Value="Center" />
+        <Setter Property="Foreground" Value="Red" />
+        <Setter Property="FontSize" Value="20" />
+    </Style>
+    <Style x:Key="ButtonStyle1" TargetType="Button">
+        <Setter Property="Width" Value="50" />
+        <Setter Property="Height" Value="50" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="BorderThickness" Value="0" />
+    </Style>
+    <Style x:Key="HamburgerButtonStyle" TargetType="Button">
+        <Setter Property="Width" Value="50" />
+        <Setter Property="Height" Value="30" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="BorderThickness" Value="0" />
+    </Style>
+    <Style x:Key="ButtonStyle2" TargetType="Button">
+        <Setter Property="Width" Value="200" />
+        <Setter Property="Height" Value="30" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="#3bc1d3" />
+        <Setter Property="BorderThickness" Value="0" />
+    </Style>
+    <Style x:Key="ButtonStyle3" TargetType="Button">
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="Width" Value="80" />
+        <Setter Property="Width" Value="120" />
+        <Setter Property="FontSize" Value="70" />
+        <Setter Property="BorderThickness" Value="0" />
+    </Style>
+    <Style x:Key="ButtonStyle4" TargetType="Button">
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="BorderThickness" Value="0" />
+    </Style>
+    <Style x:Key="ButtonStyle5" TargetType="Button">
+        <Setter Property="Width" Value="160" />
+        <Setter Property="Height" Value="30" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="#3bc1d3" />
+        <Setter Property="BorderThickness" Value="0" />
+    </Style>
+    <Style x:Key="AccountMenuButtonStyle" TargetType="Button">
+        <Setter Property="Width" Value="107" />
+        <Setter Property="Height" Value="30" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="#3bc1d3" />
+        <Setter Property="BorderThickness" Value="0" />
+    </Style>
+    <Style x:Key="ButtonStyle6" TargetType="Button">
+        <Setter Property="Width" Value="320" />
+        <Setter Property="Height" Value="30" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="BorderThickness" Value="0" />
+    </Style>
+    <Style x:Key="ButtonStyle7" TargetType="Button">
+        <Setter Property="Width" Value="20" />
+        <Setter Property="Height" Value="20" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="BorderThickness" Value="0" />
+    </Style>
+
+    <Style x:Key="ButtonStyle8" TargetType="Button">
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="#3bc1d3" />
+        <Setter Property="BorderThickness" Value="0" />
+        <Setter Property="FontSize" Value="30" />
+    </Style>
+    <Style x:Key="ToggleButtonStyle1" TargetType="ToggleButton">
+        <Setter Property="Width" Value="46" />
+        <Setter Property="Height" Value="30" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="BorderThickness" Value="0" />
+    </Style>
+    <Style x:Key="smartGridButtonStyle" TargetType="Button">
+        <Setter Property="Width" Value="46" />
+        <Setter Property="Height" Value="30" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="BorderThickness" Value="0" />
+    </Style>
+    <Style x:Key="TextBoxStyle2" TargetType="TextBox">
+        <Setter Property="IsReadOnly" Value="True" />
+        <Setter Property="FontWeight" Value="Bold" />
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="BorderBrush" Value="Transparent" />
+        <Setter Property="BorderThickness" Value="0" />
+        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
+        <Setter Property="FontSize" Value="12" />
     </Style>
 
-    <!-- console -->
-    <Style x:Key="ConsoleScrollViewerStyle"
-           TargetType="ScrollViewer">
-        <Setter Property="Background"
-                Value="Black"/>
-    </Style>
-    <Style x:Key="ConsoleTextStyle1"
-           TargetType="RichTextBlock">
-        <Setter Property="FontSize"
-                Value="12"/>
-        <Setter Property="Foreground"
-                Value="GreenYellow"/>
-    </Style>
-    <Style x:Key="ButtonSendCmdStyle"
-           TargetType="Button">
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="Width"
-                Value="50"/>
-        <Setter Property="Height"
-                Value="30"/>
-        <Setter Property="Foreground"
-                Value="Black"/>
-        <Setter Property="FontSize"
-                Value="17"/>
-        <Setter Property="Content"
-                Value="&#xE751;"/>
-        <Setter Property="Background"
-                Value="Transparent"/>
-    </Style>
-    <Style x:Key="ConsoleTextBoxStyle"
-           TargetType="TextBox">
-        <Setter Property="Height"
-                Value="30"/>
+    <!--  console  -->
+    <Style x:Key="ConsoleScrollViewerStyle" TargetType="ScrollViewer">
+        <Setter Property="Background" Value="Black" />
+    </Style>
+    <Style x:Key="ConsoleTextStyle1" TargetType="RichTextBlock">
+        <Setter Property="FontSize" Value="12" />
+        <Setter Property="Foreground" Value="GreenYellow" />
+    </Style>
+    <Style x:Key="ButtonSendCmdStyle" TargetType="Button">
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="Width" Value="50" />
+        <Setter Property="Height" Value="30" />
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="FontSize" Value="17" />
+        <Setter Property="Content" Value="&#xE751;" />
+        <Setter Property="Background" Value="Transparent" />
+    </Style>
+    <Style x:Key="ConsoleTextBoxStyle" TargetType="TextBox">
+        <Setter Property="Height" Value="30" />
     </Style>
 
-    <!-- smartlist -->
-    <!--<Style x:Key="smartListStyle" TargetType="ListBox">
-        <Setter Property="Background" Value="#FFE4F1F9"/>
-        <Setter Property="" Value="#FFE4F1F9"/>
-    </Style>-->
+    <!--  smartlist  -->
     <Style x:Key="contactsListBoxStyle" TargetType="ListBoxItem">
-        <Setter Property="MinWidth" Value="{StaticResource SplitViewCompactPaneThemeLength}"/>
-        <Setter Property="Height" Value="auto"/>
-        <Setter Property="Padding" Value="0"/>
+        <Setter Property="MinWidth" Value="{StaticResource SplitViewCompactPaneThemeLength}" />
+        <Setter Property="Height" Value="auto" />
+        <Setter Property="Padding" Value="0" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="TabNavigation" Value="Local" />
+        <Setter Property="HorizontalContentAlignment" Value="Left" />
+        <Setter Property="UseSystemFocusVisuals" Value="True" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="ListBoxItem">
+                    <Grid x:Name="LayoutRoot"
+                          Background="{TemplateBinding Background}"
+                          BorderThickness="{TemplateBinding BorderThickness}">
+                        <Grid.Resources>
+                            <Style x:Key="BaseContentPresenterStyle" TargetType="ContentPresenter">
+                                <Setter Property="FontFamily" Value="XamlAutoFontFamily" />
+                                <Setter Property="FontWeight" Value="SemiBold" />
+                                <Setter Property="FontSize" Value="15" />
+                                <Setter Property="TextWrapping" Value="Wrap" />
+                                <Setter Property="LineStackingStrategy" Value="MaxHeight" />
+                                <Setter Property="TextLineBounds" Value="Full" />
+                                <Setter Property="OpticalMarginAlignment" Value="TrimSideBearings" />
+                            </Style>
+                            <Style x:Key="BodyContentPresenterStyle"
+                                   BasedOn="{StaticResource BaseContentPresenterStyle}"
+                                   TargetType="ContentPresenter">
+                                <Setter Property="FontWeight" Value="Normal" />
+                                <Setter Property="FontSize" Value="15" />
+                            </Style>
+                        </Grid.Resources>
+                        <Rectangle x:Name="PressedBackground"
+                                   Control.IsTemplateFocusTarget="True"
+                                   Fill="Transparent" />
+                        <ContentPresenter x:Name="ContentPresenter"
+                                          Margin="{TemplateBinding Padding}"
+                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
+                                          Content="{TemplateBinding Content}"
+                                          ContentTemplate="{TemplateBinding ContentTemplate}"
+                                          ContentTransitions="{TemplateBinding ContentTransitions}"
+                                          Style="{StaticResource BodyContentPresenterStyle}"
+                                          TextWrapping="NoWrap" />
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="CommonStates">
+                                <VisualState x:Name="Normal">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PressedBackground" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight1Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PressedBackground"
+                                           Storyboard.TargetProperty="Opacity"
+                                           Duration="0:0:0.15">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.15" Value="0" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Disabled">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseMediumLowBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="PointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PressedBackground" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight1Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PressedBackground"
+                                           Storyboard.TargetProperty="Opacity"
+                                           Duration="0:0:0.15">
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0" />
+                                            <LinearDoubleKeyFrame KeyTime="0:0:0.15" Value="1" />
+                                        </DoubleAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Pressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PressedBackground" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight2Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="Selected">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PressedBackground" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight2Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="SelectedUnfocused">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PressedBackground" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight2Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="SelectedPointerOver">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PressedBackground" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight2Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                                <VisualState x:Name="SelectedPressed">
+                                    <Storyboard>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PressedBackground" Storyboard.TargetProperty="Fill">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource RingBlueHighLight2Brush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}" />
+                                        </ObjectAnimationUsingKeyFrames>
+                                    </Storyboard>
+                                </VisualState>
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Grid>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="bannedContactListBoxStyle" TargetType="ListBoxItem">
+        <Setter Property="Background" Value="{ThemeResource RingBlueLightBrush}" />
+        <Setter Property="MinWidth" Value="{StaticResource SplitViewCompactPaneThemeLength}" />
+        <Setter Property="Height" Value="auto" />
+        <Setter Property="Padding" Value="0" />
+        <Setter Property="Margin" Value="0,0,0,10" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="ListBoxItem">
+                    <Border Background="Transparent">
+                        <ContentPresenter />
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="SelectionStates">
+                                <VisualState x:Name="Selected" />
+                                <VisualState x:Name="Unselected" />
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Border>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="otherdeviceListBoxStyle" TargetType="ListBoxItem">
+        <Setter Property="Margin" Value="0,0,0,10" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="ListBoxItem">
+                    <Border Background="AliceBlue">
+                        <ContentPresenter />
+                        <VisualStateManager.VisualStateGroups>
+                            <VisualStateGroup x:Name="SelectionStates">
+                                <VisualState x:Name="Selected" />
+                                <VisualState x:Name="Unselected" />
+                            </VisualStateGroup>
+                        </VisualStateManager.VisualStateGroups>
+                    </Border>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
     </Style>
 
-    <Style x:Key ="greenRoundedButtonStyle1" TargetType ="Button">
-        <Setter Property="Height" Value="50"/>
-        <Setter Property="FontSize" Value="30"/>
+    <Style x:Key="greenRoundedButtonStyle1" TargetType="Button">
+        <Setter Property="Height" Value="50" />
+        <Setter Property="FontSize" Value="30" />
 
-        <Setter Property ="Template">
+        <Setter Property="Template">
             <Setter.Value>
-                <ControlTemplate TargetType ="Button">
+                <ControlTemplate TargetType="Button">
                     <Grid>
-                        <Ellipse Name ="OuterRing" Width ="50" Height ="50" Fill ="LightGreen"/>
-                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White"/>
+                        <Ellipse Name="OuterRing"
+                                 Width="50"
+                                 Height="50"
+                                 Fill="LightGreen" />
+                        <ContentPresenter HorizontalAlignment="Center"
+                                          VerticalAlignment="Center"
+                                          Foreground="White" />
                     </Grid>
                 </ControlTemplate>
             </Setter.Value>
         </Setter>
     </Style>
-    <Style x:Key ="redRoundedButtonStyle1" TargetType ="Button">
-        <Setter Property ="Foreground" Value ="Black"/>
-        <Setter Property ="FontWeight" Value ="Bold"/>
-        <Setter Property ="Template">
+    <Style x:Key="redRoundedButtonStyle1" TargetType="Button">
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="FontWeight" Value="Bold" />
+        <Setter Property="Template">
             <Setter.Value>
-                <ControlTemplate TargetType ="Button">
+                <ControlTemplate TargetType="Button">
                     <Grid>
-                        <Ellipse Name ="OuterRing" Width ="50" Height ="50" Fill ="LightCoral"/>
-                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White"/>
+                        <Ellipse Name="OuterRing"
+                                 Width="50"
+                                 Height="50"
+                                 Fill="LightCoral" />
+                        <ContentPresenter HorizontalAlignment="Center"
+                                          VerticalAlignment="Center"
+                                          Foreground="White" />
                     </Grid>
                 </ControlTemplate>
             </Setter.Value>
         </Setter>
     </Style>
 
-    <Style x:Key="BorderStyle1"
-           TargetType="Border">
-        <Setter Property="Background" Value="#3bc1d3"/>
-        <Setter Property="CornerRadius" Value="6"/>
-        <Setter Property="Width" Value="25"/>
-        <Setter Property="Height" Value="23"/>
-        <Setter Property="Padding" Value="4"/>
-    </Style>
-    <Style x:Key="BorderStyle2"
-           TargetType="Border">
-        <Setter Property="Background" Value="OrangeRed"/>
-        <Setter Property="CornerRadius" Value="6"/>
-        <Setter Property="Width" Value="25"/>
-        <Setter Property="Height" Value="23"/>
-        <Setter Property="Padding" Value="4"/>
-    </Style>
-    <Style x:Key="BorderStyle3"
-           TargetType="Border">
-        <Setter Property="Background" Value="#3bc1d3"/>
-        <Setter Property="CornerRadius" Value="6"/>
-        <Setter Property="Width" Value="28"/>
-        <Setter Property="Height" Value="50"/>
-        <Setter Property="BorderThickness" Value="2"/>
-        <Setter Property="BorderBrush" Value="white"/>
-        <Setter Property="Padding" Value="4"/>
-    </Style>
-    <Style x:Key="BorderStyle_MiniNotification"
-           TargetType="Border">
-        <Setter Property="Background" Value="OrangeRed"/>
-        <Setter Property="CornerRadius" Value="3"/>
-        <Setter Property="Width" Value="12"/>
-        <Setter Property="Height" Value="12"/>
-        <Setter Property="Padding" Value="2"/>
-    </Style>
-    <Style x:Key="messageBubleStyle"
-       TargetType="ListBoxItem">
+    <Style x:Key="BorderStyle1" TargetType="Border">
+        <Setter Property="Background" Value="#3bc1d3" />
+        <Setter Property="CornerRadius" Value="6" />
+        <Setter Property="Width" Value="25" />
+        <Setter Property="Height" Value="23" />
+        <Setter Property="Padding" Value="4" />
+    </Style>
+    <Style x:Key="BorderStyle2" TargetType="Border">
+        <Setter Property="Background" Value="OrangeRed" />
+        <Setter Property="CornerRadius" Value="6" />
+        <Setter Property="Width" Value="25" />
+        <Setter Property="Height" Value="23" />
+        <Setter Property="Padding" Value="4" />
+    </Style>
+    <Style x:Key="BorderStyle3" TargetType="Border">
+        <Setter Property="Background" Value="#3bc1d3" />
+        <Setter Property="CornerRadius" Value="3" />
+        <Setter Property="Width" Value="28" />
+        <Setter Property="Height" Value="50" />
+        <Setter Property="BorderThickness" Value="2" />
+        <Setter Property="BorderBrush" Value="white" />
+        <Setter Property="Padding" Value="1,0" />
+    </Style>
+    <Style x:Key="BorderStyle_MiniNotification" TargetType="Border">
+        <Setter Property="Background" Value="OrangeRed" />
+        <Setter Property="CornerRadius" Value="3" />
+        <Setter Property="Width" Value="12" />
+        <Setter Property="Height" Value="12" />
+        <Setter Property="Padding" Value="2" />
+    </Style>
+    <Style x:Key="messageBubbleStyle" TargetType="ListBoxItem">
         <Setter Property="HorizontalAlignment" Value="Stretch" />
         <Setter Property="HorizontalContentAlignment" Value="Stretch" />
-        <Setter Property="Margin" Value="0,0,2,0"/>
+        <Setter Property="Margin" Value="0,0,2,0" />
         <Setter Property="Template">
             <Setter.Value>
                 <ControlTemplate TargetType="ListBoxItem">
                     <Border Background="Transparent">
+                        <ContentPresenter />
                         <VisualStateManager.VisualStateGroups>
                             <VisualStateGroup x:Name="SelectionStates">
                                 <VisualState x:Name="Selected" />
-                                <VisualState x:Name="Unselected">
-                                </VisualState>
+                                <VisualState x:Name="Unselected" />
                             </VisualStateGroup>
                         </VisualStateManager.VisualStateGroups>
-                        <ContentPresenter />
                     </Border>
                 </ControlTemplate>
             </Setter.Value>
         </Setter>
     </Style>
-    <!-- rounded button for call -->
-    <Style x:Key ="roundButtonTemplate" TargetType ="Button">
-        <Setter Property ="Foreground" Value ="Black"/>
-        <Setter Property ="FontWeight" Value ="Bold"/>
-        <Setter Property ="Template">
+
+    <!--  rounded button for call  -->
+    <Style x:Key="roundButtonTemplate" TargetType="Button">
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="FontWeight" Value="Bold" />
+        <Setter Property="Template">
             <Setter.Value>
-                <ControlTemplate TargetType ="Button">
+                <ControlTemplate TargetType="Button">
                     <Grid>
-                        <Ellipse Name ="OuterRing" Width ="30" Height ="30" Fill ="#004c60"/>
-                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White"/>
+                        <Ellipse Name="OuterRing"
+                                 Width="30"
+                                 Height="30"
+                                 Fill="#004c60" />
+                        <ContentPresenter HorizontalAlignment="Center"
+                                          VerticalAlignment="Center"
+                                          Foreground="White" />
                     </Grid>
                 </ControlTemplate>
             </Setter.Value>
         </Setter>
     </Style>
-    <Style x:Key="ButtonStyleForCallBar"
-           TargetType="Button">
-        <Setter Property="Foreground"
-                Value="White"/>
-        <Setter Property="Background"
-                Value="#004c60"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
+    <Style x:Key="ButtonStyleForCallBar" TargetType="Button">
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="#004c60" />
+        <Setter Property="BorderThickness" Value="0" />
     </Style>
     <Style x:Key="ToggleButtonStyle2" TargetType="ToggleButton">
-        <Setter Property="Width"
-                Value="40"/>
-        <Setter Property="Height"
-                Value="30"/>
-        <Setter Property="FontFamily"
-                Value="Segoe MDL2 Assets"/>
-        <Setter Property="FontSize"
-                Value="15"/>
-        <Setter Property="Foreground"
-                Value="White"/>
-        <Setter Property="Background"
-                Value="Transparent"/>
-        <Setter Property="BorderThickness"
-                Value="0"/>
+        <Setter Property="Width" Value="37" />
+        <Setter Property="Height" Value="30" />
+        <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
+        <Setter Property="FontSize" Value="15" />
+        <Setter Property="Foreground" Value="White" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="BorderThickness" Value="0" />
         <Setter Property="Template">
             <Setter.Value>
                 <ControlTemplate TargetType="ToggleButton">
                     <Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
+                        <ContentPresenter x:Name="ContentPresenter"
+                                          Padding="{TemplateBinding Padding}"
+                                          HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                          VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
+                                          AutomationProperties.AccessibilityView="Raw"
+                                          BorderBrush="{TemplateBinding BorderBrush}"
+                                          BorderThickness="{TemplateBinding BorderThickness}"
+                                          Content="{TemplateBinding Content}"
+                                          ContentTemplate="{TemplateBinding ContentTemplate}"
+                                          ContentTransitions="{TemplateBinding ContentTransitions}" />
                         <VisualStateManager.VisualStateGroups>
                             <VisualStateGroup x:Name="CommonStates">
                                 <VisualState x:Name="Normal">
                                     <Storyboard>
-                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
                                     </Storyboard>
                                 </VisualState>
                                 <VisualState x:Name="PointerOver">
                                     <Storyboard>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
                                     </Storyboard>
                                 </VisualState>
                                 <VisualState x:Name="Pressed">
                                     <Storyboard>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid"/>
+                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid" />
                                     </Storyboard>
                                 </VisualState>
                                 <VisualState x:Name="Disabled">
                                     <Storyboard>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
                                         </ObjectAnimationUsingKeyFrames>
                                     </Storyboard>
                                 </VisualState>
                                 <VisualState x:Name="Checked">
                                     <Storyboard>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#e4f1f9"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#e4f1f9" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
                                     </Storyboard>
                                 </VisualState>
                                 <VisualState x:Name="CheckedPointerOver">
                                     <Storyboard>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#e4f1f9"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#e4f1f9" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
                                     </Storyboard>
                                 </VisualState>
                                 <VisualState x:Name="CheckedPressed">
                                     <Storyboard>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#e4f1f9"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#e4f1f9" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid"/>
+                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid" />
                                     </Storyboard>
                                 </VisualState>
                                 <VisualState x:Name="CheckedDisabled">
                                     <Storyboard>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#e4f1f9"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#e4f1f9" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
                                         </ObjectAnimationUsingKeyFrames>
                                     </Storyboard>
                                 </VisualState>
                                 <VisualState x:Name="Indeterminate">
                                     <Storyboard>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
                                     </Storyboard>
                                 </VisualState>
                                 <VisualState x:Name="IndeterminatePointerOver">
                                     <Storyboard>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/>
+                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
                                     </Storyboard>
                                 </VisualState>
                                 <VisualState x:Name="IndeterminatePressed">
                                     <Storyboard>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid"/>
+                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid" />
                                     </Storyboard>
                                 </VisualState>
                                 <VisualState x:Name="IndeterminateDisabled">
                                     <Storyboard>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="#abdaf9" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
                                         </ObjectAnimationUsingKeyFrames>
-                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
-                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/>
+                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
                                         </ObjectAnimationUsingKeyFrames>
                                     </Storyboard>
                                 </VisualState>
                             </VisualStateGroup>
                         </VisualStateManager.VisualStateGroups>
-                        <ContentPresenter x:Name="ContentPresenter" AutomationProperties.AccessibilityView="Raw" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" ContentTemplate="{TemplateBinding ContentTemplate}" ContentTransitions="{TemplateBinding ContentTransitions}" Content="{TemplateBinding Content}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                     </Grid>
                 </ControlTemplate>
             </Setter.Value>
         </Setter>
     </Style>
 
-</ResourceDictionary>
+</ResourceDictionary>
\ No newline at end of file
diff --git a/TextBlockExtension.cpp b/TextBlockExtension.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a17d7c4fa6ad8e46695d14bc5a442e65e10a79ab
--- /dev/null
+++ b/TextBlockExtension.cpp
@@ -0,0 +1,192 @@
+/**************************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas <traczyk.andreas@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 "pch.h"
+#include "TextBlockExtension.h"
+#include "HttpUtils.h"
+
+using namespace RingClientUWP;
+using namespace UserAndCustomControls;
+
+using namespace Platform;
+using namespace Windows::Foundation;
+using namespace Windows::Foundation::Collections;
+using namespace Windows::UI::Xaml;
+using namespace Windows::UI::Xaml::Controls;
+using namespace Windows::UI::Xaml::Controls::Primitives;
+using namespace Windows::UI::Xaml::Data;
+using namespace Windows::UI::Xaml::Input;
+using namespace Windows::UI::Xaml::Media;
+using namespace Windows::UI::Xaml::Media::Imaging;
+using namespace Windows::UI::Xaml::Navigation;
+using namespace Windows::UI::Xaml::Interop;
+using namespace Windows::UI::Xaml::Documents;
+using namespace Windows::UI::Core;
+
+TextBlockExtension::TextBlockExtension()
+{}
+
+void
+embeddedLoadCompleted(Object^ sender, NavigationEventArgs^ e)
+{
+    RingD::instance->raiseMessageDataLoaded();
+}
+
+void
+imageLoadCompleted(Object^ sender, RoutedEventArgs^ e)
+{
+    RingD::instance->raiseMessageDataLoaded();
+}
+
+void
+appendUrlToParagraph(Uri^ uri, Run^ run, Paragraph^ paragraph, bool& frameAdded, String^ str)
+{
+    Hyperlink^ link = ref new Hyperlink();
+    link->NavigateUri = uri;
+    link->Foreground = ref new Windows::UI::Xaml::Media::SolidColorBrush(Windows::UI::Colors::DarkBlue);
+    run->Text = str;
+    link->Inlines->Append(run);
+    if (frameAdded) {
+        paragraph->Inlines->Append(ref new LineBreak());
+        frameAdded = false;
+    }
+    paragraph->Inlines->Append(link);
+}
+
+DependencyProperty^ TextBlockExtension::FormattedTextProperty =
+DependencyProperty::Register("FormattedText", String::typeid, TextBlockExtension::typeid,
+    ref new PropertyMetadata(nullptr,
+        ref new PropertyChangedCallback([](DependencyObject^ sender, DependencyPropertyChangedEventArgs^ e)
+{
+    auto text = Utils::toString(static_cast<String^>(e->NewValue));
+    auto rtextBlock = static_cast<RichTextBlock^>(sender);
+    rtextBlock->Blocks->Clear();
+    auto paragraph = ref new Paragraph();
+    if (paragraph != nullptr) {
+        static auto regex_opts = std::regex_constants::icase;
+        const static std::regex abs_url_regex("((((https?):\/\/))[^\ ]+)", regex_opts);
+        const static std::regex url_regex("((((https?):\/\/)|www)[^\ ]+)", regex_opts);
+        const static std::regex youtube_regex("(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.?be)([^\=]+)=([^\ ]+)", regex_opts);
+        const static std::regex image_regex("[^\ ]+\.(gif|jpg|jpeg|png)", regex_opts);
+        const static std::regex word_regex("([^\ ]+)", regex_opts);
+
+        // emojis
+        const static std::regex emoji_smile("(^|\s):-?\\)(?!\S)|:smile", regex_opts);
+        const static std::regex emoji_wink("(^|\s);-?\\)(?!\S)|:wink", regex_opts);
+        const static std::regex emoji_grin("(^|\s):-?D(?!\S)|:grin", regex_opts);
+        const static std::regex emoji_meh("(^|\s):-?\\)(?!\S)|:meh", regex_opts);
+        const static std::regex emoji_sad("(^|\s):-?\\((?!\S)|:sad", regex_opts);
+        const static std::regex emoji_crazy("(^|\s);-?P(?!\S)", regex_opts);
+        const static std::regex emoji_tongue("(^|\s):-?P(?!\S)", regex_opts);
+        const static std::regex emoji_hmm("(^|\s):-?\\/(?!\S)");
+        const static std::regex emoji_rofl(":rofl", regex_opts);
+        const static std::regex emoji_heart("(^|\s)<3(?!\S)|:heart", regex_opts);
+
+        std::sregex_iterator next(text.begin(), text.end(), word_regex);
+        std::sregex_iterator end;
+        unsigned elementCount = 0;
+        bool frameAdded = false;
+        while (next != end) {
+            Run^ run = ref new Run();
+            Run^ postSpace = ref new Run();
+            postSpace->Text = " ";
+            std::smatch match = *next;
+            auto str = Utils::toPlatformString(match.str());
+            if (std::regex_match(match.str(), url_regex)) {
+                // it's a url so make it absolute if it's not already
+                if (!std::regex_match(match.str(), abs_url_regex))
+                    str = "http://" + str;
+                auto uri = ref new Uri(str);
+
+                // youtube embed
+                std::smatch groups;
+                std::string sub(match.str());
+                if (std::regex_search(sub, groups, youtube_regex)) {
+                    if (Utils::hasInternet()) {
+                        WebView^ webview = ref new WebView();
+                        webview->Width = 372;
+                        webview->Height = 208;
+                        auto videoId = Utils::toPlatformString(groups[5].str());
+                        String^ bodyStr = "<style>iframe,html,body{border:0px;margin:0px;padding:0px;overflow-y:hidden;}</style>";
+                        auto iframeStr = "<iframe width='372' height='210' src='https://www.youtube.com/embed/" +
+                            videoId + "' frameborder='0'></iframe>";
+                        webview->Margin = Windows::UI::Xaml::Thickness(2.0, 6.0, 4.0, 4.0);
+                        webview->NavigateToString(bodyStr + iframeStr);
+                        webview->LoadCompleted += ref new LoadCompletedEventHandler(&embeddedLoadCompleted);
+                        InlineUIContainer^ iuc = ref new InlineUIContainer();
+                        iuc->Child = webview;
+                        if (elementCount > 0)
+                            paragraph->Inlines->Append(ref new LineBreak());
+                        paragraph->Inlines->Append(iuc);
+                        frameAdded = true;
+                    }
+                    else {
+                        appendUrlToParagraph(uri, run, paragraph, frameAdded, str);
+                    }
+                }
+                // image
+                else if (std::regex_match(match.str(), image_regex)) {
+                    if (Utils::hasInternet()) {
+                        Image^ image = ref new Image();
+                        image->Source = ref new BitmapImage(uri);
+                        image->MaxWidth = 300;
+                        image->Margin = Windows::UI::Xaml::Thickness(2.0, 6.0, 4.0, 4.0);
+                        image->Loaded += ref new RoutedEventHandler(&imageLoadCompleted);
+                        InlineUIContainer^ iuc = ref new InlineUIContainer();
+                        iuc->Child = image;
+                        if (elementCount > 0)
+                            paragraph->Inlines->Append(ref new LineBreak());
+                        paragraph->Inlines->Append(iuc);
+                        frameAdded = true;
+                    }
+                    else {
+                        appendUrlToParagraph(uri, run, paragraph, frameAdded, str);
+                    }
+                }
+                else {
+                    appendUrlToParagraph(uri, run, paragraph, frameAdded, str);
+                }
+            }
+            // text chunk
+            else {
+                // convert text emoji representations to unicode
+                auto ansiEmojiString = std::regex_replace(match.str(), emoji_smile, "🙂");
+                ansiEmojiString = std::regex_replace(ansiEmojiString, emoji_wink, "😉");
+                ansiEmojiString = std::regex_replace(ansiEmojiString, emoji_grin, "😁");
+                ansiEmojiString = std::regex_replace(ansiEmojiString, emoji_meh, "😐");
+                ansiEmojiString = std::regex_replace(ansiEmojiString, emoji_sad, "☹");
+                ansiEmojiString = std::regex_replace(ansiEmojiString, emoji_crazy, "😜");
+                ansiEmojiString = std::regex_replace(ansiEmojiString, emoji_tongue, "😛");
+                ansiEmojiString = std::regex_replace(ansiEmojiString, emoji_hmm, "🤔");
+                ansiEmojiString = std::regex_replace(ansiEmojiString, emoji_rofl, "🤣");
+                ansiEmojiString = std::regex_replace(ansiEmojiString, emoji_heart, "❤");
+                run->Text = Utils::toPlatformString(ansiEmojiString);
+                if (frameAdded) {
+                    paragraph->Inlines->Append(ref new LineBreak());
+                    frameAdded = false;
+                }
+                paragraph->Inlines->Append(run);
+            }
+            // add space after everything
+            paragraph->Inlines->Append(postSpace);
+            elementCount++;
+            next++;
+        }
+        rtextBlock->Blocks->Append(paragraph);
+    }
+})));
\ No newline at end of file
diff --git a/TextBlockExtension.h b/TextBlockExtension.h
new file mode 100644
index 0000000000000000000000000000000000000000..aa6fc0c45972ff906bc2a2535cba3462019f251a
--- /dev/null
+++ b/TextBlockExtension.h
@@ -0,0 +1,54 @@
+/**************************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Traczyk Andreas <traczyk.andreas@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
+
+using namespace Windows::UI::Xaml::Controls;
+using namespace Windows::UI::Xaml::Interop;
+using namespace Windows::UI::Xaml;
+using namespace Windows::UI::Xaml::Media;
+using namespace Windows::UI::Xaml::Interop;
+using namespace Windows::UI::Xaml::Documents;
+using namespace Platform;
+
+#include "pch.h"
+#include <regex>
+
+namespace RingClientUWP
+{
+
+namespace UserAndCustomControls {
+
+public ref class TextBlockExtension sealed : public Control
+{
+private:
+    static DependencyProperty^ FormattedTextProperty;
+
+public:
+    TextBlockExtension::TextBlockExtension();
+
+    static String^ GetFormattedText(DependencyObject^ obj) {
+        return (String^)obj->GetValue(FormattedTextProperty);
+    };
+    static void SetFormattedText(DependencyObject^ obj, String^ value) {
+        obj->SetValue(FormattedTextProperty, value);
+    }
+
+};
+
+}
+}
\ No newline at end of file
diff --git a/UserModel.cpp b/UserModel.cpp
index b17caee6f483298a71ee4c4c2b28bb6cfc5193a5..b95e46896dc7f7a070a55060c8310954d3489834 100644
--- a/UserModel.cpp
+++ b/UserModel.cpp
@@ -7,7 +7,7 @@ using namespace RingClientUWP;
 void
 UserModel::getUserData()
 {
-    create_task(User::FindAllAsync())
+    /*create_task(User::FindAllAsync())
         .then([=](IVectorView<User^>^ users) {
         for (size_t index = 0; index < users->Size; index++) {
             auto user = users->GetAt(index);
@@ -24,5 +24,5 @@ UserModel::getUserData()
                 });
             }
         }
-    });
+    });*/
 }
\ No newline at end of file
diff --git a/UserPreferences.cpp b/UserPreferences.cpp
index fbf8ac1382bf2b8516d22287aa35778e7aecc847..9b4655929f5263b300c8794529cc1348c8eb0c59 100644
--- a/UserPreferences.cpp
+++ b/UserPreferences.cpp
@@ -18,12 +18,17 @@
  **************************************************************************/
 #include "pch.h"
 
-#include "base64.h"
+#include <direct.h>
+
+#include "lodepng.h"
 
 using namespace Windows::Data::Json;
 using namespace Windows::Storage;
 using namespace Windows::UI::Core;
 using namespace Windows::ApplicationModel::Core;
+using namespace Windows::Media::Capture;
+using namespace Windows::Media::MediaProperties;
+using namespace Windows::UI::Xaml::Media::Imaging;
 
 using namespace RingClientUWP;
 using namespace Platform;
@@ -31,6 +36,8 @@ using namespace Configuration;
 
 UserPreferences::UserPreferences()
 {
+    loaded_ = false;
+    profileImageLoaded = false;
     vCard_ = ref new VCardUtils::VCard(nullptr, nullptr);
     PREF_PROFILE_HASPHOTO = false;
     PREF_PROFILE_UID = stoull(Utils::genID(0LL, 9999999999999LL));
@@ -48,29 +55,37 @@ UserPreferences::save()
         file << Utils::toString(Stringify());
         file.close();
     }
+
     saveProfileToVCard();
 }
 
 void
 UserPreferences::load()
 {
-    StorageFolder^ localfolder = ApplicationData::Current->LocalFolder;
-    String^ preferencesFile = localfolder->Path + "\\preferences.json";
-
-    String^ fileContents = Utils::toPlatformString(Utils::getStringFromFile(Utils::toString(preferencesFile)));
-
-    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
-    ref new DispatchedHandler([=]() {
-        if (fileContents != nullptr) {
-            Destringify(fileContents);
-            saveProfileToVCard();
-            selectIndex(PREF_ACCOUNT_INDEX);
-            if (PREF_PROFILE_HASPHOTO)
-                loadProfileImage();
-        }
-        else
-            selectIndex(0);
-    }));
+    if (!loaded_) {
+        MSG_("loading client preferences...");
+        StorageFolder^ localfolder = ApplicationData::Current->LocalFolder;
+        String^ preferencesFile = localfolder->Path + "\\preferences.json";
+
+        String^ fileContents = Utils::toPlatformString(Utils::getStringFromFile(Utils::toString(preferencesFile)));
+
+        CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
+            ref new DispatchedHandler([=]() {
+            if (fileContents != nullptr) {
+                Destringify(fileContents);
+                auto index = PREF_ACCOUNT_INDEX;
+                if (PREF_ACCOUNT_ID != nullptr)
+                    index = ViewModel::AccountListItemsViewModel::instance->getIndex(PREF_ACCOUNT_ID);
+                selectIndex(index);
+                if (PREF_PROFILE_HASPHOTO && !profileImageLoaded)
+                    loadProfileImage();
+            }
+            else {
+                selectIndex(0);
+            }
+            loaded_ = true;
+        }));
+    }
 }
 
 String^
@@ -79,6 +94,7 @@ UserPreferences::Stringify()
     JsonObject^ preferencesObject = ref new JsonObject();
 
     preferencesObject->SetNamedValue("PREF_ACCOUNT_INDEX", JsonValue::CreateNumberValue(        PREF_ACCOUNT_INDEX   ));
+    preferencesObject->SetNamedValue("PREF_ACCOUNT_ID", JsonValue::CreateStringValue(           PREF_ACCOUNT_ID));
     preferencesObject->SetNamedValue("PREF_PROFILE_HASPHOTO", JsonValue::CreateBooleanValue(    PREF_PROFILE_HASPHOTO));
     preferencesObject->SetNamedValue("PREF_PROFILE_UID",    JsonValue::CreateNumberValue(static_cast<double>(PREF_PROFILE_UID)));
 
@@ -90,9 +106,15 @@ UserPreferences::Destringify(String^ data)
 {
     JsonObject^ jsonObject = JsonObject::Parse(data);
 
-    PREF_ACCOUNT_INDEX      = static_cast<int>(jsonObject->GetNamedNumber("PREF_ACCOUNT_INDEX"      ));
-    PREF_PROFILE_HASPHOTO   = jsonObject->GetNamedBoolean(                "PREF_PROFILE_HASPHOTO"   );
-    PREF_PROFILE_UID        = static_cast<uint64_t>(jsonObject->GetNamedNumber( "PREF_PROFILE_UID"  ));
+    PREF_ACCOUNT_ID = "";
+    PREF_ACCOUNT_INDEX = 0;
+
+    if (jsonObject->HasKey("PREF_ACCOUNT_ID"))
+        PREF_ACCOUNT_ID = jsonObject->GetNamedString("PREF_ACCOUNT_ID");
+    if (jsonObject->HasKey("PREF_ACCOUNT_INDEX"))
+        PREF_ACCOUNT_INDEX = static_cast<int>(jsonObject->GetNamedNumber("PREF_ACCOUNT_INDEX"));
+    PREF_PROFILE_HASPHOTO = jsonObject->GetNamedBoolean("PREF_PROFILE_HASPHOTO");
+    PREF_PROFILE_UID = static_cast<uint64_t>(jsonObject->GetNamedNumber( "PREF_PROFILE_UID"));
 
     JsonArray^ preferencesList = jsonObject->GetNamedArray("Account.index", ref new JsonArray());
 }
@@ -103,6 +125,12 @@ UserPreferences::getVCard()
     return vCard_;
 }
 
+void
+UserPreferences::raiseSelectIndex(int index)
+{
+    selectIndex(index);
+}
+
 void
 UserPreferences::saveProfileToVCard()
 {
@@ -114,7 +142,7 @@ UserPreferences::saveProfileToVCard()
     auto buffer = std::vector<uint8_t>(std::istreambuf_iterator<uint8_t>(stream), eos);
     auto accountListItem = ViewModel::AccountListItemsViewModel::instance->_selectedItem;
     vcfData[VCardUtils::Property::FN] = accountListItem ? Utils::toString(accountListItem->_account->name_) : "Unknown";
-    vcfData[VCardUtils::Property::PHOTO] = ring::base64::encode( buffer );
+    vcfData[VCardUtils::Property::PHOTO] = Utils::base64::encode( buffer );
     vCard_->setData(vcfData);
     vCard_->saveToFile();
 }
@@ -124,4 +152,52 @@ UserPreferences::sendVCard(std::string callID)
 {
     vCard_->send(callID,
         (RingD::instance->getLocalFolder() + "\\.vcards\\" + std::to_string(PREF_PROFILE_UID) + ".vcard").c_str());
+}
+
+task<BitmapImage^>
+Configuration::getProfileImageAsync()
+{
+    CameraCaptureUI^ cameraCaptureUI = ref new CameraCaptureUI();
+    cameraCaptureUI->PhotoSettings->Format = CameraCaptureUIPhotoFormat::Png;
+    cameraCaptureUI->PhotoSettings->CroppedSizeInPixels = Size(100, 100);
+
+    return create_task(cameraCaptureUI->CaptureFileAsync(CameraCaptureUIMode::Photo))
+    .then([](StorageFile^ photoFile)
+    {
+        auto bitmapImage = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage();
+        if (photoFile != nullptr) {
+            auto path = photoFile->Path;
+            auto uri = ref new Windows::Foundation::Uri(path);
+            bitmapImage->UriSource = uri;
+
+            std::string fileName = Utils::toString(photoFile->Path);
+            std::string fileBuffer = Utils::getStringFromFile(fileName);
+
+            // re-encode to remove windows meta-data
+            std::vector<uint8_t> image;
+            unsigned width, height;
+            unsigned err = lodepng::decode(image, width, height, fileName);
+            if (!err) {
+                lodepng::encode(fileName, image, width, height);
+            }
+
+            std::string profilePath = RingD::instance->getLocalFolder() + ".profile";
+            _mkdir(profilePath.c_str());
+            std::ofstream file((profilePath + "\\profile_image.png"),
+                               std::ios::out | std::ios::trunc | std::ios::binary);
+            if (file.is_open()) {
+                file << fileBuffer;
+                file.close();
+            }
+
+            Configuration::UserPreferences::instance->saveProfileToVCard();
+            Configuration::UserPreferences::instance->PREF_PROFILE_HASPHOTO = true;
+            Configuration::UserPreferences::instance->save();
+        }
+        else {
+            bitmapImage = nullptr;
+        }
+
+        return bitmapImage;
+    });
 }
\ No newline at end of file
diff --git a/UserPreferences.h b/UserPreferences.h
index fe24b44ba0abfaa9e5a0e6e1b0c2c6403ad8f641..5f764413cc9d8948cb0a0a9198c608cf9bf9bd46 100644
--- a/UserPreferences.h
+++ b/UserPreferences.h
@@ -46,10 +46,13 @@ public:
 
     /* properties */
     property int            PREF_ACCOUNT_INDEX;
+    property String^        PREF_ACCOUNT_ID;
     property uint64_t       PREF_PROFILE_UID;
     property bool           PREF_PROFILE_HASPHOTO;
     property String^        PREF_PROFILE_FN;
 
+    property bool           profileImageLoaded;
+
     /* functions */
     void                    save();
     void                    load();
@@ -58,6 +61,8 @@ public:
     VCardUtils::VCard^      getVCard();
     void                    saveProfileToVCard();
 
+    void                    raiseSelectIndex(int index);
+
 internal:
     void                    sendVCard(std::string callID);
 
@@ -66,10 +71,12 @@ internal:
     event LoadProfileImage^ loadProfileImage;
 
 private:
+    bool loaded_;
     VCardUtils::VCard^ vCard_;
     UserPreferences();
-
 };
 
+task<Windows::UI::Xaml::Media::Imaging::BitmapImage^> getProfileImageAsync();
+//void    getProfileImageAsync();
 }
 }
\ No newline at end of file
diff --git a/Utils.h b/Utils.h
index 4f163f8d2009b3d52d0db2112a1cc5998b88812a..cce7f73c3190315ac3b3bec42e7c2b340ed3eceb 100644
--- a/Utils.h
+++ b/Utils.h
@@ -20,6 +20,11 @@
 #include <pch.h>
 
 #include <random>
+#include <type_traits>
+#include <functional>
+
+#undef max
+#undef min
 
 using namespace Platform;
 using namespace Platform::Collections;
@@ -27,24 +32,123 @@ using namespace Windows::Foundation;
 using namespace Windows::Foundation::Collections;
 using namespace Windows::Storage;
 using namespace Windows::System;
-
-typedef Windows::UI::Xaml::Visibility VIS;
+using namespace Windows::Globalization::DateTimeFormatting;
+using namespace Windows::UI::Core;
+using namespace Windows::UI::Xaml;
+using namespace Windows::UI::Xaml::Media;
+using namespace Windows::UI::Xaml::Media::Imaging;
+using namespace Windows::UI::Xaml::Controls;
+using namespace Windows::UI::Xaml::Controls::Primitives;
+using namespace Windows::Networking::Connectivity;
+using namespace Windows::System::Threading;
+using namespace Windows::Security::Cryptography;
+using namespace Windows::Security::Cryptography::Core;
+using namespace Windows::Storage::Streams;
+
+using VIS = Windows::UI::Xaml::Visibility;
+static const uint64_t TICKS_PER_SECOND = 10000000;
+static const uint64_t EPOCH_DIFFERENCE = 11644473600LL;
 
 namespace RingClientUWP
 {
 namespace Utils
 {
-inline int
-fileExists(const std::string& name)
+
+namespace detail
 {
-    std::ifstream f(name.c_str());
-    return f.good();
+
+#include <stdint.h>
+#include <stdlib.h>
+
+/* Mainly based on the following stackoverflow question:
+* http://stackoverflow.com/questions/342409/how-do-i-base64-encode-decode-in-c
+*/
+static const char encoding_table[] = {
+    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
+    'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
+    'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
+    's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2',
+    '3', '4', '5', '6', '7', '8', '9', '+', '/'
+};
+
+static const size_t mod_table[] = { 0, 2, 1 };
+
+char *base64_encode(const uint8_t *input, size_t input_length,
+    char *output, size_t *output_length)
+{
+    size_t i, j;
+    size_t out_sz = *output_length;
+    *output_length = 4 * ((input_length + 2) / 3);
+    if (out_sz < *output_length || output == NULL)
+        return NULL;
+
+    for (i = 0, j = 0; i < input_length; ) {
+        uint8_t octet_a = i < input_length ? input[i++] : 0;
+        uint8_t octet_b = i < input_length ? input[i++] : 0;
+        uint8_t octet_c = i < input_length ? input[i++] : 0;
+
+        uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c;
+
+        output[j++] = encoding_table[(triple >> 3 * 6) & 0x3F];
+        output[j++] = encoding_table[(triple >> 2 * 6) & 0x3F];
+        output[j++] = encoding_table[(triple >> 1 * 6) & 0x3F];
+        output[j++] = encoding_table[(triple >> 0 * 6) & 0x3F];
+    }
+
+    for (i = 0; i < mod_table[input_length % 3]; i++)
+        output[*output_length - 1 - i] = '=';
+
+    return output;
 }
 
-inline int
-fileDelete(const std::string& file)
+uint8_t *base64_decode(const char *input, size_t input_length,
+    uint8_t *output, size_t *output_length)
 {
-    return std::remove(file.c_str());
+    size_t i, j;
+    uint8_t decoding_table[256];
+
+    uint8_t c;
+    for (c = 0; c < 64; c++)
+        decoding_table[static_cast<int>(encoding_table[c])] = c;
+
+    if (input_length % 4 != 0)
+        return NULL;
+
+    size_t out_sz = *output_length;
+    *output_length = input_length / 4 * 3;
+    if (input[input_length - 1] == '=')
+        (*output_length)--;
+    if (input[input_length - 2] == '=')
+        (*output_length)--;
+
+    if (out_sz < *output_length || output == NULL)
+        return NULL;
+
+    for (i = 0, j = 0; i < input_length;) {
+        uint8_t sextet_a = input[i] == '=' ? 0 & i++
+            : decoding_table[static_cast<int>(input[i++])];
+        uint8_t sextet_b = input[i] == '=' ? 0 & i++
+            : decoding_table[static_cast<int>(input[i++])];
+        uint8_t sextet_c = input[i] == '=' ? 0 & i++
+            : decoding_table[static_cast<int>(input[i++])];
+        uint8_t sextet_d = input[i] == '=' ? 0 & i++
+            : decoding_table[static_cast<int>(input[i++])];
+
+        uint32_t triple = (sextet_a << 3 * 6) +
+            (sextet_b << 2 * 6) +
+            (sextet_c << 1 * 6) +
+            (sextet_d << 0 * 6);
+
+        if (j < *output_length)
+            output[j++] = (triple >> 2 * 8) & 0xFF;
+        if (j < *output_length)
+            output[j++] = (triple >> 1 * 8) & 0xFF;
+        if (j < *output_length)
+            output[j++] = (triple >> 0 * 8) & 0xFF;
+    }
+
+    return output;
 }
 
 inline std::string
@@ -76,23 +180,77 @@ makeWString(const std::string& str)
         return std::wstring();
     }
 
-    return std::wstring(wide.get());;
+    return std::wstring(wide.get());
+}
+
+} /*namespace detail*/
+
+template<typename E>
+constexpr inline typename std::enable_if<   std::is_enum<E>::value,
+                                            typename std::underlying_type<E>::type
+                                        >::type
+toUnderlyingValue(E e) noexcept
+{
+    return static_cast<typename std::underlying_type<E>::type >( e );
+}
+
+template<typename E, typename T>
+constexpr inline typename std::enable_if<   std::is_enum<E>::value &&
+                                            std::is_integral<T>::value, E
+                                        >::type
+toEnum(T value) noexcept
+{
+    return static_cast<E>(value);
+}
+
+std::string
+fileNameOnly(const std::string& path)
+{
+    return path.substr(path.find_last_of("\\") + 1);
+}
+
+inline int
+fileExists(const std::string& name)
+{
+    std::ifstream f(name.c_str());
+    return f.good();
+}
+
+inline int
+fileDelete(const std::string& file)
+{
+    return std::remove(file.c_str());
 }
 
 inline std::string
 toString(Platform::String ^str)
 {
     std::wstring wsstr(str->Data());
-    return makeString(wsstr);
+    return detail::makeString(wsstr);
 }
 
 inline Platform::String^
 toPlatformString(const std::string& str)
 {
-    std::wstring wsstr = makeWString(str);
+    std::wstring wsstr = detail::makeWString(str);
     return ref new Platform::String(wsstr.c_str(), wsstr.length());
 }
 
+std::string
+getData(::Windows::Storage::Streams::IBuffer^ buf)
+{
+    auto reader = ::Windows::Storage::Streams::DataReader::FromBuffer(buf);
+
+    std::vector<unsigned char> data(reader->UnconsumedBufferLength);
+
+    if (!data.empty())
+        reader->ReadBytes(
+            ::Platform::ArrayReference<unsigned char>(
+                &data[0], data.size()));
+
+    return std::string(data.begin(), data.end());
+}
+
 Platform::String^
 Trim(Platform::String^ s)
 {
@@ -172,11 +330,22 @@ TrimCmd(Platform::String^ s)
     while (first != last && last[0] != '\ ')
         --last;
 
-        //last--;
-
     return ref new Platform::String(first, sizeof(last));
 }
 
+String^
+getUpperInitial(String^ str)
+{
+    if (str != nullptr || str != "") {
+        std::wstring s(str->Data());
+        auto it = str->Begin();
+        wchar_t ch[] = L" ";
+        ch[0] = towupper(it[0]);
+        return ref new String(ch);
+    }
+    return "?";
+}
+
 Platform::String^
 TrimParameter(Platform::String^ s)
 {
@@ -256,11 +425,11 @@ findIn(std::vector<T> vec, T val)
 }
 
 std::string
-genID(long long lower, long long upper)
+genID(uint64_t lower, uint64_t upper)
 {
     std::random_device r;
     std::mt19937 gen(r());
-    std::uniform_int_distribution<long long> idgen {lower, upper};
+    std::uniform_int_distribution<uint64_t> idgen {lower, upper};
 
     uint16_t digits = 0;
     if (upper < 0LL)
@@ -278,6 +447,22 @@ genID(long long lower, long long upper)
     return o.str();
 }
 
+bool
+hasInternet()
+{
+    auto connectionProfile = NetworkInformation::GetInternetConnectionProfile();
+    return (connectionProfile != nullptr &&
+        connectionProfile->GetNetworkConnectivityLevel() == NetworkConnectivityLevel::InternetAccess);
+}
+
+std::string
+getHostName()
+{
+    auto hostNames = NetworkInformation::GetHostNames();
+    auto hostName = hostNames != nullptr ? toString(hostNames->GetAt(0)->DisplayName) : "";
+    return hostName;
+}
+
 Windows::UI::Color
 ColorFromString(String^ s)
 {
@@ -288,5 +473,241 @@ ColorFromString(String^ s)
         return Windows::UI::ColorHelper::FromArgb(255, 0, 0, 0);
 }
 
+// 21 XBOX/Web ready colors
+// https://docs.microsoft.com/en-us/windows/uwp/style/color
+auto colorStrings = ref new Vector<String^>({
+    "#ffEB8C10",
+    "#ffED5588",
+    "#ff1073D6",
+    "#ff148282",
+    "#ff107C10",
+    "#ff4C4A4B",
+    "#ff00CC6A",
+    "#ffBF1077",
+    "#ff193E91",
+    "#ff54A81B",
+    "#ff737373",
+    "#ff7E715C",
+    "#ff6B69D6",
+    "#ffB144C0",
+    "#ff1081CA",
+    "#ff547A72",
+    "#ff677488",
+    "#ff724F2F",
+    "#ffA21025",
+    "#ff744DA9",
+    "#ff108272"
+});
+
+String^
+computeMD5(String^ strMsg)
+{
+    String^ strAlgName = HashAlgorithmNames::Md5;
+    IBuffer^ buffUtf8Msg = CryptographicBuffer::ConvertStringToBinary(strMsg, BinaryStringEncoding::Utf8);
+    HashAlgorithmProvider^ algProv = HashAlgorithmProvider::OpenAlgorithm(strAlgName);
+    IBuffer^ buffHash = algProv->HashData(buffUtf8Msg);
+    String^ hex = CryptographicBuffer::EncodeToHexString(buffHash);
+    return hex;
+}
+
+unsigned
+mapToRange(unsigned value, unsigned from_low, unsigned from_high, unsigned to_low, unsigned to_high)
+{
+    unsigned from_range = from_high - from_low;
+    unsigned to_range = to_high - to_low;
+    auto factor = static_cast<double>(to_range) / static_cast<double>(from_range);
+    return static_cast<unsigned>(factor * static_cast<double>(value));
+}
+
+unsigned
+hashToRange(std::string hash, unsigned to_low, unsigned to_high)
+{
+    unsigned x;
+    std::stringstream ss;
+    ss << std::hex << hash.substr(0, 2);
+    ss >> x;
+    return mapToRange(static_cast<unsigned>(x), 0, 255, to_low, to_high);
+}
+
+unsigned int
+generateRandomNumberInRange(uint32_t min, uint32_t max)
+{
+    auto rnd = static_cast<float>(CryptographicBuffer::GenerateRandomNumber());
+    auto normalized = rnd / std::numeric_limits<unsigned int>::max();
+    auto amp = static_cast<float>(max - min);
+    return static_cast<unsigned int>(min + normalized * amp);
+}
+
+String^
+getRandomColorString()
+{
+    auto index = generateRandomNumberInRange(0, 21);
+    return colorStrings->GetAt(index);
+}
+
+String^
+getRandomColorStringFromString(String^ str)
+{
+    auto index = hashToRange(toString(computeMD5(str)), 0, 21);
+    return colorStrings->GetAt(index);
+}
+
+SolidColorBrush^
+solidColorBrushFromString(String^ colorString)
+{
+    return ref new SolidColorBrush(ColorFromString(colorString));
+}
+
+template <typename... Args>
+void
+runOnWorkerThread(  std::function<void()> const& f,
+                    WorkItemPriority priority = WorkItemPriority::Normal)
+{
+    ThreadPool::RunAsync(ref new WorkItemHandler([=](IAsyncAction^ spAction)
+    {
+        f();
+    }, Platform::CallbackContext::Any), priority);
+}
+
+template <typename... Args>
+void
+runOnUIThread(  std::function<void()> const& f,
+                CoreDispatcherPriority priority = CoreDispatcherPriority::High)
+{
+    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(priority,
+        ref new DispatchedHandler([=]()
+    {
+        f();
+    }));
+}
+
+template <typename... Args>
+void
+runOnUIThreadDelayed(int delayInMilliSeconds, std::function<void()> const& f)
+{
+    // duration is measured in 100-nanosecond units
+    TimeSpan delay;
+    delay.Duration = 10000 * delayInMilliSeconds;
+    ThreadPoolTimer^ delayTimer = ThreadPoolTimer::CreateTimer(
+        ref new TimerElapsedHandler([=](ThreadPoolTimer^ source)
+    {
+        runOnUIThread(f);
+    }), delay);
+}
+
+namespace time
+{
+
+String^ computedShortDateTimeString;
+Windows::Globalization::Calendar^ calendar = ref new Windows::Globalization::Calendar();
+DateTimeFormatter^ shortdateTimeFormatter = ref new DateTimeFormatter("shortdate");
+DateTimeFormatter^ dayofweekTimeFormatter = ref new DateTimeFormatter("dayofweek");
+DateTimeFormatter^ hourminuteTimeFormatter = ref new DateTimeFormatter("hour minute");
+
+DateTime
+epochToDateTime(std::time_t epochTime)
+{
+    Windows::Foundation::DateTime dateTime;
+    dateTime.UniversalTime = (epochTime + EPOCH_DIFFERENCE) * TICKS_PER_SECOND;
+    return dateTime;
+}
+
+DateTime
+currentDateTime()
+{
+    return calendar->GetDateTime();
+}
+
+std::time_t
+currentTimestamp()
+{
+    return std::time(nullptr);
+}
+
+String^
+dateTimeToString(DateTime dateTime, String^ format)
+{
+    if (format == "shortdate" )
+        return shortdateTimeFormatter->Format(dateTime);
+    else if (format == "dayofweek")
+        return dayofweekTimeFormatter->Format(dateTime);
+    else if (format == "hour minute")
+        return hourminuteTimeFormatter->Format(dateTime);
+    return nullptr;
+}
+
+std::time_t
+dateTimeToEpoch(DateTime dateTime)
+{
+    return static_cast<std::time_t>(dateTime.UniversalTime / TICKS_PER_SECOND - EPOCH_DIFFERENCE);
+}
+
+}
+
+namespace xaml
+{
+
+Windows::UI::Xaml::FrameworkElement^
+FindVisualChildByName(DependencyObject^ obj, String^ name)
+{
+    FrameworkElement^ ret;
+    int numChildren = VisualTreeHelper::GetChildrenCount(obj);
+    for (int i = 0; i < numChildren; i++)
+    {
+        auto objChild = VisualTreeHelper::GetChild(obj, i);
+        auto child = safe_cast<FrameworkElement^>(objChild);
+        if (child != nullptr && child->Name == name)
+        {
+            return child;
+        }
+
+        ret = FindVisualChildByName(objChild, name);
+        if (ret != nullptr)
+            break;
+    }
+    return ret;
+}
+
+} /*namespace xaml*/
+
+namespace base64
+{
+
+std::string
+encode(const std::vector<uint8_t>::const_iterator begin,
+    const std::vector<uint8_t>::const_iterator end)
+{
+    size_t output_length = 4 * ((std::distance(begin, end) + 2) / 3);
+    std::string out;
+    out.resize(output_length);
+    detail::base64_encode(&(*begin), std::distance(begin, end),
+        &(*out.begin()), &output_length);
+    out.resize(output_length);
+    return out;
+}
+
+std::string
+encode(const std::vector<uint8_t>& dat)
+{
+    return encode(dat.cbegin(), dat.cend());
+}
+
+std::vector<uint8_t>
+decode(const std::string& str)
+{
+    size_t output_length = str.length() / 4 * 3 + 2;
+    std::vector<uint8_t> output;
+    output.resize(output_length);
+    detail::base64_decode(str.data(), str.size(), output.data(), &output_length);
+    output.resize(output_length);
+    return output;
+}
+
+} /*namespace base64*/
+
 } /*namespace Utils*/
+
+String^ SuccessColor = "#FF00CC6A";
+String^ ErrorColor = "#FFFF4343";
+
 } /*namespace RingClientUWP*/
\ No newline at end of file
diff --git a/VCardUtils.cpp b/VCardUtils.cpp
index a944cbd8b67c13fb9dd2b34ce14e5a47331ce3b6..68999c3f95ccf9bb087a2fcd1963db0e1515e56a 100644
--- a/VCardUtils.cpp
+++ b/VCardUtils.cpp
@@ -18,10 +18,10 @@
 **************************************************************************/
 #include <pch.h>
 
-#include "base64.h"
-
 #include <direct.h>
 
+#include "lodepng.h"
+
 using namespace RingClientUWP;
 using namespace ViewModel;
 using namespace VCardUtils;
@@ -38,6 +38,27 @@ getBetweenTokens(   const std::string& str,
     return str.substr(start, length);
 }
 
+std::map<std::string, std::string>
+VCardUtils::parseContactRequestPayload(const std::string& payload)
+{
+    std::map<std::string, std::string> map;
+
+    std::stringstream _payload(payload);
+    std::string _line;
+
+    while (std::getline(_payload, _line)) {
+        auto msgPos = _line.find(Symbols::END_TOKEN);
+        if (msgPos != std::string::npos) {
+            if (std::getline(_payload, _line))
+                map["MESSAGE"].append(_line);
+            break;
+        }
+        map["VCARD"].append(_line).append("\n");
+    }
+
+    return map;
+}
+
 VCard::VCard(Contact^ owner, String^ accountId)
     : m_Owner(owner), m_accountId(Utils::toString(accountId))
 {}
@@ -46,99 +67,114 @@ int
 VCard::receiveChunk(const std::string& args, const std::string& payload)
 {
     MSG_("receive VCARD chunk");
+    static int partsReceived = 0;
+    static std::vector<std::string> parts;
 
     int32_t _id = stoi( getBetweenTokens(args, Symbols::ID_TOKEN, Symbols::PART_TOKEN) );
     uint32_t _part = stoi( getBetweenTokens(args, Symbols::PART_TOKEN, Symbols::OF_TOKEN) );
     uint32_t _of = stoi( getBetweenTokens(args, Symbols::OF_TOKEN) );
 
-    std::stringstream _payload(payload);
-    std::string _line;
+    if (parts.empty())
+        parts.resize(_of);
 
-    if (_part == 1) {
+    if (parts[_part - 1].empty()) {
+        parts[_part - 1].assign(payload);
+        partsReceived++;
 
-        m_mParts.clear();
-
-        bool foundUID = false;
-        while (std::getline(_payload, _line)) {
-            if (_line.find("UID:") != std::string::npos) {
-                foundUID =  true;
-                break;
+        if (partsReceived == _of) {
+            m_data.clear();
+            for (const auto& part : parts) {
+                m_data.append(part);
             }
-        }
-        if (foundUID)
-            m_mParts[Property::UID] = _line.substr(4);
-        else
-            m_mParts[Property::UID] = Utils::genID(0LL, 9999999999999LL);
-
-        bool fnFound = false;
-        while (std::getline(_payload, _line)) {
-            if (_line.find("FN:") != std::string::npos) {
-                fnFound = true;
-                break;
-            }
-        }
-        if (fnFound)
-            m_mParts[Property::FN] = _line.substr(3);
-
-        while (std::getline(_payload, _line)) {
-            if (_line.find("PHOTO;") != std::string::npos)
-                break;
-        }
 
-        // because android client builds vcard differently (TYPE=PNG: vs PNG:)
-        size_t pos = _line.find("PNG:");
-        if (pos == std::string::npos) {
-            pos = _line.find("JPEG:");
-            if (pos != std::string::npos)
-                m_mParts[Property::PHOTO].append(_line.substr(pos + 5));
-        }
-        else
-            m_mParts[Property::PHOTO].append(_line.substr(pos + 4));
+            partsReceived = 0;
+            parts.clear();
 
-        if (_of == 1) {
             completeReception();
             MSG_("VCARD_COMPLETE");
             return VCARD_COMPLETE;
         }
-        return VCARD_INCOMPLETE;
     }
-    else {
-        if (_part == _of) {
-            std::getline(_payload, _line);
-            m_mParts[Property::PHOTO].append(_line);
-
-            bool fnFound = false;
-            while (std::getline(_payload, _line)) {
-                if (_line.find("FN:") != std::string::npos) {
-                    fnFound = true;
-                    break;
-                }
-            }
-            if (fnFound)
-                m_mParts[Property::FN] = _line.substr(3);
 
-            completeReception();
-            MSG_("VCARD_COMPLETE");
-            return VCARD_COMPLETE;
+    return VCARD_INCOMPLETE;
+}
+
+int
+VCard::parseFromString()
+{
+    std::stringstream _data(m_data);
+    std::string _line;
+
+    // save hash of old photo
+    auto md5_0 = Utils::computeMD5(Utils::toPlatformString(m_mParts[Property::PHOTO]));
+
+    m_mParts.clear();
+
+    bool foundUID = false;
+    while (std::getline(_data, _line)) {
+        if (_line.find("UID:") != std::string::npos) {
+            foundUID =  true;
+            break;
         }
-        else {
-            m_mParts[Property::PHOTO].append(payload);
-            return VCARD_INCOMPLETE;
+    }
+    if (foundUID)
+        m_mParts[Property::UID] = _line.substr(4);
+    else
+        m_mParts[Property::UID] = Utils::genID(0LL, 9999999999999LL);
+
+    bool foundFN = false;
+    while (std::getline(_data, _line)) {
+        if (_line.find("FN:") != std::string::npos) {
+            foundFN = true;
+            break;
         }
     }
-    return VCARD_CHUNK_ERROR;
+    if (foundFN)
+        m_mParts[Property::FN] = _line.substr(3);
+
+    while (std::getline(_data, _line)) {
+        if (_line.find("PHOTO;") != std::string::npos)
+            break;
+    }
+
+    // because android client builds vcard differently (TYPE=PNG: vs PNG:)
+    size_t pos = _line.find("PNG:");
+    if (pos == std::string::npos) {
+        pos = _line.find("JPEG:");
+        if (pos != std::string::npos)
+            m_mParts[Property::PHOTO].append(_line.substr(pos + 5));
+    }
+    else
+        m_mParts[Property::PHOTO].append(_line.substr(pos + 4));
+
+    // avoid updating an unchanged photo
+    auto md5_1 = Utils::computeMD5(Utils::toPlatformString(m_mParts[Property::PHOTO]));
+    if (md5_0 == md5_1) {
+        MSG_("Duplicate Vcard PHOTO received");
+        return 0;
+    }
+
+    return 1;
 }
 
 void
 VCard::completeReception()
 {
-    saveToFile();
-    decodeBase64ToPNGFile();
+    if (parseFromString()) {
+        saveToFile();
+        decodeBase64ToPNGFile();
+    }
+    else {
+        return;
+    }
+
     if (!m_mParts[Property::FN].empty())
         m_Owner->_displayName = Utils::toPlatformString(m_mParts[Property::FN]);
     m_Owner->_vcardUID = Utils::toPlatformString(m_mParts[Property::UID]);
     if (auto contactListModel =  AccountsViewModel::instance->getContactListModel(m_accountId))
         contactListModel->saveContactsToFile();
+    RingD::instance->raiseVCardUpdated(m_Owner);
+    SmartPanelItemsViewModel::instance->update({ "_avatarImage" });
 }
 
 void
@@ -213,7 +249,16 @@ VCard::decodeBase64ToPNGFile()
     if (padding)
         m_mParts[Property::PHOTO].append(padding, 0);
 
-    std::vector<uint8_t> decodedData = ring::base64::decode(m_mParts[Property::PHOTO]);
+    std::vector<uint8_t> decodedData = Utils::base64::decode(m_mParts[Property::PHOTO]);
+
+    std::vector<uint8_t> image;
+    unsigned width, height;
+    unsigned err = lodepng::decode(image, width, height, decodedData);
+    if (err) {
+        MSG_("decoded PNG data corrupt - aborting save to file");
+        return;
+    }
+
     std::string vcardDir(RingD::instance->getLocalFolder() + ".vcards\\");
     std::string pngFile(m_mParts[Property::UID] + ".png");
     MSG_("Saving PNG (" + m_mParts[Property::UID] + ") to " + pngFile + "...");
@@ -223,6 +268,7 @@ VCard::decodeBase64ToPNGFile()
             for (auto i : decodedData)
                 file << i;
             file.close();
+            //RingClientUWP::ResourceMananger::instance->preloadImage(Utils::toPlatformString(vcardDir + pngFile));
             m_Owner->_avatarImage = Utils::toPlatformString(vcardDir + pngFile);
             MSG_("Done decoding and saving VCard Photo to PNG");
         }
@@ -238,7 +284,7 @@ VCard::encodePNGToBase64()
     if (file.is_open()) {
         auto eos = std::istreambuf_iterator<uint8_t>();
         auto data = std::vector<uint8_t>(std::istreambuf_iterator<uint8_t>(file), eos);
-        m_mParts[Property::PHOTO] = ring::base64::encode(data);
+        m_mParts[Property::PHOTO] = Utils::base64::encode(data);
         file.close();
         MSG_("Done encoding PNG to b64");
     }
@@ -267,3 +313,15 @@ VCard::setData(std::map<std::string, std::string> data)
 {
     m_mParts = data;
 }
+
+void
+VCard::setData(const std::string& data)
+{
+    m_data = data;
+}
+
+std::string
+VCard::getPart(const std::string& part)
+{
+    return m_mParts.at(part);
+}
\ No newline at end of file
diff --git a/VCardUtils.h b/VCardUtils.h
index 647429bd854502304d71d5b9df077533d0146392..105f523c18900477310f0f42d3e7280809e54fd4 100644
--- a/VCardUtils.h
+++ b/VCardUtils.h
@@ -44,7 +44,7 @@ struct Symbols {
     constexpr static const char* SEPERATOR1             =   ";";
     constexpr static const char* SEPERATOR2             =   ":";
     constexpr static const char* PHOTO_ENC              =   "ENDCODING=BASE64";
-    constexpr static const char* PHOTO_TYPE             =   "TYPE=JPEG";
+    constexpr static const char* PHOTO_TYPE             =   "TYPE=PNG";
 };
 
 struct Property {
@@ -65,19 +65,25 @@ internal:
     void                    sendChunk(std::string callID, std::map<std::string, std::string> chunk);
     void                    send(std::string callID, const char* file = nullptr);
     std::string             asString();
+    std::string             getPart(const std::string& part);
     int                     saveToFile();
     void                    decodeBase64ToPNGFile();
     void                    encodePNGToBase64();
 
     void                    completeReception();
+    int                     parseFromString();
     void                    setData(std::map<std::string, std::string> data);
+    void                    setData(const std::string& data);
 
 private:
-    std::map<std::string, std::string>  m_mParts     {       };
+    std::string             m_data;
+    std::map<std::string, std::string>  m_mParts;
     Contact^                m_Owner;
     int                     m_type;
     std::string             m_accountId;
 };
 
+std::map<std::string, std::string> parseContactRequestPayload(const std::string& payload);
+
 }
 }
\ No newline at end of file
diff --git a/VideoCaptureManager.cpp b/VideoCaptureManager.cpp
index 583c43c1b8f3057372571552bbd8a3a9512fd9fd..c560c3fcacc8736159aa764124a1bc2aaeeabd8b 100644
--- a/VideoCaptureManager.cpp
+++ b/VideoCaptureManager.cpp
@@ -60,7 +60,7 @@ VideoCaptureManager::VideoCaptureManager():
 })
 {
     deviceList = ref new Vector<Device^>();
-    InitializeCopyFrameDispatcher(60);
+    InitializeCopyFrameDispatcher(120);
     captureTaskTokenSource = new cancellation_token_source();
 }
 
@@ -145,7 +145,7 @@ VideoCaptureManager::StartPreviewAsync(bool isSettingsPreview)
             MSG_("StartPreviewAsync DONE");
         }
         catch (Exception ^e) {
-            WriteException(e);
+            EXC_(e);
         }
     });
 }
@@ -170,7 +170,7 @@ VideoCaptureManager::StopPreviewAsync()
                 MSG_("StopPreviewAsync DONE");
             }
             catch (Exception ^e) {
-                WriteException(e);
+                EXC_(e);
             }
         });
     }
@@ -206,7 +206,7 @@ VideoCaptureManager::InitializeCameraAsync(bool isSettingsPreview)
             return StartPreviewAsync(isSettingsPreview);
         }
         catch (Exception ^e) {
-            WriteException(e);
+            EXC_(e);
             return concurrency::task_from_result();
         }
     });
@@ -245,13 +245,13 @@ VideoCaptureManager::EnumerateWebcamsAsync()
                     }
                     catch (Exception^ e) {
                         ERR_("One doesn't simply start Ring daemon...");
-                        WriteException(e);
+                        EXC_(e);
                     }
                 });
             }
         }
         catch (Platform::Exception^ e) {
-            WriteException(e);
+            EXC_(e);
         }
     });
 }
@@ -379,7 +379,7 @@ VideoCaptureManager::AddVideoDeviceAsync(uint8_t index)
             DRing::addVideoDevice(Utils::toString(device->name()), &devInfo);
         }
         catch (Platform::Exception^ e) {
-            WriteException(e);
+            EXC_(e);
         }
     });
 }
@@ -400,7 +400,7 @@ VideoCaptureManager::InitializeCopyFrameDispatcher(unsigned frameRate)
         isRendering = false;
     }
     catch (Exception^ e) {
-        MSG_(e->ToString());
+        EXC_(e);
     }
 }
 
@@ -415,7 +415,7 @@ VideoCaptureManager::CopyFrame(Object^ sender, Object^ e)
                 copyTask.get();
             }
             catch (Exception^ e) {
-                WriteException(e);
+                EXC_(e);
                 isRendering = false;
                 StopPreviewAsync();
                 videoFrameCopyInvoker->Stop();
@@ -434,9 +434,10 @@ VideoCaptureManager::CopyFrameAsync()
     unsigned int videoFrameWidth = activeDevice->currentResolution()->width();
     unsigned int videoFrameHeight = activeDevice->currentResolution()->height();
 
-    auto allprops = mediaCapture->VideoDeviceController->GetAvailableMediaStreamProperties(MediaStreamType::VideoPreview);
+   /* auto allprops = mediaCapture->VideoDeviceController->GetAvailableMediaStreamProperties(MediaStreamType::VideoPreview);
     MediaProperties::VideoEncodingProperties^ vidprops = static_cast<VideoEncodingProperties^>(allprops->GetAt(0));
     String^ format = vidprops->Subtype;
+    MSG_(format);*/
 
     auto videoFrame = ref new VideoFrame(BitmapPixelFormat::Bgra8, videoFrameWidth, videoFrameHeight);
 
@@ -475,7 +476,7 @@ VideoCaptureManager::CopyFrameAsync()
 
             }
             catch (Exception^ e) {
-                WriteException(e);
+                EXC_(e);
                 throw ref new Exception(e->HResult, e->Message);
             }
         }).then([=](task<void> renderCaptureToBufferTask) {
@@ -484,12 +485,12 @@ VideoCaptureManager::CopyFrameAsync()
                 isRendering = false;
             }
             catch (Platform::Exception^ e) {
-                WriteException(e);
+                EXC_(e);
             }
         });
     }
     catch(Exception^ e) {
-        WriteException(e);
+        EXC_(e);
         throw ref new Exception(e->HResult, e->Message);
     }
 }
@@ -521,7 +522,8 @@ VideoCaptureManager::SetCaptureSettings()
             MSG_("SetCaptureSettings DONE");
         }
         catch (Exception^ e) {
-            WriteException(e);
+            EXC_(e);
+
         }
     });
 }
\ No newline at end of file
diff --git a/VideoPage.xaml b/VideoPage.xaml
index 8b7afdb4d07454418c357ef1f5edf56e0c810ffc..c86658c5d5f85d053057b75380c1dd105afbe9ca 100644
--- a/VideoPage.xaml
+++ b/VideoPage.xaml
@@ -15,73 +15,160 @@
 *                                                                         *
 * You should have received a copy of the GNU General Public License       *
 * along with this program.  If not, see <http://www.gnu.org/licenses/> .  *
-*********************************************************************** -->
-<Page
-    x:Class="RingClientUWP.Views.VideoPage"
-    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:local="using:RingClientUWP"
-    xmlns:views="using:RingClientUWP.Views"
-    xmlns:ctl="using:RingClientUWP.Controls"
-    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    mc:Ignorable="d"
-    NavigationCacheMode="Enabled">
+***********************************************************************-->
+<Page x:Class="RingClientUWP.Views.VideoPage"
+      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+      xmlns:ctl="using:RingClientUWP.Controls"
+      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+      xmlns:local="using:RingClientUWP"
+      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+      xmlns:uc="using:RingClientUWP.UserAndCustomControls"
+      xmlns:views="using:RingClientUWP.Views"
+      NavigationCacheMode="Enabled"
+      mc:Ignorable="d">
 
     <Page.Resources>
-        <SolidColorBrush x:Key="SemiTransparentBlack" Color="#808080" Opacity="0.5"/>
-        <Storyboard x:Name="myStoryboard">
+        <SolidColorBrush x:Key="SemiTransparentBlack"
+                         Opacity="0.5"
+                         Color="#808080" />
+        <Storyboard x:Name="fadeVideoControlsStoryboard">
             <DoubleAnimationUsingKeyFrames Storyboard.TargetName="_controlsBar_"
-                             Storyboard.TargetProperty="Opacity"
-                             Duration="0:0:4">
-                <LinearDoubleKeyFrame Value="1" KeyTime="0:0:0" />
-                <LinearDoubleKeyFrame Value="1" KeyTime="0:0:2" />
-                <LinearDoubleKeyFrame Value="0" KeyTime="0:0:4" />
+                                           Storyboard.TargetProperty="Opacity"
+                                           Duration="0:0:4">
+                <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1" />
+                <LinearDoubleKeyFrame KeyTime="0:0:2" Value="1" />
+                <LinearDoubleKeyFrame KeyTime="0:0:4" Value="0" />
 
             </DoubleAnimationUsingKeyFrames>
             <DoubleAnimationUsingKeyFrames Storyboard.TargetName="_headerBar_"
-                             Storyboard.TargetProperty="Opacity"
-                             Duration="0:0:4">
-                <LinearDoubleKeyFrame Value="1" KeyTime="0:0:0" />
-                <LinearDoubleKeyFrame Value="1" KeyTime="0:0:2" />
-                <LinearDoubleKeyFrame Value="0" KeyTime="0:0:4" />
+                                           Storyboard.TargetProperty="Opacity"
+                                           Duration="0:0:4">
+                <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1" />
+                <LinearDoubleKeyFrame KeyTime="0:0:2" Value="1" />
+                <LinearDoubleKeyFrame KeyTime="0:0:4" Value="0" />
             </DoubleAnimationUsingKeyFrames>
         </Storyboard>
-        <!-- bubble -->
-        <views:BubbleBackground x:Key="_bubbleBackground_" />
-        <views:BubbleHorizontalAlignement x:Key="_bubbleHorizontalAlignement_" />
-        <DataTemplate x:Key="ConversationMessageTemplate"
-                      x:DataType="local:ConversationMessage">
-            <Grid Margin="6,0,12,0"
-                  HorizontalAlignment="{x:Bind FromContact, Converter={StaticResource _bubbleHorizontalAlignement_}}" >
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="2*" />
-                    <ColumnDefinition Width="8*" />
-                </Grid.ColumnDefinitions>
-                <Border  Background="{x:Bind FromContact, Converter={StaticResource _bubbleBackground_}}"
-                         CornerRadius="10"
-                         Grid.Column="1"
-                         Width="auto"
-                         Height="auto"
-                         Padding="5"
-                         Margin="5" >
-                    <ContentPresenter>
-                        <!--Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."-->
-                        <TextBlock x:Name="_msgContent_"
-                                   TextWrapping="Wrap"
-                                   IsTextSelectionEnabled="True"
-                                   Text="{x:Bind Payload}"
-                                   Foreground="White"/>
-                    </ContentPresenter>
-                </Border>
+
+        <DataTemplate x:Key="ConversationMessageTemplate" x:DataType="local:ConversationMessage">
+            <Grid Margin="12,0,20,0" HorizontalAlignment="{x:Bind FromContact, Converter={StaticResource _bubbleHorizontalAlignement_}}">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="*" />
+                    <RowDefinition Height="{x:Bind MessageIndex, Converter={StaticResource _MessageChainBreakToHeight_}, Mode=OneWay}" />
+                </Grid.RowDefinitions>
+                <!--  avatar, message spikes, and message body  -->
+                <Grid Grid.Row="0">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="40" />
+                        <ColumnDefinition Width="10" />
+                        <ColumnDefinition Width="2*" />
+                        <ColumnDefinition Width="8*" />
+                    </Grid.ColumnDefinitions>
+                    <!--  avatar  -->
+                    <Grid Grid.Column="0"
+                          Visibility="{x:Bind MessageIndex, Converter={StaticResource _MessageChainBreakToVisibility_}, ConverterParameter=First}">
+                        <Ellipse Width="36"
+                                 Height="36"
+                                 Canvas.ZIndex="1"
+                                 Margin="0,2,0,0"
+                                 HorizontalAlignment="Center"
+                                 VerticalAlignment="Top"
+                                 Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}}">
+                            <Ellipse.Fill>
+                                <ImageBrush x:Name="_contactAvatar_" ImageSource="{x:Bind MessageAvatar, Mode=OneWay}" />
+                            </Ellipse.Fill>
+                        </Ellipse>
+                        <Grid Width="36"
+                              Height="36"
+                              Canvas.ZIndex="0"
+                              Margin="0,2,0,0"
+                              HorizontalAlignment="Center"
+                              VerticalAlignment="Top"
+                              Visibility="{x:Bind MessageIndex, Converter={StaticResource _MessageChainBreakToVisibility_}, ConverterParameter=First}">
+                            <Grid Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}}">
+                                <Ellipse x:Name="_defaultAvatar_" Fill="{x:Bind MessageAvatarColorBrush, Mode=OneWay}" />
+                                <TextBlock HorizontalAlignment="Center"
+                                           VerticalAlignment="Center"
+                                           FontFamily="Arial"
+                                           FontSize="21"
+                                           Foreground="White"
+                                           Text="{x:Bind MessageAvatarInitial, Mode=OneWay}"
+                                           TextAlignment="Center" />
+                            </Grid>
+                        </Grid>
+                    </Grid>
+                    <!--  left spike  -->
+                    <Grid Grid.Column="1" Visibility="{x:Bind MessageIndex, Converter={StaticResource _MessageChainBreakToVisibility_}, ConverterParameter=First}">
+                        <Polygon Name="_chatLeftBubbleSpike_"
+                                 Fill="{x:Bind FromContact, Converter={StaticResource _bubbleBackground_}}"
+                                 Points="10,0,0,5,10,10"
+                                 Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}}">
+                            <Polygon.RenderTransform>
+                                <TranslateTransform X="8" Y="15" />
+                            </Polygon.RenderTransform>
+                        </Polygon>
+                    </Grid>
+                    <!--  message  -->
+                    <Border Grid.Column="3"
+                            Width="auto"
+                            Height="auto"
+                            Margin="5"
+                            Padding="10,6,10,6"
+                            Background="{x:Bind FromContact, Converter={StaticResource _bubbleBackground_}}"
+                            CornerRadius="10">
+                        <ContentPresenter>
+                            <RichTextBlock x:Name="_msgContent_"
+                                           uc:TextBlockExtension.FormattedText="{x:Bind Payload}"
+                                           Foreground="#ff303030"
+                                           IsTextSelectionEnabled="True"
+                                           TextWrapping="Wrap">
+                                <Paragraph />
+                            </RichTextBlock>
+                        </ContentPresenter>
+                    </Border>
+                    <!--  right spike  -->
+                    <Grid Grid.Column="3" Visibility="{x:Bind MessageIndex, Converter={StaticResource _MessageChainBreakToVisibility_}, ConverterParameter=First}">
+                        <Polygon Name="_chatRightBubbleSpike_"
+                                 HorizontalAlignment="Right"
+                                 Fill="{x:Bind FromContact, Converter={StaticResource _bubbleBackground_}}"
+                                 Points="0,0,10,5,0,10"
+                                 Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}, ConverterParameter=Inverted}">
+                            <Polygon.RenderTransform>
+                                <TranslateTransform X="3" Y="15" />
+                            </Polygon.RenderTransform>
+                        </Polygon>
+                    </Grid>
+                </Grid>
+                <!--  message info  -->
+                <Grid Grid.Row="1">
+                    <StackPanel x:Name="_messageInfo_"
+                                Margin="10,0,10,0"
+                                HorizontalAlignment="{x:Bind FromContact, Converter={StaticResource _bubbleHorizontalAlignement_}}"
+                                Orientation="Horizontal">
+                        <TextBlock x:Name="_messageTimeFrom_"
+                                   FontSize="10"
+                                   Foreground="Gray"
+                                   Text="{x:Bind MessageIndex, Converter={StaticResource _MessageDateTimeString_}}"
+                                   Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}}">
+                            <TextBlock.RenderTransform>
+                                <TranslateTransform X="50" />
+                            </TextBlock.RenderTransform>
+                        </TextBlock>
+                        <TextBlock x:Name="_messageTimeTo_"
+                                   FontSize="10"
+                                   Foreground="Gray"
+                                   Text="{x:Bind MessageIndex, Converter={StaticResource _MessageDateTimeString_}}"
+                                   Visibility="{x:Bind FromContact, Converter={StaticResource _boolToVisibility_}, ConverterParameter=Inverted}" />
+                    </StackPanel>
+                </Grid>
             </Grid>
         </DataTemplate>
-        <!-- barre d'envoi de message -->
-        <Style TargetType="TextBox">
+
+        <Style x:Key="MessageSendBox" TargetType="TextBox">
             <Setter Property="MinWidth" Value="{ThemeResource TextControlThemeMinWidth}" />
             <Setter Property="MinHeight" Value="{ThemeResource TextControlThemeMinHeight}" />
             <Setter Property="Foreground" Value="Black" />
-            <Setter Property="Background" Value="white" />
+            <Setter Property="Background" Value="White" />
             <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
             <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
             <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Auto" />
@@ -89,7 +176,7 @@
             <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Hidden" />
             <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden" />
             <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False" />
-            <Setter Property="Padding" Value="4,4"/>
+            <Setter Property="Padding" Value="4,0,8,4" />
             <Setter Property="Template">
                 <Setter.Value>
                     <ControlTemplate TargetType="TextBox">
@@ -102,43 +189,70 @@
                                 <RowDefinition Height="Auto" />
                                 <RowDefinition Height="*" />
                             </Grid.RowDefinitions>
-                            <Border x:Name="BackgroundElement"
-                                    Grid.Row="1"
-                                    Background="{TemplateBinding Background}"
-                                    Margin="0"
-                                    Opacity="1"
+                            <Border Grid.Row="1"
+                                    x:Name="BackgroundElement"
+                                    Grid.RowSpan="1"
                                     Grid.ColumnSpan="2"
-                                    BorderBrush="#3bc1d3"
+                                    Margin="0"
+                                    Background="{TemplateBinding Background}"
+                                    BorderBrush="{StaticResource RingBlueMidBrush}"
                                     BorderThickness="0"
-                                    Grid.RowSpan="1"/>
-                            <ScrollViewer x:Name="ContentElement"
-                                          Grid.Row="1"
-                                          HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}"
-                                          HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
-                                          VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}"
-                                          VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
-                                          IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}"
-                                          IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}"
-                                          IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
+                                    Opacity="1" />
+                            <ContentPresenter Grid.Row="0"
+                                              x:Name="HeaderContentPresenter"
+                                              Grid.ColumnSpan="2"
+                                              Margin="0,0,0,0"
+                                              Padding="2,4,2,2"
+                                              x:DeferLoadStrategy="Lazy"
+                                              Content="{TemplateBinding Header}"
+                                              ContentTemplate="{TemplateBinding HeaderTemplate}"
+                                              FontWeight="Normal"
+                                              Foreground="{ThemeResource SystemControlForegroundBaseHighBrush}"
+                                              Visibility="Collapsed" />
+                            <ScrollViewer Grid.Row="1"
+                                          x:Name="ContentElement"
                                           Margin="{TemplateBinding BorderThickness}"
                                           Padding="{TemplateBinding Padding}"
-                                          IsTabStop="False"
+                                          VerticalAlignment="Center"
                                           AutomationProperties.AccessibilityView="Raw"
+                                          HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
+                                          HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}"
+                                          IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
+                                          IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}"
+                                          IsTabStop="False"
+                                          IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}"
+                                          VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
+                                          VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}"
                                           ZoomMode="Disabled" />
-                            <Button x:Name="_sendBtn_"
+                            <Button Grid.Row="1"
+                                    Grid.Column="1"
+                                    x:Name="_sendBtn_"
+                                    MinWidth="34"
+                                    Margin="8,0,0,0"
+                                    VerticalAlignment="Stretch"
                                     Background="Transparent"
                                     BorderThickness="0"
-                                    Grid.Row="1"
-                                    FontFamily="Segoe MDL2 Assets"
-                                    Foreground="#3bc1d3"
-                                    Content="&#xE122;"
-                                    IsTabStop="False"
-                                    Grid.Column="1"
                                     Click="_sendBtn__Click"
-                                    Visibility="Visible"
-                                    MinWidth="34"
+                                    Content="&#xE89C;"
+                                    FontFamily="Segoe MDL2 Assets"
                                     FontSize="20"
-                                    VerticalAlignment="Stretch"/>
+                                    IsTabStop="False"
+                                    Style="{StaticResource FlatRoundSendButton}"
+                                    Visibility="Visible">
+                                <ToolTipService.ToolTip>
+                                    <TextBlock x:Uid="_tt_send_message_" />
+                                </ToolTipService.ToolTip>
+                            </Button>
+                            <ContentControl Grid.Row="1"
+                                            x:Name="PlaceholderTextContentPresenter"
+                                            Grid.ColumnSpan="2"
+                                            Margin="{TemplateBinding BorderThickness}"
+                                            Padding="{TemplateBinding Padding}"
+                                            VerticalAlignment="Center"
+                                            Content="{TemplateBinding PlaceholderText}"
+                                            Foreground="Gray"
+                                            IsHitTestVisible="False"
+                                            IsTabStop="False" />
                         </Grid>
                     </ControlTemplate>
                 </Setter.Value>
@@ -146,286 +260,474 @@
         </Style>
     </Page.Resources>
 
-    <SplitView x:Name="_videoSplitView_" IsPaneOpen="False" OpenPaneLength="400" PanePlacement="Right">
-        <SplitView.Pane>
-            <Frame x:Name="_chatPanel_"/>
-        </SplitView.Pane>
-        <SplitView.Content>
-            <Grid x:Name="_videoContent_">
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
-                    <RowDefinition x:Name="_rowChatBx_" Height="0"/>
-                </Grid.RowDefinitions>
-                <Grid   Background="#000000"
-                        Grid.Row="0"
-                        PointerMoved="_videoControl__PointerMoved">
-                    <StackPanel x:Name="_headerBar_"
-                                Background="{StaticResource SemiTransparentBlack}"
-                                Canvas.ZIndex="99999"
-                                HorizontalAlignment="Stretch"
-                                VerticalAlignment="Top"
-                                Height="50">
-                        <TextBlock  x:Name="_callee_"
-                                    Text="callee"
-                                    Foreground="White"
-                                    Margin="20,10"/>
-                    </StackPanel>
-
-                    <!-- video -->
-                    <Image Name="_IncomingVideoImage_"
-                           Grid.Column="0"
-                           Canvas.ZIndex="-1"
-                           DoubleTapped="IncomingVideoImage_DoubleTapped"
-                           />
-                    <TextBlock Name="_callPaused_"
-                               Grid.Column="0"
-                               Text="&#xE769;"
+    <Grid x:Name="_videoContent_" SizeChanged="_videoContent__SizeChanged">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="*" />
+            <RowDefinition x:Name="_rowChatBx_" Height="0*" />
+        </Grid.RowDefinitions>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="*" />
+            <ColumnDefinition x:Name="_colChatBx_" Width="0*" />
+        </Grid.ColumnDefinitions>
+        <!--  actual video  -->
+        <Grid Grid.Row="0"
+              Background="#000000"
+              PointerMoved="_videoControl__PointerMoved">
+            <Border x:Name="_smartInfoBorder_"
+                    MinWidth="140"
+                    Margin="10"
+                    Padding="20"
+                    HorizontalAlignment="Right"
+                    VerticalAlignment="Top"
+                    Background="#80a0a0f0"
+                    Canvas.ZIndex="100000"
+                    CornerRadius="10"
+                    IsHitTestVisible="False"
+                    Visibility="Collapsed">
+                <StackPanel Orientation="Vertical">
+                    <TextBlock x:Name="_si_CallId_"
+                               Margin="0,0,0,10"
+                               FontWeight="SemiBold"
+                               Foreground="GreenYellow" />
+                    <TextBlock FontWeight="ExtraBold"
+                               Foreground="GreenYellow"
+                               Text="You: " />
+                    <Grid>
+                        <Grid.RowDefinitions>
+                            <RowDefinition />
+                            <RowDefinition />
+                            <RowDefinition />
+                            <RowDefinition />
+                        </Grid.RowDefinitions>
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="120" />
+                            <ColumnDefinition Width="*" />
+                        </Grid.ColumnDefinitions>
+                        <TextBlock Grid.Row="0"
+                                   Grid.Column="0"
+                                   x:Uid="_si_fps_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="0"
+                                   Grid.Column="1"
+                                   x:Name="_si_fps1_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="1"
+                                   Grid.Column="0"
+                                   x:Uid="_si_videoCodec_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="1"
+                                   Grid.Column="1"
+                                   x:Name="_si_vc1_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="2"
+                                   Grid.Column="0"
+                                   x:Uid="_si_audioCodec_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="2"
+                                   Grid.Column="1"
+                                   x:Name="_si_ac1_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="3"
+                                   Grid.Column="0"
+                                   x:Uid="_si_resolution_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="3"
+                                   Grid.Column="1"
+                                   x:Name="_si_res1_"
+                                   Foreground="GreenYellow" />
+                    </Grid>
+                    <TextBlock Margin="0,10,0,0"
+                               FontWeight="ExtraBold"
+                               Foreground="GreenYellow"
+                               Text="Peer: " />
+                    <Grid>
+                        <Grid.RowDefinitions>
+                            <RowDefinition />
+                            <RowDefinition />
+                            <RowDefinition />
+                            <RowDefinition />
+                        </Grid.RowDefinitions>
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="120" />
+                            <ColumnDefinition Width="*" />
+                        </Grid.ColumnDefinitions>
+                        <TextBlock Grid.Row="0"
+                                   Grid.Column="0"
+                                   x:Uid="_si_fps_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="0"
+                                   Grid.Column="1"
+                                   x:Name="_si_fps2_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="1"
+                                   Grid.Column="0"
+                                   x:Uid="_si_videoCodec_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="1"
+                                   Grid.Column="1"
+                                   x:Name="_si_vc2_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="2"
+                                   Grid.Column="0"
+                                   x:Uid="_si_audioCodec_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="2"
+                                   Grid.Column="1"
+                                   x:Name="_si_ac2_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="3"
+                                   Grid.Column="0"
+                                   x:Uid="_si_resolution_"
+                                   Foreground="GreenYellow" />
+                        <TextBlock Grid.Row="3"
+                                   Grid.Column="1"
+                                   x:Name="_si_res2_"
+                                   Foreground="GreenYellow" />
+                    </Grid>
+                </StackPanel>
+            </Border>
+            <StackPanel x:Name="_headerBar_"
+                        Height="60"
+                        Padding="10,10,10,0"
+                        HorizontalAlignment="Stretch"
+                        VerticalAlignment="Top"
+                        Background="{StaticResource SemiTransparentBlack}"
+                        Canvas.ZIndex="99999"
+                        IsHitTestVisible="False"
+                        Orientation="Horizontal">
+                <!--  avatar  -->
+                <Grid>
+                    <Grid Grid.Column="0" x:Name="_contactBarAvatarGrid_">
+                        <Ellipse Width="36"
+                                 Height="36"
+                                 Margin="0,2,0,0"
+                                 HorizontalAlignment="Center"
+                                 VerticalAlignment="Top">
+                            <Ellipse.Fill>
+                                <ImageBrush x:Name="_contactBarAvatar_" />
+                            </Ellipse.Fill>
+                        </Ellipse>
+                    </Grid>
+                    <Grid Grid.Column="0" x:Name="_defaultContactBarAvatarGrid_"
+                          Width="36"
+                          Height="36">
+                        <Ellipse x:Name="_defaultAvatar_" Fill="#ff808080" />
+                        <TextBlock x:Name="_defaultAvatarInitial_"
+                                   HorizontalAlignment="Center"
+                                   VerticalAlignment="Center"
+                                   FontFamily="Arial"
+                                   FontSize="21"
+                                   Foreground="White"
+                                   Text="?"
+                                   TextAlignment="Center" />
+                    </Grid>
+                </Grid>
+                <StackPanel Orientation="Vertical">
+                    <TextBlock x:Name="_contactName_"
+                               Margin="20,0,20,0"
+                               FontWeight="SemiBold"
                                Foreground="White"
-                               FontSize="200"
-                               VerticalAlignment="Center"
-                               HorizontalAlignment="Center"
-                               FontFamily="Segoe MDL2 Assets"
-                               Visibility="Collapsed"
-                               Canvas.ZIndex="-1"/>
+                               Text="[TEXT MISSING]" />
+                    <TextBlock x:Name="_callTime_"
+                               Margin="20,0"
+                               Foreground="WhiteSmoke"/>
+                </StackPanel>
+            </StackPanel>
 
-                    <!--camera preview-->
-                    <Canvas   Name="_PreviewImageRect_"
-                              HorizontalAlignment="Right"
-                              VerticalAlignment="Bottom"
-                              PointerReleased="PreviewImage_PointerReleased"
-                              PointerCaptureLost="PreviewImage_PointerReleased">
-                        <Polygon    Name="_PreviewImageResizer_"
-                                    Visibility="Collapsed"
-                                    Fill="#FF3BC1D3"
-                                    Points="0,0,20,0,0,20"
-                                    Canvas.ZIndex="99999"
-                                    ManipulationMode="TranslateY"/>
-                        <CaptureElement Name="_PreviewImage_"
-                                        Visibility="Collapsed"
-                                        Stretch="Uniform"
-                                        Width="20"
-                                        Height="20"
-                                        ManipulationMode="All"/>
-                    </Canvas>
+            <!--  video  -->
+            <Image Grid.Column="0"
+                   Name="_IncomingVideoImage_"
+                   Canvas.ZIndex="-1"
+                   DoubleTapped="IncomingVideoImage_DoubleTapped" />
+            <TextBlock Grid.Column="0"
+                       Name="_callPaused_"
+                       HorizontalAlignment="Center"
+                       VerticalAlignment="Center"
+                       Canvas.ZIndex="-1"
+                       FontFamily="Segoe MDL2 Assets"
+                       FontSize="200"
+                       Foreground="White"
+                       Text="&#xE769;"
+                       Visibility="Collapsed" />
 
-                    <StackPanel x:Name="_controlsBar_"
-                            HorizontalAlignment="Center"
-                            VerticalAlignment="Bottom"
-                            Orientation="Horizontal">
-                        <StackPanel.Resources>
-                            <Style TargetType="Button">
-                                <Setter Property="Margin" Value="10,30"/>
-                                <Setter Property="Width" Value="40"/>
-                                <Setter Property="Height" Value="40"/>
-                                <Setter Property="Background" Value="Black"/>
-                                <Setter Property="Foreground" Value="White"/>
-                                <Setter Property="BorderBrush" Value="Gray"/>
-                                <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}"/>
-                                <Setter Property="Template">
-                                    <Setter.Value>
-                                        <ControlTemplate TargetType="Button">
-                                            <Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
-                                                <VisualStateManager.VisualStateGroups>
-                                                    <VisualStateGroup x:Name="CommonStates">
-                                                        <VisualState x:Name="PointerOver">
-                                                            <Storyboard>
-                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background"
-                                                                                           Storyboard.TargetName="ContentPresenter">
-                                                                    <DiscreteObjectKeyFrame KeyTime="0"
-                                                                                        Value="Gray"/>
-                                                                </ObjectAnimationUsingKeyFrames>
-                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground"
-                                                                                           Storyboard.TargetName="ContentPresenter">
-                                                                    <DiscreteObjectKeyFrame KeyTime="0"
-                                                                                        Value="White"/>
-                                                                </ObjectAnimationUsingKeyFrames>
-                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush"
-                                                                                           Storyboard.TargetName="ContentPresenter">
-                                                                    <DiscreteObjectKeyFrame KeyTime="0"
-                                                                                        Value="White"/>
-                                                                </ObjectAnimationUsingKeyFrames>
-                                                            </Storyboard>
-                                                        </VisualState>
-                                                        <VisualState x:Name="Normal">
-                                                            <Storyboard>
-                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background"
-                                                                                           Storyboard.TargetName="ContentPresenter">
-                                                                    <DiscreteObjectKeyFrame KeyTime="0"
-                                                                                        Value="Black"/>
-                                                                </ObjectAnimationUsingKeyFrames>
-                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground"
-                                                                                           Storyboard.TargetName="ContentPresenter">
-                                                                    <DiscreteObjectKeyFrame KeyTime="0"
-                                                                                        Value="White"/>
-                                                                </ObjectAnimationUsingKeyFrames>
-                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush"
-                                                                                           Storyboard.TargetName="ContentPresenter">
-                                                                    <DiscreteObjectKeyFrame KeyTime="0"
-                                                                                        Value="Gray"/>
-                                                                </ObjectAnimationUsingKeyFrames>
-                                                                <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/>
-                                                            </Storyboard>
-                                                        </VisualState>
-                                                        <VisualState x:Name="Pressed">
-                                                            <Storyboard>
-                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background"
-                                                                                           Storyboard.TargetName="ContentPresenter">
-                                                                    <DiscreteObjectKeyFrame KeyTime="0"
-                                                                                        Value="White"/>
-                                                                </ObjectAnimationUsingKeyFrames>
-                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground"
-                                                                                           Storyboard.TargetName="ContentPresenter">
-                                                                    <DiscreteObjectKeyFrame KeyTime="0"
-                                                                                        Value="Black"/>
-                                                                </ObjectAnimationUsingKeyFrames>
-                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush"
-                                                                                           Storyboard.TargetName="ContentPresenter">
-                                                                    <DiscreteObjectKeyFrame KeyTime="0"
-                                                                                        Value="Gray"/>
-                                                                </ObjectAnimationUsingKeyFrames>
-                                                                <PointerDownThemeAnimation Storyboard.TargetName="RootGrid"/>
-                                                            </Storyboard>
-                                                        </VisualState>
-                                                    </VisualStateGroup>
-                                                </VisualStateManager.VisualStateGroups>
-                                                <ContentPresenter x:Name="ContentPresenter"
-                                                              AutomationProperties.AccessibilityView="Raw"
-                                                              BorderBrush="{TemplateBinding BorderBrush}"
-                                                              BorderThickness="{TemplateBinding BorderThickness}"
-                                                              ContentTemplate="{TemplateBinding ContentTemplate}"
-                                                              ContentTransitions="{TemplateBinding ContentTransitions}"
-                                                              Content="{TemplateBinding Content}"
-                                                              HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
-                                                              Padding="{TemplateBinding Padding}"
-                                                              VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
-                                            </Grid>
-                                        </ControlTemplate>
-                                    </Setter.Value>
-                                </Setter>
-                            </Style>
-                        </StackPanel.Resources>
+            <!--  camera preview  -->
+            <Canvas Name="_PreviewImageRect_"
+                    HorizontalAlignment="Right"
+                    VerticalAlignment="Bottom"
+                    PointerCaptureLost="PreviewImage_PointerReleased"
+                    PointerReleased="PreviewImage_PointerReleased">
+                <Polygon Name="_PreviewImageResizer_"
+                         Canvas.ZIndex="99999"
+                         ManipulationMode="TranslateY"
+                         PointerEntered="PreviewImageResizer_PointerEntered"
+                         PointerExited="PreviewImageResizer_PointerExited"
+                         PointerPressed="PreviewImageResizer_Pressed"
+                         PointerReleased="PreviewImageResizer_PointerReleased"
+                         Points="0,0,20,0,0,20"
+                         Visibility="Collapsed">
+                    <Polygon.Fill>
+                        <ImageBrush ImageSource="Assets/grid.png" Opacity=".9" />
+                    </Polygon.Fill>
+                </Polygon>
+                <CaptureElement Name="_PreviewImage_"
+                                Width="20"
+                                Height="20"
+                                ManipulationMode="All"
+                                Stretch="Uniform"
+                                Visibility="Collapsed" />
+            </Canvas>
 
-                        <Button x:Name="_btnHangUp_"
-                            PointerEntered="btnAny_entered"
-                            PointerExited="btnAny_exited"
-                            Tapped="_btnHangUp__Tapped">
-                            <SymbolIcon Symbol="HangUp"/>
-                        </Button>
-                        <Button x:Name="_btnPause_"
-                            PointerEntered="btnAny_entered"
-                            PointerExited="btnAny_exited"
-                            Tapped="_btnPause__Tapped">
-                            <SymbolIcon Symbol="Pause"/>
-                        </Button>
-                        <Button x:Name="_btnChat_"
-                            PointerEntered="btnAny_entered"
-                            PointerExited="btnAny_exited"
-                            Tapped="_btnChat__Tapped">
-                            <SymbolIcon Symbol="Message" HorizontalAlignment="Left" Width="20"/>
-                        </Button>
-                        <Button x:Name="_btnAddFriend_"
-                            PointerEntered="btnAny_entered"
-                            PointerExited="btnAny_exited"
-                            Tapped="_btnAddFriend__Tapped" Visibility="Collapsed">
-                            <SymbolIcon Symbol="AddFriend"/>
-                        </Button>
-                        <Button x:Name="_btnSwitch_"
-                            PointerEntered="btnAny_entered"
-                            PointerExited="btnAny_exited"
-                            Tapped="_btnSwitch__Tapped" Visibility="Collapsed">
-                            <SymbolIcon Symbol="Switch"/>
-                        </Button>
-                        <Button x:Name="_btnMicrophone_"
-                            PointerEntered="btnAny_entered"
-                            PointerExited="btnAny_exited"
-                            Click="_btnMicrophone__Click">
-                            <Grid>
-                                <SymbolIcon Symbol="Microphone"/>
-                                <TextBlock x:Name="_txbkMicrophoneMuted_"
-                                           Text="&#xE25B;"
-                                           FontSize="16"
-                                           IsHitTestVisible="True"
-                                           Visibility="Collapsed"
-                                           Foreground="Red"
-                                           FontWeight="Bold"
-                                           FontFamily="Segoe MDL2 Assets">
-                                    <TextBlock.RenderTransform>
-                                        <TranslateTransform X="1" Y="2"/>
-                                    </TextBlock.RenderTransform>
-                                </TextBlock>
-                            </Grid>
-                        </Button>
-                        <!--Tapped="_btnVideo__Tapped"-->
-                        <Button x:Name="_btnVideo_"
-                            PointerEntered="btnAny_entered"
-                            PointerExited="btnAny_exited"
-                            Click="_btnVideo__Click">
-                            <Grid>
-                                <SymbolIcon Symbol="Video"/>
-                                <TextBlock x:Name="_txbkVideoMuted_"
-                                           Text="&#xE25B;"
-                                           FontSize="16"
-                                           IsHitTestVisible="True"
-                                           Visibility="Collapsed"
-                                           Foreground="Red"
-                                           FontWeight="Bold"
-                                           FontFamily="Segoe MDL2 Assets">
-                                    <TextBlock.RenderTransform>
-                                        <TranslateTransform X="1" Y="2"/>
-                                    </TextBlock.RenderTransform>
-                                </TextBlock>
-                            </Grid>
-                        </Button>
-                        <Button x:Name="_btnMemo_"
-                            PointerEntered="btnAny_entered"
-                            PointerExited="btnAny_exited"
-                            Tapped="_btnMemo__Tapped" Visibility="Collapsed">
-                            <SymbolIcon Symbol="Memo"/>
-                        </Button>
-                        <Button x:Name="_btnHQ_"
-                            PointerEntered="btnAny_entered"
-                            PointerExited="btnAny_exited"
-                            Tapped="_btnHQ__Tapped" Visibility="Collapsed">
-                            <TextBlock FontSize="12" Text="HQ"/>
-                        </Button>
+            <StackPanel x:Name="_controlsBar_"
+                        HorizontalAlignment="Center"
+                        VerticalAlignment="Bottom"
+                        Orientation="Horizontal">
+                <StackPanel.Resources>
+                    <Style TargetType="Button">
+                        <Setter Property="Margin" Value="10,30" />
+                        <Setter Property="Width" Value="40" />
+                        <Setter Property="Height" Value="40" />
+                        <Setter Property="Background" Value="Black" />
+                        <Setter Property="Foreground" Value="White" />
+                        <Setter Property="BorderBrush" Value="Gray" />
+                        <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}" />
+                        <Setter Property="Template">
+                            <Setter.Value>
+                                <ControlTemplate TargetType="Button">
+                                    <Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
+                                        <ContentPresenter x:Name="ContentPresenter"
+                                                          Padding="{TemplateBinding Padding}"
+                                                          HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
+                                                          VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
+                                                          AutomationProperties.AccessibilityView="Raw"
+                                                          BorderBrush="{TemplateBinding BorderBrush}"
+                                                          BorderThickness="{TemplateBinding BorderThickness}"
+                                                          Content="{TemplateBinding Content}"
+                                                          ContentTemplate="{TemplateBinding ContentTemplate}"
+                                                          ContentTransitions="{TemplateBinding ContentTransitions}" />
+                                        <VisualStateManager.VisualStateGroups>
+                                            <VisualStateGroup x:Name="CommonStates">
+                                                <VisualState x:Name="PointerOver">
+                                                    <Storyboard>
+                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Background">
+                                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Gray" />
+                                                        </ObjectAnimationUsingKeyFrames>
+                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                                        </ObjectAnimationUsingKeyFrames>
+                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                                        </ObjectAnimationUsingKeyFrames>
+                                                    </Storyboard>
+                                                </VisualState>
+                                                <VisualState x:Name="Normal">
+                                                    <Storyboard>
+                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Background">
+                                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                                        </ObjectAnimationUsingKeyFrames>
+                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                                        </ObjectAnimationUsingKeyFrames>
+                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Gray" />
+                                                        </ObjectAnimationUsingKeyFrames>
+                                                        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" />
+                                                    </Storyboard>
+                                                </VisualState>
+                                                <VisualState x:Name="Pressed">
+                                                    <Storyboard>
+                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Background">
+                                                            <DiscreteObjectKeyFrame KeyTime="0" Value="White" />
+                                                        </ObjectAnimationUsingKeyFrames>
+                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
+                                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
+                                                        </ObjectAnimationUsingKeyFrames>
+                                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush">
+                                                            <DiscreteObjectKeyFrame KeyTime="0" Value="Gray" />
+                                                        </ObjectAnimationUsingKeyFrames>
+                                                        <PointerDownThemeAnimation Storyboard.TargetName="RootGrid" />
+                                                    </Storyboard>
+                                                </VisualState>
+                                            </VisualStateGroup>
+                                        </VisualStateManager.VisualStateGroups>
+                                    </Grid>
+                                </ControlTemplate>
+                            </Setter.Value>
+                        </Setter>
+                    </Style>
+                </StackPanel.Resources>
+
+                <Button x:Name="_btnHangUp_"
+                        PointerEntered="btnAny_entered"
+                        PointerExited="btnAny_exited"
+                        Tapped="_btnHangUp__Tapped">
+                    <SymbolIcon Symbol="HangUp" />
+                </Button>
+                <Button x:Name="_btnPause_"
+                        PointerEntered="btnAny_entered"
+                        PointerExited="btnAny_exited"
+                        Tapped="_btnPause__Tapped">
+                    <SymbolIcon Symbol="Pause" />
+                </Button>
+                <Button x:Name="_btnChat_"
+                        PointerEntered="btnAny_entered"
+                        PointerExited="btnAny_exited"
+                        Tapped="_btnChat__Tapped">
+                    <SymbolIcon Width="20"
+                                HorizontalAlignment="Left"
+                                Symbol="Message" />
+                </Button>
+                <Button x:Name="_btnToggleOrientation_"
+                        Content="&#xE90D;"
+                        DoubleTapped="_btnToggleOrientation__Tapped"
+                        FontFamily="Segoe MDL2 Assets"
+                        PointerEntered="btnAny_entered"
+                        PointerExited="btnAny_exited"
+                        Tapped="_btnToggleOrientation__Tapped"
+                        Visibility="Visible">
+                    <ToolTipService.ToolTip>
+                        <TextBlock x:Uid="_tt_change_orientation_" />
+                    </ToolTipService.ToolTip>
+                </Button>
+                <Button x:Name="_btnAddFriend_"
+                        PointerEntered="btnAny_entered"
+                        PointerExited="btnAny_exited"
+                        Tapped="_btnAddFriend__Tapped"
+                        Visibility="Collapsed">
+                    <SymbolIcon Symbol="AddFriend" />
+                </Button>
+                <Button x:Name="_btnSwitch_"
+                        PointerEntered="btnAny_entered"
+                        PointerExited="btnAny_exited"
+                        Tapped="_btnSwitch__Tapped"
+                        Visibility="Collapsed">
+                    <SymbolIcon Symbol="Switch" />
+                </Button>
+                <Button x:Name="_btnMicrophone_"
+                        PointerEntered="btnAny_entered"
+                        PointerExited="btnAny_exited"
+                        Tapped="_btnMicrophone__Click">
+                    <Grid>
+                        <SymbolIcon Symbol="Microphone" />
+                        <TextBlock x:Name="_txbkMicrophoneMuted_"
+                                   FontFamily="Segoe MDL2 Assets"
+                                   FontSize="16"
+                                   FontWeight="Bold"
+                                   Foreground="Red"
+                                   IsHitTestVisible="True"
+                                   Text="&#xE25B;"
+                                   Visibility="Collapsed">
+                            <TextBlock.RenderTransform>
+                                <TranslateTransform X="1" Y="2" />
+                            </TextBlock.RenderTransform>
+                        </TextBlock>
+                    </Grid>
+                </Button>
+                <!--  Tapped="_btnVideo__Tapped"  -->
+                <Button x:Name="_btnVideo_"
+                        Click="_btnVideo__Click"
+                        PointerEntered="btnAny_entered"
+                        PointerExited="btnAny_exited">
+                    <Grid>
+                        <SymbolIcon Symbol="Video" />
+                        <TextBlock x:Name="_txbkVideoMuted_"
+                                   FontFamily="Segoe MDL2 Assets"
+                                   FontSize="16"
+                                   FontWeight="Bold"
+                                   Foreground="Red"
+                                   IsHitTestVisible="True"
+                                   Text="&#xE25B;"
+                                   Visibility="Collapsed">
+                            <TextBlock.RenderTransform>
+                                <TranslateTransform X="1" Y="2" />
+                            </TextBlock.RenderTransform>
+                        </TextBlock>
+                    </Grid>
+                </Button>
+                <Button x:Name="_btnMemo_"
+                        PointerEntered="btnAny_entered"
+                        PointerExited="btnAny_exited"
+                        Tapped="_btnMemo__Tapped"
+                        Visibility="Collapsed">
+                    <SymbolIcon Symbol="Memo" />
+                </Button>
+                <Button x:Name="_btnHQ_"
+                        PointerEntered="btnAny_entered"
+                        PointerExited="btnAny_exited"
+                        Tapped="_btnHQ__Tapped"
+                        Visibility="Collapsed">
+                    <TextBlock FontSize="12"
+                               Text="HQ" />
+                </Button>
+            </StackPanel>
+        </Grid>
+        <!--  in call chat box  -->
+        <Grid Grid.Row="1"
+              Grid.Column="0"
+              x:Name="_chatPanelGrid_">
+            <Grid Background="{ThemeResource RingMessagePageBrush}">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="*" />
+                    <RowDefinition Height="auto" />
+                </Grid.RowDefinitions>
+                <!--  resize bar  -->
+                <Grid Grid.Row="1"
+                      x:Name="_chatPanelResizeBarGrid_"
+                      Width="auto"
+                      Height="4"
+                      HorizontalAlignment="Stretch"
+                      VerticalAlignment="Top"
+                      Background="Transparent"
+                      Canvas.ZIndex="99999"
+                      ManipulationMode="All"
+                      Opacity=".5"
+                      PointerEntered="_chatPanelResizeBarGrid__PointerEntered"
+                      PointerExited="_chatPanelResizeBarGrid__PointerExited"
+                      PointerPressed="_chatPanelResizeBarGrid__PointerPressed"
+                      PointerReleased="_chatPanelResizeBarGrid__PointerReleased" />
+                <ScrollViewer Grid.Row="1"
+                              x:Name="_scrollView_"
+                              BorderBrush="{StaticResource RingBlueMidBrush}"
+                              BorderThickness="0,0,0,0"
+                              ScrollViewer.VerticalScrollBarVisibility="Auto">
+                    <StackPanel>
+                        <Rectangle Height="12" Fill="Transparent" />
+                        <ListBox x:Name="_messagesList_"
+                                 Margin="0"
+                                 Padding="0"
+                                 Background="{StaticResource RingMessagePageBrush}"
+                                 ItemContainerStyle="{StaticResource messageBubbleStyle}"
+                                 ItemTemplate="{StaticResource ConversationMessageTemplate}" />
+                        <Rectangle Height="12" Fill="Transparent" />
                     </StackPanel>
-                </Grid>
-                <!-- in call chat box -->
-                <Grid Grid.Row="1">
-                    <Grid Background="#FFF2F2F2">
-                        <Grid.RowDefinitions>
-                            <RowDefinition Height="auto" />
-                            <RowDefinition Height="*"/>
-                            <RowDefinition Height="auto" />
-                        </Grid.RowDefinitions>
-                        <ScrollViewer   x:Name="_scrollView_"
-                                        Grid.Row="1"
-                                        ScrollViewer.VerticalScrollBarVisibility="Auto">
-                            <StackPanel>
-                                <ListBox    x:Name="_messagesList_"
-                                            Margin="0"
-                                            Padding="0"
-                                            ItemContainerStyle="{StaticResource messageBubleStyle}"
-                                            ItemTemplate="{StaticResource ConversationMessageTemplate}">
-                                </ListBox>
-                            </StackPanel>
-                        </ScrollViewer>
-                        <Grid   Height="50"
-                                Grid.Row="2"
-                                Margin="0"
-                                Padding="0"
-                                Background="#FFF2F2F2">
-                            <TextBox    x:Name="_messageTextBox_"
-                                        HorizontalAlignment="Stretch"
-                                        TextWrapping="NoWrap"
-                                        VerticalAlignment="Bottom"
-                                        Margin="8,6,8,6"
-                                        Background="White"
-                                        KeyDown="_messageTextBox__KeyDown"/>
-                        </Grid>
+                </ScrollViewer>
+                <StackPanel Grid.Row="2" Orientation="Vertical">
+                    <Rectangle Grid.Row="0"
+                               Height="1"
+                               Margin="16,0,16,0"
+                               Fill="LightGray" />
+                    <Grid MinHeight="52"
+                          MaxHeight="112"
+                          Margin="0"
+                          Padding="0"
+                          Background="{ThemeResource RingMessagePageBrush}">
+                        <TextBox x:Name="_messageTextBox_"
+                                 x:Uid="_messageTextBox_"
+                                 MinHeight="24"
+                                 Margin="16,0,16,0"
+                                 HorizontalAlignment="Stretch"
+                                 VerticalAlignment="Center"
+                                 AcceptsReturn="True"
+                                 Background="White"
+                                 IsSpellCheckEnabled="False"
+                                 IsTabStop="True"
+                                 ScrollViewer.VerticalScrollBarVisibility="Auto"
+                                 Style="{StaticResource MessageSendBox}"
+                                 TextChanged="_messageTextBox__TextChanged"
+                                 TextWrapping="Wrap"  />
                     </Grid>
-                </Grid>
+                </StackPanel>
             </Grid>
-        </SplitView.Content>
-    </SplitView>
+        </Grid>
+    </Grid>
 </Page>
\ No newline at end of file
diff --git a/VideoPage.xaml.cpp b/VideoPage.xaml.cpp
index 411d2f62a93c31c37deeac4825c2790a2b1172e9..075e734a838230c64d838ffe3cf7f2bb5b7a1ed5 100644
--- a/VideoPage.xaml.cpp
+++ b/VideoPage.xaml.cpp
@@ -47,7 +47,8 @@ using namespace Windows::Graphics::Display;
 using namespace Windows::Graphics::Imaging;
 using namespace Windows::Media;
 using namespace Windows::UI::Xaml::Media::Imaging;
-using namespace Windows::Media::Capture;
+using namespace Windows::UI::Xaml::Media::Animation;
+using namespace Windows::UI::Xaml::Shapes;
 using namespace Windows::Devices::Sensors;
 
 using namespace Windows::UI::Input;
@@ -56,6 +57,8 @@ VideoPage::VideoPage()
 {
     InitializeComponent();
 
+    barFading = true;
+
     Page::NavigationCacheMode = Navigation::NavigationCacheMode::Required;
 
     VideoManager::instance->rendererManager()->writeVideoFrame +=
@@ -64,19 +67,19 @@ VideoPage::VideoPage()
         CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
         ref new DispatchedHandler([=]() {
             try {
-                auto renderer_w = VideoManager::instance->rendererManager()->renderer(id);
-                if (!renderer_w) {
+                currentRendererWrapper = VideoManager::instance->rendererManager()->renderer(id);
+                if (!currentRendererWrapper) {
                     return;
                 }
                 else {
-                    renderer_w->isRendering = true;
+                    currentRendererWrapper->isRendering = true;
                     create_task(WriteFrameAsSoftwareBitmapAsync(id, buf, width, height))
                     .then([=](task<void> previousTask) {
                         try {
                             previousTask.get();
                         }
                         catch (Platform::Exception^ e) {
-                            MSG_( "Caught exception from WriteFrameAsSoftwareBitmapAsync task.\n" );
+                            EXC_(e);
                         }
                     });
                 }
@@ -125,7 +128,7 @@ VideoPage::VideoPage()
     });
 
     RingD::instance->windowResized +=
-        ref new WindowResized([&]()
+        ref new WindowResized([=](float width, float height)
     {
     });
 
@@ -135,6 +138,14 @@ VideoPage::VideoPage()
         scrollDown();
     });
 
+    RingD::instance->vCardUpdated += ref new VCardUpdated([&](Contact^ contact)
+    {
+        Utils::runOnUIThread([this, contact]() {
+            SmartPanelItemsViewModel::instance->update({ "_bestName2", "_avatarImage" });
+            updatePageContent();
+        });
+    });
+
     RingD::instance->stateChange +=
         ref new StateChange([&](String^ callId, CallStatus state, int code)
     {
@@ -147,7 +158,14 @@ VideoPage::VideoPage()
 
             _callPaused_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
             _IncomingVideoImage_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-//            _PreviewImage_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+
+            callTimerUpdater->Start();
+            updateCallTimer(nullptr, nullptr);
+
+            RingD::instance->startSmartInfo(500);
+            videoPage_InputHandlerToken = Window::Current->CoreWindow->KeyDown +=
+                ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(this, &VideoPage::_corewindow__KeyDown);
+
             break;
         }
         case CallStatus::ENDED:
@@ -158,7 +176,13 @@ VideoPage::VideoPage()
                 RingD::instance->setWindowedMode();
 
             /* "close" the chat panel */
-            _rowChatBx_->Height = 0;
+            closeChatPanel();
+
+            callTimerUpdater->Stop();
+
+            //RingD::instance->stopSmartInfo();
+            Window::Current->CoreWindow->KeyDown -= videoPage_InputHandlerToken;
+            _smartInfoBorder_->Visibility = VIS::Collapsed;
 
             break;
         }
@@ -166,11 +190,14 @@ VideoPage::VideoPage()
         case CallStatus::PAUSED:
             _callPaused_->Visibility = Windows::UI::Xaml::Visibility::Visible;
             _IncomingVideoImage_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-//            _PreviewImage_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
             break;
         }
     });
 
+    RingD::instance->messageDataLoaded += ref new MessageDataLoaded([&]() { scrollDown(); });
+
+    RingD::instance->updateSmartInfo += ref new RingClientUWP::UpdateSmartInfo(this, &RingClientUWP::Views::VideoPage::OnsmartInfoUpdated);
+
     RingD::instance->incomingMessage += ref new RingClientUWP::IncomingMessage(this, &RingClientUWP::Views::VideoPage::OnincomingMessage);
     RingD::instance->incomingVideoMuted += ref new RingClientUWP::IncomingVideoMuted(this, &RingClientUWP::Views::VideoPage::OnincomingVideoMuted);
     VideoManager::instance->captureManager()->startPreviewing += ref new RingClientUWP::StartPreviewing(this, &RingClientUWP::Views::VideoPage::OnstartPreviewing);
@@ -182,22 +209,74 @@ VideoPage::VideoPage()
 
     _PreviewImage_->ManipulationDelta += ref new ManipulationDeltaEventHandler(this, &VideoPage::PreviewImage_ManipulationDelta);
     _PreviewImage_->ManipulationCompleted += ref new ManipulationCompletedEventHandler(this, &VideoPage::PreviewImage_ManipulationCompleted);
+    _PreviewImage_->ManipulationMode =
+        ManipulationModes::TranslateX |
+        ManipulationModes::TranslateY;
 
     _PreviewImageResizer_->ManipulationDelta += ref new ManipulationDeltaEventHandler(this, &VideoPage::PreviewImageResizer_ManipulationDelta);
     _PreviewImageResizer_->ManipulationCompleted += ref new ManipulationCompletedEventHandler(this, &VideoPage::PreviewImageResizer_ManipulationCompleted);
+    _PreviewImageResizer_->ManipulationMode = ManipulationModes::TranslateY;
 
-    _PreviewImage_->ManipulationMode =
+    _chatPanelResizeBarGrid_->ManipulationDelta += ref new ManipulationDeltaEventHandler(this, &VideoPage::_chatPanelResizeBarGrid__ManipulationDelta);
+    _chatPanelResizeBarGrid_->ManipulationCompleted += ref new ManipulationCompletedEventHandler(this, &VideoPage::_chatPanelResizeBarGrid__ManipulationCompleted);
+    _chatPanelResizeBarGrid_->ManipulationMode =
         ManipulationModes::TranslateX |
         ManipulationModes::TranslateY;
 
-    _PreviewImageResizer_->ManipulationMode = ManipulationModes::TranslateY;
+    TimeSpan timeSpan;
+    timeSpan.Duration = static_cast<long long>(1e7);
+    callTimerUpdater = ref new DispatcherTimer;
+    callTimerUpdater->Interval = timeSpan;
+    callTimerUpdater->Tick += ref new Windows::Foundation::EventHandler<Object^>(this, &VideoPage::updateCallTimer);
+
+    showSmartInfo = false;
+}
+
+void
+VideoPage::OnsmartInfoUpdated(const std::map<std::string, std::string>& info)
+{
+    auto smartInfo = Utils::convertMap(info);
+
+    if (auto selectedItem = SmartPanelItemsViewModel::instance->_selectedItem)
+        _si_CallId_->Text = "CallID: " + selectedItem->_callId;
+
+    if (smartInfo->HasKey("local FPS"))
+        _si_fps1_->Text = smartInfo->Lookup("local FPS");
+    if (smartInfo->HasKey("local video codec"))
+        _si_vc1_->Text = smartInfo->Lookup("local video codec");
+    if (smartInfo->HasKey("local audio codec"))
+        _si_ac1_->Text = smartInfo->Lookup("local audio codec");
+
+    auto localResolution = VideoManager::instance->captureManager()->activeDevice->currentResolution();
+    _si_res1_->Text = localResolution->getFriendlyName();
+
+    if (smartInfo->HasKey("remote FPS"))
+        _si_fps2_->Text = smartInfo->Lookup("remote FPS") ;
+    if (smartInfo->HasKey("remote video codec"))
+        _si_vc2_->Text = smartInfo->Lookup("remote video codec");
+    if (smartInfo->HasKey("remote audio codec"))
+        _si_ac2_->Text = smartInfo->Lookup("remote audio codec");
+
+    if (currentRendererWrapper) {
+        auto remoteResolution = currentRendererWrapper->renderer->width.ToString() +
+                                "x" +
+                                currentRendererWrapper->renderer->height.ToString();
+        _si_res2_->Text = remoteResolution;
+    }
+}
+
+void
+VideoPage::updateCallTimer(Object^ sender, Object^ e)
+{
+    if(auto item = SmartPanelItemsViewModel::instance->_selectedItem)
+        _callTime_->Text = item->_callTime;
 }
 
 void
-RingClientUWP::Views::VideoPage::OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e)
+VideoPage::OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e)
 {
     updatePageContent();
-    _rowChatBx_->Height = 0;
+    closeChatPanel();
 }
 
 void RingClientUWP::Views::VideoPage::updatePageContent()
@@ -208,7 +287,21 @@ void RingClientUWP::Views::VideoPage::updatePageContent()
     if (!contact)
         return;
 
-    _callee_->Text = contact->_name;
+    _contactName_->Text = contact->_bestName;
+
+    //_contactBarAvatar_->ImageSource = RingClientUWP::ResourceMananger::instance->imageFromRelativePath(contact->_avatarImage);
+    if (contact->_avatarImage != " ") {
+        auto avatarImageUri = ref new Windows::Foundation::Uri(contact->_avatarImage);
+        _contactBarAvatar_->ImageSource = ref new BitmapImage(avatarImageUri);
+        _defaultContactBarAvatarGrid_->Visibility = VIS::Collapsed;
+        _contactBarAvatarGrid_->Visibility = VIS::Visible;
+    }
+    else {
+        _defaultContactBarAvatarGrid_->Visibility = VIS::Visible;
+        _contactBarAvatarGrid_->Visibility = VIS::Collapsed;
+        _defaultAvatar_->Fill = contact->_avatarColorBrush;
+        _defaultAvatarInitial_->Text = Utils::getUpperInitial(contact->_bestName2);
+    }
 
     _messagesList_->ItemsSource = contact->_conversation->_messages;
 
@@ -224,7 +317,7 @@ VideoPage::updatePreviewFrameDimensions()
 
     double scaleValue = 1 + userPreviewHeightModifier / _PreviewImage_->Height;
 
-    scaleValue = max(min(1.75, scaleValue), 0.5);
+    scaleValue = std::max(std::min(1.75, scaleValue), 0.5);
 
     userPreviewHeightModifier = _PreviewImage_->Height * (scaleValue - 1);
 
@@ -235,23 +328,23 @@ VideoPage::updatePreviewFrameDimensions()
     TranslateTransform^ translate = ref new TranslateTransform();
     switch (quadrant)
     {
-    case 0:
+    case Quadrant::SE:
         translate->Y = -userPreviewHeightModifier;
         translate->X = translate->Y * aspectRatio;
         break;
-    case 1:
+    case Quadrant::SW:
         translate->Y = -userPreviewHeightModifier;
         translate->X = 0;
         break;
-    case 2:
+    case Quadrant::NW:
         translate->Y = 0;
         translate->X = 0;
         break;
-    case 3:
+    case Quadrant::NE:
         translate->Y = 0;
         translate->X = -userPreviewHeightModifier * aspectRatio;
         break;
-    default:
+    default:
         break;
     }
 
@@ -285,8 +378,6 @@ void RingClientUWP::Views::VideoPage::screenVideo(bool state)
         _PreviewImage_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
         _PreviewImageResizer_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     }
-
-
 }
 
 void
@@ -295,30 +386,23 @@ RingClientUWP::Views::VideoPage::_sendBtn__Click(Platform::Object^ sender, Windo
     sendMessage();
 }
 
-void
-RingClientUWP::Views::VideoPage::_messageTextBox__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
-{
-    if (e->Key == Windows::System::VirtualKey::Enter) {
-        sendMessage();
-    }
-}
-
 void
 RingClientUWP::Views::VideoPage::sendMessage()
 {
-    auto item = SmartPanelItemsViewModel::instance->_selectedItem;
-    auto contact = item->_contact;
+    if (auto item = SmartPanelItemsViewModel::instance->_selectedItem) {
+        auto contact = item->_contact;
 
-    auto txt = _messageTextBox_->Text;
+        auto txt = _messageTextBox_->Text;
 
-    /* empty the textbox */
-    _messageTextBox_->Text = "";
+        /* empty the textbox */
+        _messageTextBox_->Text = "";
 
-    if (!contact || txt->IsEmpty())
-        return;
+        if (!contact || txt->IsEmpty())
+            return;
 
-    RingD::instance->sendSIPTextMessage(txt);
-    scrollDown();
+        RingD::instance->sendSIPTextMessage(txt);
+        scrollDown();
+    }
 }
 
 void RingClientUWP::Views::VideoPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
@@ -328,14 +412,11 @@ void RingClientUWP::Views::VideoPage::Button_Click(Platform::Object^ sender, Win
 
 void RingClientUWP::Views::VideoPage::_btnCancel__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
-
 }
 
 void RingClientUWP::Views::VideoPage::_btnHangUp__Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
 {
-    auto item = SmartPanelItemsViewModel::instance->_selectedItem;
-
-    if (item) {
+    if (auto item = SmartPanelItemsViewModel::instance->_selectedItem) {
         _PreviewImage_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
         _PreviewImageResizer_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
         RingD::instance->hangUpCall2(item->_callId);
@@ -360,12 +441,11 @@ void RingClientUWP::Views::VideoPage::_btnPause__Tapped(Platform::Object^ sender
 
 void RingClientUWP::Views::VideoPage::_btnChat__Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
 {
-    if (_rowChatBx_->Height == 0) {
-        _rowChatBx_->Height = 200;
-        SmartPanelItemsViewModel::instance->_selectedItem->_contact->_unreadMessages = 0;
+    if (!isChatPanelOpen) {
+        openChatPanel();
     }
     else {
-        _rowChatBx_->Height = 0;
+        closeChatPanel();
     }
 }
 
@@ -416,57 +496,60 @@ void RingClientUWP::Views::VideoPage::_btnVideo__Tapped(Platform::Object^ sender
 void RingClientUWP::Views::VideoPage::_videoControl__PointerMoved(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
     if (barFading)
-        myStoryboard->Begin();
-    barFading_ = true;
+        fadeVideoControlsStoryboard->Begin();
 }
 
 
 void RingClientUWP::Views::VideoPage::btnAny_entered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
-    barFading_ = false;
-    myStoryboard->Stop();
+    barFading = false;
+    fadeVideoControlsStoryboard->Stop();
 }
 
 
 void RingClientUWP::Views::VideoPage::btnAny_exited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
-    barFading_ = true;
+    barFading = true;
 }
 
-task<void>
-VideoPage::WriteFrameAsSoftwareBitmapAsync(String^ id, uint8_t* buf, int width, int height)
+void
+VideoPage::SetBuffer(uint8_t* buf, int width, int height)
 {
-    auto vframe = ref new VideoFrame(BitmapPixelFormat::Bgra8, width, height);
-    auto frame = vframe->SoftwareBitmap;
-
-    const int BYTES_PER_PIXEL = 4;
+    videoFrame = ref new VideoFrame(BitmapPixelFormat::Bgra8, width, height);
+    softwareBitmap = videoFrame->SoftwareBitmap;
 
-    BitmapBuffer^ buffer = frame->LockBuffer(BitmapBufferAccessMode::ReadWrite);
-    IMemoryBufferReference^ reference = buffer->CreateReference();
+    BitmapBuffer^ bitmapBuffer = softwareBitmap->LockBuffer(BitmapBufferAccessMode::Write);
+    IMemoryBufferReference^ memoryBufferReference = bitmapBuffer->CreateReference();
 
     Microsoft::WRL::ComPtr<IMemoryBufferByteAccess> byteAccess;
-    if (SUCCEEDED(reinterpret_cast<IUnknown*>(reference)->QueryInterface(IID_PPV_ARGS(&byteAccess))))
+    if (SUCCEEDED(reinterpret_cast<IUnknown*>(memoryBufferReference)->QueryInterface(IID_PPV_ARGS(&byteAccess))))
     {
         byte* data;
         unsigned capacity;
         byteAccess->GetBuffer(&data, &capacity);
-        auto desc = buffer->GetPlaneDescription(0);
         std::memcpy(data, buf, static_cast<size_t>(capacity));
     }
-    delete reference;
-    delete buffer;
+    delete memoryBufferReference;
+    delete bitmapBuffer;
+}
+
+
+task<void>
+VideoPage::WriteFrameAsSoftwareBitmapAsync(String^ id, uint8_t* buf, int width, int height)
+{
+    SetBuffer(buf, width, height);
 
     VideoManager::instance->rendererManager()->renderer(id)->isRendering = false;
 
     auto sbSource = ref new Media::Imaging::SoftwareBitmapSource();
-    return create_task(sbSource->SetBitmapAsync(frame))
+    return create_task(sbSource->SetBitmapAsync(softwareBitmap))
            .then([this, sbSource]()
     {
         try {
             _IncomingVideoImage_->Source = sbSource;
         }
         catch (Exception^ e) {
-            WriteException(e);
+            EXC_(e);
         }
     });
 }
@@ -474,9 +557,7 @@ VideoPage::WriteFrameAsSoftwareBitmapAsync(String^ id, uint8_t* buf, int width,
 
 void RingClientUWP::Views::VideoPage::OnincomingMessage(Platform::String ^callId, Platform::String ^payload)
 {
-    if (_rowChatBx_->Height == 0)
-        _rowChatBx_->Height = 200;
-
+    openChatPanel();
     scrollDown();
 }
 
@@ -541,14 +622,12 @@ void RingClientUWP::Views::VideoPage::OnvideoMuted(const std::string &callId, bo
                                    : Windows::UI::Xaml::Visibility::Collapsed;
 }
 
-
 void RingClientUWP::Views::VideoPage::IncomingVideoImage_DoubleTapped(Platform::Object^ sender, Windows::UI::Xaml::Input::DoubleTappedRoutedEventArgs^ e)
 {
     RingD::instance->toggleFullScreen();
     anchorPreview();
 }
 
-
 void RingClientUWP::Views::VideoPage::InitManipulationTransforms()
 {
     PreviewImage_transforms = ref new TransformGroup();
@@ -564,6 +643,9 @@ void RingClientUWP::Views::VideoPage::InitManipulationTransforms()
 
 void RingClientUWP::Views::VideoPage::PreviewImage_ManipulationDelta(Platform::Object^ sender, ManipulationDeltaRoutedEventArgs^ e)
 {
+    if (!isMovingPreview)
+        isMovingPreview = true;
+
     _PreviewImageRect_->RenderTransform = PreviewImage_transforms;
 
     PreviewImage_previousTransform->Matrix = PreviewImage_transforms->Value;
@@ -578,8 +660,8 @@ void
 RingClientUWP::Views::VideoPage::computeQuadrant()
 {
     // Compute center coordinate of _videoContent_
-    Point centerOfVideoFrame = Point(   static_cast<float>(_videoContent_->ActualWidth) / 2,
-                                        static_cast<float>(_videoContent_->ActualHeight) / 2        );
+    Point centerOfVideoFrame = Point(   static_cast<float>(_videoContent_->ActualWidth - _colChatBx_->ActualWidth) / 2,
+                                        static_cast<float>(_videoContent_->ActualHeight - _rowChatBx_->ActualHeight) / 2  );
 
     // Compute the center coordinate of _PreviewImage_ relative to _videoContent_
     Point centerOfPreview = Point( static_cast<float>(_PreviewImage_->ActualWidth) / 2,
@@ -595,9 +677,9 @@ RingClientUWP::Views::VideoPage::computeQuadrant()
 
     lastQuadrant = quadrant;
     if (diff.X > 0)
-        quadrant = diff.Y > 0 ? 2 : 1;
+        quadrant = diff.Y > 0 ? Quadrant::NW : Quadrant::SW;
     else
-        quadrant = diff.Y > 0 ? 3 : 0;
+        quadrant = diff.Y > 0 ? Quadrant::NE : Quadrant::SE;
 
     if (lastQuadrant != quadrant) {
         arrangeResizer();
@@ -616,35 +698,35 @@ RingClientUWP::Views::VideoPage::arrangeResizer()
     PointCollection^ resizeTrianglePoints = ref new PointCollection();
     switch (quadrant)
     {
-    case 0:
+    case Quadrant::SE:
         xOffset = 0;
         yOffset = 0;
         resizeTrianglePoints->Append(Point(xOffset,         yOffset));
         resizeTrianglePoints->Append(Point(xOffset + rSize, yOffset));
         resizeTrianglePoints->Append(Point(xOffset,         yOffset + rSize));
         break;
-    case 1:
+    case Quadrant::SW:
         xOffset = scaledWidth - rSize;
         yOffset = 0;
         resizeTrianglePoints->Append(Point(xOffset,         yOffset));
         resizeTrianglePoints->Append(Point(xOffset + rSize, yOffset));
         resizeTrianglePoints->Append(Point(xOffset + rSize, yOffset + rSize));
         break;
-    case 2:
+    case Quadrant::NW:
         xOffset = scaledWidth - rSize;
         yOffset = scaledHeight - rSize;
         resizeTrianglePoints->Append(Point(xOffset + rSize, yOffset));
         resizeTrianglePoints->Append(Point(xOffset + rSize, yOffset + rSize));
         resizeTrianglePoints->Append(Point(xOffset,         yOffset + rSize));
         break;
-    case 3:
+    case Quadrant::NE:
         xOffset = 0;
         yOffset = scaledHeight - rSize;
         resizeTrianglePoints->Append(Point(xOffset,         yOffset + rSize));
         resizeTrianglePoints->Append(Point(xOffset + rSize, yOffset + rSize));
         resizeTrianglePoints->Append(Point(xOffset,         yOffset));
         break;
-    default:
+    default:
         break;
     }
     _PreviewImageResizer_->Points = resizeTrianglePoints;
@@ -652,10 +734,18 @@ RingClientUWP::Views::VideoPage::arrangeResizer()
 
 void RingClientUWP::Views::VideoPage::PreviewImage_ManipulationCompleted(Platform::Object^ sender, ManipulationCompletedRoutedEventArgs^ e)
 {
+    isMovingPreview = false;
     anchorPreview();
     updatePreviewFrameDimensions();
 }
 
+void
+VideoPage::PreviewImageResizer_Pressed(Object^ sender, PointerRoutedEventArgs^ e)
+{
+    isResizingPreview = true;
+    lastUserPreviewHeightModifier = userPreviewHeightModifier;
+}
+
 void RingClientUWP::Views::VideoPage::anchorPreview()
 {
     PreviewImage_previousTransform->Matrix = Matrix::Identity;
@@ -663,23 +753,23 @@ void RingClientUWP::Views::VideoPage::anchorPreview()
 
     switch (quadrant)
     {
-    case 0:
+    case Quadrant::SE:
         _PreviewImageRect_->HorizontalAlignment = Windows::UI::Xaml::HorizontalAlignment::Right;
         _PreviewImageRect_->VerticalAlignment = Windows::UI::Xaml::VerticalAlignment::Bottom;
         break;
-    case 1:
+    case Quadrant::SW:
         _PreviewImageRect_->HorizontalAlignment = Windows::UI::Xaml::HorizontalAlignment::Left;
         _PreviewImageRect_->VerticalAlignment = Windows::UI::Xaml::VerticalAlignment::Bottom;
         break;
-    case 2:
+    case Quadrant::NW:
         _PreviewImageRect_->HorizontalAlignment = Windows::UI::Xaml::HorizontalAlignment::Left;
         _PreviewImageRect_->VerticalAlignment = Windows::UI::Xaml::VerticalAlignment::Top;
         break;
-    case 3:
+    case Quadrant::NE:
         _PreviewImageRect_->HorizontalAlignment = Windows::UI::Xaml::HorizontalAlignment::Right;
         _PreviewImageRect_->VerticalAlignment = Windows::UI::Xaml::VerticalAlignment::Top;
         break;
-    default:
+    default:
         break;
     };
 }
@@ -687,11 +777,15 @@ void RingClientUWP::Views::VideoPage::anchorPreview()
 void
 VideoPage::PreviewImageResizer_ManipulationDelta(Platform::Object^ sender, ManipulationDeltaRoutedEventArgs^ e)
 {
-    isResizingPreview = true;
-    if (quadrant > 1)
-        userPreviewHeightModifier += e->Delta.Translation.Y;
-    else
-        userPreviewHeightModifier -= e->Delta.Translation.Y;
+    if (!isResizingPreview)
+        isResizingPreview = true;
+
+    if (quadrant == Quadrant::NW || quadrant == Quadrant::NE) {
+        userPreviewHeightModifier = lastUserPreviewHeightModifier + e->Cumulative.Translation.Y;
+    }
+    else {
+        userPreviewHeightModifier = lastUserPreviewHeightModifier - (e->Cumulative.Translation.Y);
+    }
 
     updatePreviewFrameDimensions();
 }
@@ -700,12 +794,15 @@ void
 VideoPage::PreviewImageResizer_ManipulationCompleted(Platform::Object^ sender, ManipulationCompletedRoutedEventArgs^ e)
 {
     isResizingPreview = false;
+    if (!isHoveringOnResizer) {
+        CoreApplication::MainView->CoreWindow->PointerCursor = ref new Windows::UI::Core::CoreCursor(Windows::UI::Core::CoreCursorType::Arrow, 0);
+    }
 }
 
 void
 VideoPage::PreviewImage_PointerReleased(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
-    // For some reason, PreviewImage_ManipulationCompleted doesn't always fire when it should
+    // For some reason, PreviewImage_ManipulationCompleted doesn't always fired when the mouse is released
     anchorPreview();
     updatePreviewFrameDimensions();
 }
@@ -713,26 +810,222 @@ VideoPage::PreviewImage_PointerReleased(Platform::Object^ sender, Windows::UI::X
 void
 VideoPage::PreviewImageResizer_PointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
-    switch (quadrant)
-    {
-    case 0:
-    case 2:
-        CoreApplication::MainView->CoreWindow->PointerCursor = ref new Windows::UI::Core::CoreCursor(Windows::UI::Core::CoreCursorType::SizeNorthwestSoutheast, 0);
-        break;
-    case 1:
-    case 3:
-        CoreApplication::MainView->CoreWindow->PointerCursor = ref new Windows::UI::Core::CoreCursor(Windows::UI::Core::CoreCursorType::SizeNortheastSouthwest, 0);
-        break;
-    default:
-        break;
+    isHoveringOnResizer = true;
+    if (!isMovingPreview) {
+        switch (quadrant)
+        {
+        case Quadrant::SE:
+        case Quadrant::NW:
+            CoreApplication::MainView->CoreWindow->PointerCursor = ref new Windows::UI::Core::CoreCursor(Windows::UI::Core::CoreCursorType::SizeNorthwestSoutheast, 0);
+            break;
+        case Quadrant::SW:
+        case Quadrant::NE:
+            CoreApplication::MainView->CoreWindow->PointerCursor = ref new Windows::UI::Core::CoreCursor(Windows::UI::Core::CoreCursorType::SizeNortheastSouthwest, 0);
+            break;
+        default:
+            break;
+        }
     }
 }
 
-
 void
 VideoPage::PreviewImageResizer_PointerExited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
+    isHoveringOnResizer = false;
     if (!isResizingPreview) {
         CoreApplication::MainView->CoreWindow->PointerCursor = ref new Windows::UI::Core::CoreCursor(Windows::UI::Core::CoreCursorType::Arrow, 0);
     }
 }
+
+void
+VideoPage::PreviewImageResizer_PointerReleased(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
+{
+    if (!isHoveringOnResizer) {
+        CoreApplication::MainView->CoreWindow->PointerCursor = ref new Windows::UI::Core::CoreCursor(Windows::UI::Core::CoreCursorType::Arrow, 0);
+    }
+}
+
+void
+VideoPage::_chatPanelResizeBarGrid__PointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
+{
+    if (chtBoxOrientation == Orientation::Horizontal) {
+        CoreApplication::MainView->CoreWindow->PointerCursor = ref new Windows::UI::Core::CoreCursor(Windows::UI::Core::CoreCursorType::SizeWestEast, 0);
+    }
+    else {
+        CoreApplication::MainView->CoreWindow->PointerCursor = ref new Windows::UI::Core::CoreCursor(Windows::UI::Core::CoreCursorType::SizeNorthSouth, 0);
+    }
+}
+
+void
+VideoPage::_chatPanelResizeBarGrid__PointerExited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
+{
+    if (!isResizingChatPanel) {
+        CoreApplication::MainView->CoreWindow->PointerCursor = ref new Windows::UI::Core::CoreCursor(Windows::UI::Core::CoreCursorType::Arrow, 0);
+    }
+}
+
+void
+VideoPage::_chatPanelResizeBarGrid__PointerPressed(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
+{
+    isResizingChatPanel = true;
+    lastchatPanelSize = chatPanelSize;
+}
+
+void
+VideoPage::_chatPanelResizeBarGrid__PointerReleased(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
+{
+    isResizingChatPanel = false;
+}
+
+void
+VideoPage::_chatPanelResizeBarGrid__ManipulationDelta(Platform::Object^ sender, ManipulationDeltaRoutedEventArgs^ e)
+{
+    if (chtBoxOrientation == Orientation::Horizontal) {
+        chatPanelSize = lastchatPanelSize - e->Cumulative.Translation.X;
+    }
+    else {
+        chatPanelSize = lastchatPanelSize - e->Cumulative.Translation.Y;
+    }
+    resizeChatPanel();
+}
+
+void
+VideoPage::_chatPanelResizeBarGrid__ManipulationCompleted(Platform::Object^ sender, ManipulationCompletedRoutedEventArgs^ e)
+{
+    isResizingChatPanel = false;
+    CoreApplication::MainView->CoreWindow->PointerCursor = ref new Windows::UI::Core::CoreCursor(Windows::UI::Core::CoreCursorType::Arrow, 0);
+}
+
+void
+VideoPage::openChatPanel()
+{
+    resizeChatPanel();
+    isChatPanelOpen = true;
+    SmartPanelItemsViewModel::instance->_selectedItem->_contact->_unreadMessages = 0;
+}
+void
+VideoPage::closeChatPanel()
+{
+    _colChatBx_->Width = 0;
+    _rowChatBx_->Height = 0;
+    isChatPanelOpen = false;
+}
+
+void
+VideoPage::resizeChatPanel()
+{
+    // clamp chatPanelSize
+    double minChatPanelSize = 176;
+    double maxChatPanelSize = chtBoxOrientation == Orientation::Horizontal ?
+        _videoContent_->ActualWidth * .5 :
+        _videoContent_->ActualHeight * .5;
+    chatPanelSize = std::max(minChatPanelSize, std::min(chatPanelSize, maxChatPanelSize));
+
+    if (chtBoxOrientation == Orientation::Horizontal) {
+        _colChatBx_->Width = GridLength(chatPanelSize, GridUnitType::Pixel);
+        _rowChatBx_->Height = 0;
+    }
+    else {
+        _colChatBx_->Width = 0;
+        _rowChatBx_->Height = GridLength(chatPanelSize, GridUnitType::Pixel);
+    }
+}
+
+void
+VideoPage::_btnToggleOrientation__Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
+{
+    bool wasChatPanelOpen = isChatPanelOpen;
+    closeChatPanel();
+
+    if (chtBoxOrientation == Orientation::Horizontal) {
+        chtBoxOrientation = Orientation::Vertical;
+        _btnToggleOrientation_->Content = L"\uE90D";
+
+        _chatPanelResizeBarGrid_->HorizontalAlignment = Windows::UI::Xaml::HorizontalAlignment::Stretch;
+        _chatPanelResizeBarGrid_->VerticalAlignment = Windows::UI::Xaml::VerticalAlignment::Top;
+        _chatPanelResizeBarGrid_->Width = std::numeric_limits<double>::quiet_NaN();
+        _chatPanelResizeBarGrid_->Height = 4;
+
+        Grid::SetColumn(_chatPanelGrid_, 0);
+        Grid::SetRow(_chatPanelGrid_, 2);
+    }
+    else {
+        chtBoxOrientation = Orientation::Horizontal;
+        _btnToggleOrientation_->Content = L"\uE90E";
+
+        _chatPanelResizeBarGrid_->HorizontalAlignment = Windows::UI::Xaml::HorizontalAlignment::Left;
+        _chatPanelResizeBarGrid_->VerticalAlignment = Windows::UI::Xaml::VerticalAlignment::Stretch;
+        _chatPanelResizeBarGrid_->Width = 4;
+        _chatPanelResizeBarGrid_->Height = std::numeric_limits<double>::quiet_NaN();
+
+        Grid::SetColumn(_chatPanelGrid_, 2);
+        Grid::SetRow(_chatPanelGrid_, 0);
+    }
+
+    if (wasChatPanelOpen)
+        openChatPanel();
+}
+
+void
+VideoPage::_videoContent__SizeChanged(Platform::Object^ sender, Windows::UI::Xaml::SizeChangedEventArgs^ e)
+{
+    if (isChatPanelOpen)
+        resizeChatPanel();
+}
+
+void
+VideoPage::_messageTextBox__TextChanged(Platform::Object^ sender, TextChangedEventArgs^ e)
+{
+    bool carriageReturnPressed = false;
+    if (_messageTextBox_->Text->Length() == (lastMessageText->Length() + 1) &&
+        _messageTextBox_->Text != "\r") {
+        unsigned cursorPos = 0;
+        auto strMessage = Utils::toString(_messageTextBox_->Text);
+        auto strLastMessage = Utils::toString(lastMessageText);
+        for (std::string::size_type i = 0; i < strLastMessage.size(); ++i) {
+            if (strMessage[i] != strLastMessage[i]) {
+                auto changed = strMessage.substr(i, 1);
+                if (changed == "\r") {
+                    carriageReturnPressed = true;
+                    MSG_("CR inside");
+                }
+                break;
+            }
+        }
+
+        if (strMessage.substr(strMessage.length() - 1) == "\r") {
+            if (lastMessageText->Length() != 0) {
+                carriageReturnPressed = true;
+                MSG_("CR at end");
+            }
+        }
+    }
+
+    if (carriageReturnPressed && !(RingD::instance->isCtrlPressed || RingD::instance->isShiftPressed)) {
+        _messageTextBox_->Text = lastMessageText;
+        sendMessage();
+        lastMessageText = "";
+    }
+
+    DependencyObject^ child = VisualTreeHelper::GetChild(_messageTextBox_, 0);
+    auto sendBtnElement = Utils::xaml::FindVisualChildByName(child, "_sendBtn_");
+    auto sendBtn = dynamic_cast<Button^>(sendBtnElement);
+    if (_messageTextBox_->Text != "") {
+        sendBtn->IsEnabled = true;
+    }
+    else {
+        sendBtn->IsEnabled = false;
+    }
+
+    lastMessageText = _messageTextBox_->Text;
+}
+
+void
+VideoPage::_corewindow__KeyDown(CoreWindow^ sender, KeyEventArgs^ e)
+{
+    auto ctrlState = CoreWindow::GetForCurrentThread()->GetKeyState(VirtualKey::Control);
+    auto isCtrlDown = ctrlState != CoreVirtualKeyStates::None;
+    if (isCtrlDown && e->VirtualKey == Windows::System::VirtualKey::I) {
+        _smartInfoBorder_->Visibility = _smartInfoBorder_->Visibility == VIS::Collapsed ? VIS::Visible : VIS::Collapsed;
+    }
+}
diff --git a/VideoPage.xaml.h b/VideoPage.xaml.h
index 1dae05041bd5c85037b2b981566ba3b3199f59e6..cf83d4d88c1f0b63febed95f8e3c4d6dcc53c287 100644
--- a/VideoPage.xaml.h
+++ b/VideoPage.xaml.h
@@ -23,7 +23,9 @@
 
 using namespace Platform;
 using namespace Concurrency;
+using namespace Windows::Media;
 using namespace Windows::Media::Capture;
+using namespace Windows::Graphics::Imaging;
 using namespace Windows::UI::Xaml::Navigation;
 using namespace Windows::UI::Xaml;
 using namespace Windows::UI::Xaml::Media;
@@ -36,7 +38,7 @@ namespace RingClientUWP
 /* delegate */
 delegate void PressHangUpCall();
 delegate void PauseCall();
-delegate void ChatPanelCall(); // nobody use this ?
+delegate void ChatPanelCall(); // used ?
 delegate void AddContactCall();
 delegate void TransferCall();
 delegate void SwitchMicrophoneStateCall();
@@ -51,7 +53,9 @@ public ref class VideoPage sealed
 {
 public:
     VideoPage();
+
     void updatePageContent();
+    void SetBuffer(uint8_t* buf, int width, int height);
 
     property bool barFading {
         bool get(){ return barFading_; }
@@ -78,19 +82,40 @@ internal:
 
 private:
     bool barFading_;
+    String^ lastMessageText;
+    bool showSmartInfo;
+    EventRegistrationToken videoPage_InputHandlerToken;
+
+    DispatcherTimer^ callTimerUpdater;
+
+    VideoFrame^ videoFrame;
+    SoftwareBitmap^ softwareBitmap;
+    Video::VideoRendererWrapper^ currentRendererWrapper;
 
     // For transforming the preview image
     double userPreviewHeightModifier = 0.0;
+    double lastUserPreviewHeightModifier;
+    bool isMovingPreview = false;
     bool isResizingPreview = false;
-    int lastQuadrant = 0;
-    int quadrant = 0;
+    bool isHoveringOnResizer = false;
+    enum class Quadrant {
+        SE, SW, NW, NE
+    } quadrant = Quadrant::SE, lastQuadrant = Quadrant::SE;
     TransformGroup^ PreviewImage_transforms;
     MatrixTransform^ PreviewImage_previousTransform;
     CompositeTransform^ PreviewImage_deltaTransform;
 
+    // Chat panel transformations
+    bool isChatPanelOpen = false;
+    bool isResizingChatPanel = false;
+    double chatPanelSize = 176;
+    double lastchatPanelSize;
+    enum class Orientation {
+        Horizontal, Vertical
+    } chtBoxOrientation = Orientation::Vertical;
+
     Concurrency::task<void> WriteFrameAsSoftwareBitmapAsync(String^ id, uint8_t* buf, int width, int height);
     void _sendBtn__Click(Platform::Object^ sender, RoutedEventArgs^ e);
-    void _messageTextBox__KeyDown(Object^ sender, KeyRoutedEventArgs^ e);
     void sendMessage();
     void Button_Click(Object^ sender, RoutedEventArgs^ e);
     void _btnCancel__Click(Object^ sender, RoutedEventArgs^ e);
@@ -111,24 +136,39 @@ private:
     void IncomingVideoImage_DoubleTapped(Object^ sender, DoubleTappedRoutedEventArgs^ e);
     void OnincomingMessage(String ^callId, String ^payload);
     void OnincomingVideoMuted(String ^callId, bool state);
+    void OnsmartInfoUpdated(const std::map<std::string, std::string>& info);
     void OnstartPreviewing();
     void OnstopPreviewing();
     void OnaudioMuted(const std::string &callId, bool state);
     void OnvideoMuted(const std::string &callId, bool state);
-
-    // For transforming the preview image
+    void openChatPanel();
+    void closeChatPanel();
+    void resizeChatPanel();
     void computeQuadrant();
     void arrangeResizer();
     void anchorPreview();
     void updatePreviewFrameDimensions();
     void InitManipulationTransforms();
+    void updateCallTimer(Object^ sender, Object^ e);
     void PreviewImage_ManipulationDelta(Object^ sender, ManipulationDeltaRoutedEventArgs^ e);
     void PreviewImage_ManipulationCompleted(Object^ sender, ManipulationCompletedRoutedEventArgs^ e);
     void PreviewImageResizer_ManipulationDelta(Object^ sender, ManipulationDeltaRoutedEventArgs^ e);
     void PreviewImageResizer_ManipulationCompleted(Object^ sender, ManipulationCompletedRoutedEventArgs^ e);
+    void _chatPanelResizeBarGrid__ManipulationDelta(Object^ sender, ManipulationDeltaRoutedEventArgs^ e);
+    void _chatPanelResizeBarGrid__ManipulationCompleted(Object^ sender, ManipulationCompletedRoutedEventArgs^ e);
     void PreviewImage_PointerReleased(Object^ sender, PointerRoutedEventArgs^ e);
     void PreviewImageResizer_PointerEntered(Object^ sender, PointerRoutedEventArgs^ e);
     void PreviewImageResizer_PointerExited(Object^ sender, PointerRoutedEventArgs^ e);
+    void PreviewImageResizer_Pressed(Object^ sender, PointerRoutedEventArgs^ e);
+    void _btnToggleOrientation__Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e);
+    void PreviewImageResizer_PointerReleased(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+    void _chatPanelResizeBarGrid__PointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+    void _chatPanelResizeBarGrid__PointerExited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+    void _chatPanelResizeBarGrid__PointerPressed(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+    void _chatPanelResizeBarGrid__PointerReleased(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+    void _videoContent__SizeChanged(Platform::Object^ sender, Windows::UI::Xaml::SizeChangedEventArgs^ e);
+    void _messageTextBox__TextChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::TextChangedEventArgs^ e);
+    void _corewindow__KeyDown(CoreWindow^ sender, KeyEventArgs^ e);
 };
 }
 }
\ No newline at end of file
diff --git a/WelcomePage.xaml b/WelcomePage.xaml
index edb2b53f31713f8dd17f69a6004d1d2b2b0beddf..b4f03f82edfbdd522b285a02a7a8602a67307f7e 100644
--- a/WelcomePage.xaml
+++ b/WelcomePage.xaml
@@ -15,53 +15,78 @@
 *                                                                         *
 * You should have received a copy of the GNU General Public License       *
 * along with this program.  If not, see <http://www.gnu.org/licenses/> .  *
-*********************************************************************** -->
+***********************************************************************-->
 <Page x:Class="RingClientUWP.Views.WelcomePage"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-      xmlns:local="using:RingClientUWP"
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+      xmlns:local="using:RingClientUWP"
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
       NavigationCacheMode="Enabled"
       mc:Ignorable="d">
 
     <Grid>
         <Grid.RowDefinitions>
-            <RowDefinition Height="1*"/>
-            <RowDefinition Height="auto"/>
-            <RowDefinition Height="2*"/>
-            <RowDefinition Height="2*"/>
-            <RowDefinition Height="1*"/>
+            <RowDefinition Height="1*" />
+            <RowDefinition Height="auto" />
+            <RowDefinition Height="2*" />
+            <RowDefinition Height="2*" />
+            <RowDefinition Height="1*" />
         </Grid.RowDefinitions>
         <StackPanel Grid.Row="1">
             <Image x:Name="_welcomeImage_"
-
-                       Source="Assets\Wide310x150Logo.scale-200.png"
+                   Width="310"
+                   Height="150"
+                   Margin="0,10,0,30"
+                   HorizontalAlignment="Center"
+                   Source="Assets\Wide310x150Logo.scale-200.png" />
+            <TextBlock x:Uid="_welcomeDescription_"
                        Width="310"
+                       MaxWidth="500"
                        HorizontalAlignment="Center"
-                       Margin="0 10 0 30"
-                       Height="150"/>
-            <TextBlock Text="Ring is free software for universal communication which respects the freedoms and privacy of its users."
-                           Foreground="#707370"
-                           MaxWidth="500"
-                           Width="310"
-                           TextWrapping="Wrap"
-                           TextAlignment="Justify"
-                           FontSize="12"
-                           FontWeight="Bold"
-                           HorizontalAlignment="Center"/>
-            <HyperlinkButton    Content="Privacy Policy"
-                                FontSize="12"
-                                NavigateUri="https://ring.cx/en/about/privacy-and-anonymity"
-                                HorizontalAlignment="Center"/>
-            <Button x:Name="_aboutButton_"
+                       FontSize="12"
+                       FontWeight="Bold"
+                       Foreground="#707370"
+                       TextAlignment="Justify"
+                       TextWrapping="Wrap" />
+            <HyperlinkButton x:Uid="_welcomePrivacyLink_"
+                             HorizontalAlignment="Center"
+                             FontSize="12"
+                             NavigateUri="https://ring.cx/en/about/privacy-and-anonymity" />
+            <Button x:Uid="_welcomeAboutButton_"
+                    x:Name="_welcomeAboutButton_"
                     Margin="0,48,0,0"
-                    BorderThickness="0"
-                    FontSize="12"
                     HorizontalAlignment="Center"
-                    Content="About"
-                    Click="_aboutButton__Click"
-                    />
+                    BorderThickness="0"
+                    Click="_welcomeAboutButton__Click"
+                    FontSize="12" />
+            <Grid Grid.Row="1" Background="White">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="auto" />
+                    <RowDefinition Height="*" />
+                </Grid.RowDefinitions>
+                <Grid Grid.Row="0"
+                      MaxWidth="140"
+                      MaxHeight="140"
+                      Margin="10"
+                      Padding="5"
+                      Background="white">
+                    <Image Grid.Row="0"
+                           x:Name="_selectedAccountQrCode_"
+                           Width="200"
+                           Height="200"
+                           Margin="5"
+                           Stretch="None"
+                           Visibility="Collapsed"/>
+                </Grid>
+                <TextBlock Grid.Row="1"
+                           x:Name="_ringId_"
+                           Padding="1"
+                           HorizontalAlignment="Center"
+                           IsTextSelectionEnabled="True"
+                           Style="{StaticResource TextStyle4}"/>
+            </Grid>
         </StackPanel>
     </Grid>
 
diff --git a/WelcomePage.xaml.cpp b/WelcomePage.xaml.cpp
index 1b7d42e2cb4fb2f814496dbb7caa6999f4b60b32..49255600a916516826e4e7cf3396a004dea0296d 100644
--- a/WelcomePage.xaml.cpp
+++ b/WelcomePage.xaml.cpp
@@ -21,64 +21,102 @@
 #include "WelcomePage.xaml.h"
 #include "AboutPage.xaml.h"
 
+#include "qrencode.h"
+#include <MemoryBuffer.h>   // IMemoryBufferByteAccess
+
 using namespace RingClientUWP;
 using namespace RingClientUWP::Views;
+using namespace RingClientUWP::ViewModel;
 
 using namespace Windows::UI::ViewManagement;
 using namespace Windows::UI::Core;
 using namespace Windows::UI::Xaml::Controls;
+using namespace Windows::Storage;
+using namespace Windows::UI::Xaml::Media::Imaging;
+using namespace Windows::Graphics::Imaging;
 
 WelcomePage::WelcomePage()
 {
     InitializeComponent();
-    Window::Current->SizeChanged += ref new WindowSizeChangedEventHandler(this, &WelcomePage::OnResize);
-    OnResize(nullptr, nullptr);
+
+    RingD::instance->shareRequested += ref new ShareRequested(this, &WelcomePage::generateShareData);
 };
 
 void
-WelcomePage::PositionImage()
+WelcomePage::_welcomeAboutButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
-    /*Rect imageBounds;
-    imageBounds.Width = static_cast<float>(_welcomePage_->ActualWidth);
-    imageBounds.Height = static_cast<float>(_welcomePage_->ActualHeight);
-
-    _welcomeImage_->SetValue(Canvas::LeftProperty, imageBounds.Width * 0.5 - _welcomeImage_->Width * 0.5);
-    _welcomeImage_->SetValue(Canvas::TopProperty, imageBounds.Height * 0.5 - _welcomeImage_->Height * 0.5);*/
+    auto rootFrame = dynamic_cast<Windows::UI::Xaml::Controls::Frame^>(Window::Current->Content);
+    rootFrame->Navigate(Windows::UI::Xaml::Interop::TypeName(Views::AboutPage::typeid));
 }
 
 void
-WelcomePage::OnResize(Platform::Object^ sender, Windows::UI::Core::WindowSizeChangedEventArgs^ e)
+WelcomePage::generateShareData()
 {
-    //PositionImage();
-}
+    auto ringId = AccountListItemsViewModel::instance->_selectedItem->_account->ringID_;
+    auto ringId2 = Utils::toString(ringId);
 
-void RingClientUWP::Views::WelcomePage::_aboutButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
-{
-    // new window?
-    /*auto currentAV = ApplicationView::GetForCurrentView();
-    auto newAV = CoreApplication::CreateNewView();
-    newAV->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,
-        ref new DispatchedHandler([=]()
+    _ringId_->Text = ringId;
+    _welcomeAboutButton_->Margin = Windows::UI::Xaml::Thickness(0.0, 24.0, 0.0, 0.0);
+
+    auto qrcode = QRcode_encodeString(ringId2.c_str(),
+        0, //Let the version be decided by libqrencode
+        QR_ECLEVEL_L, // Lowest level of error correction
+        QR_MODE_8, // 8-bit data mode
+        1);
+
+    if (!qrcode) {
+        WNG_("Failed to generate QR code: ");
+        return;
+    }
+
+    const int STRETCH_FACTOR = 4;
+    const int widthQrCode = qrcode->width;
+    const int widthBitmap = STRETCH_FACTOR * widthQrCode;
+
+    unsigned char* qrdata = qrcode->data;
+
+    auto frame = ref new SoftwareBitmap(BitmapPixelFormat::Bgra8, widthBitmap, widthBitmap, BitmapAlphaMode::Premultiplied);
+
+    const int BYTES_PER_PIXEL = 4;
+
+
+    BitmapBuffer^ buffer = frame->LockBuffer(BitmapBufferAccessMode::ReadWrite);
+    IMemoryBufferReference^ reference = buffer->CreateReference();
+
+    Microsoft::WRL::ComPtr<IMemoryBufferByteAccess> byteAccess;
+    if (SUCCEEDED(reinterpret_cast<IUnknown*>(reference)->QueryInterface(IID_PPV_ARGS(&byteAccess))))
     {
-        auto newWindow = Window::Current;
-        auto newAppView = ApplicationView::GetForCurrentView();
-        newAppView->Title = "About";
+        byte* data;
+        unsigned capacity;
+        byteAccess->GetBuffer(&data, &capacity);
 
-        auto frame = ref new Windows::UI::Xaml::Controls::Frame();
-        frame->Navigate(Windows::UI::Xaml::Interop::TypeName(Views::AboutPage::typeid));
-        newWindow->Content = frame;
-        newWindow->Activate();
+        auto desc = buffer->GetPlaneDescription(0);
 
-        ApplicationViewSwitcher::TryShowAsStandaloneAsync(
-                        newAppView->Id,
-                        ViewSizePreference::UseMinimum,
-                        currentAV->Id,
-                        ViewSizePreference::UseMinimum);
+        unsigned char* row, *p;
+        p = qrcode->data;
 
-        RingD::instance->isInAbout = true;
-        newAppView->TryResizeView(Size(200, 200));
-    }));*/
+        for (int u = 0; u < widthBitmap; u++) {
+            for (int v = 0; v < widthBitmap; v++) {
+                int x = static_cast<int>((float)u / (float)widthBitmap * (float)widthQrCode);
+                int y = static_cast<int>((float)v / (float)widthBitmap * (float)widthQrCode);
 
-    auto rootFrame = dynamic_cast<Windows::UI::Xaml::Controls::Frame^>(Window::Current->Content);
-    rootFrame->Navigate(Windows::UI::Xaml::Interop::TypeName(Views::AboutPage::typeid));
-}
+                auto currPixelRow = desc.StartIndex + desc.Stride * u + BYTES_PER_PIXEL * v;
+                row = (p + (y * widthQrCode));
+
+                if (*(row + x) & 0x1) {
+                    data[currPixelRow + 3] = 255;
+                }
+            }
+        }
+
+    }
+    delete reference;
+    delete buffer;
+
+    auto sbSource = ref new Media::Imaging::SoftwareBitmapSource();
+
+    sbSource->SetBitmapAsync(frame);
+
+    _selectedAccountQrCode_->Source = sbSource;
+    _selectedAccountQrCode_->Visibility = VIS::Visible;
+}
\ No newline at end of file
diff --git a/WelcomePage.xaml.h b/WelcomePage.xaml.h
index 7cf6e94357c456b23ab2931bc95a8cf02305fb70..a69ed7f8a71b128e3fd0c227d7190e260c1d1a4e 100644
--- a/WelcomePage.xaml.h
+++ b/WelcomePage.xaml.h
@@ -31,11 +31,11 @@ public ref class WelcomePage sealed
 {
 public:
     WelcomePage();
-protected:
-    void PositionImage();
-    void OnResize(Platform::Object^ sender, Windows::UI::Core::WindowSizeChangedEventArgs^ e);
+    void    generateShareData();
+
 private:
-    void _aboutButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void    _welcomeAboutButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+
 internal:
     event SummonAboutPage^ summonAboutPage;
 };
diff --git a/Wizard.xaml b/Wizard.xaml
index a9cae8bf0e58a0e86ed368095cd0455de40e3506..8176bcb1917bc191fcb1a3307a92cd20c844ef2b 100644
--- a/Wizard.xaml
+++ b/Wizard.xaml
@@ -1,282 +1,336 @@
-<Page
-    x:Class="RingClientUWP.Views.Wizard"
-    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:local="using:RingClientUWP"
-    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    NavigationCacheMode="Enabled"
-    mc:Ignorable="d">
+<!-- **********************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: Jäger Nicolas<nicolas.jager@savoirfairelinux.com>               *
+* Author: Traczyk Andreas<andreas.traczyk@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/> .  *
+***********************************************************************-->
+<Page x:Class="RingClientUWP.Views.Wizard"
+      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+      xmlns:local="using:RingClientUWP"
+      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+      NavigationCacheMode="Enabled"
+      mc:Ignorable="d">
 
     <ScrollViewer VerticalScrollBarVisibility="Auto">
         <Grid>
             <StackPanel Width="400">
-                <Rectangle Height="50"/>
+                <Rectangle Height="50" />
+                <TextBlock x:Uid="_welcome_"
+                           HorizontalAlignment="Center"
+                           Style="{StaticResource HeaderTextBlockStyle}"
+                           FontWeight="Normal"
+                           FontSize="60"
+                           Foreground="#FF535E5E">
+                    <TextBlock.RenderTransform>
+                        <TranslateTransform X="0" Y="10"/>
+                    </TextBlock.RenderTransform>
+                </TextBlock>
                 <Image x:Name="_welcomeImage_"
-                       Source="Assets\Wide310x150Logo.scale-200.png"
                        Width="310"
+                       Height="150"
+                       Margin="0,10,0,30"
                        HorizontalAlignment="Center"
-                       Margin="0 10 0 30"
-                       Height="150"/>
-                <StackPanel Height="auto"
-                            Background="#3bc1d3"
-                            Grid.Column="0">
-                    <Button x:Name="_showCreateAccountMenuTitle_"
-                            Content="Create New Account"
-                            Foreground="White"
-                            Click="collapseMenus"
-                            Style="{StaticResource ButtonStyle8}"
-                            Visibility="Collapsed"
-                            HorizontalAlignment="Center"/>
+                       Source="Assets\Wide310x150Logo.scale-200.png" />
+                <StackPanel x:Name="_createStack_"
+                            Height="auto"
+                            Margin="0,0,0,0"
+                            Background="{StaticResource RingBlueMidBrush}"
+                            Visibility="Visible">
+                    <TextBlock x:Name="_showCreateAccountMenuTitle_"
+                               x:Uid="_wizardCreateAccountTitle_"
+                               HorizontalAlignment="Center"
+                               FontSize="30"
+                               Foreground="White"
+                               Padding="4"
+                               Style="{StaticResource SubheaderTextBlockStyle}"
+                               Visibility="Collapsed" />
                     <Button x:Name="_showCreateAccountMenuBtn_"
-                            Content="Create New Account"
-                            Visibility="Visible"
+                            x:Uid="_wizardCreateAccount_"
+                            Width="400"
+                            Height="36"
                             HorizontalAlignment="Center"
-                            Style="{StaticResource ButtonStyle4}"
-                            Click="_showCreateAccountMenuBtn__Click"/>
+                            Click="_showCreateAccountMenuBtn__Click"
+                            FontSize="18"
+                            Style="{StaticResource WizardButtons1}"
+                            Visibility="Visible" />
                     <Grid x:Name="_accountCreationMenuGrid_"
-                          Background="#3bc1d3"
+                          Background="{StaticResource RingBlueMidBrush}"
                           Visibility="Collapsed">
                         <Grid.RowDefinitions>
-                            <RowDefinition Height="auto"/>
-                            <RowDefinition Height="30"/>
+                            <RowDefinition Height="auto" />
+                            <RowDefinition Height="30" />
                         </Grid.RowDefinitions>
-                        <StackPanel Orientation="Vertical"
-                                    Grid.Row="0"
-                                    Background="#FFE4F1F9">
-                            <!-- note : we propose only RING account from the wizard. -->
+                        <StackPanel Grid.Row="0"
+                                    Background="{StaticResource RingBlueLightBrush}"
+                                    Orientation="Vertical">
+                            <!--  note : we propose only RING account from the wizard.  -->
                             <StackPanel x:Name="_ringAccountCreationStack_"
-                                        Visibility="Visible"
-                                        Padding="10,0">
-                                <Button  x:Name="_avatarWebcamCaptureBtn_"
-                                         Margin="0,10,0,0"
-                                         VerticalAlignment="Center"
-                                         Content="&#xE8B8;"
-                                         Click="_avatarWebcamCaptureBtn__Click"
-                                         Style="{StaticResource ButtonStyle3}"
-                                         HorizontalAlignment="Center"/>
+                                        Padding="10,0"
+                                        Visibility="Visible">
+                                <Button x:Name="_avatarWebcamCaptureBtn_"
+                                        Width="90"
+                                        Height="90"
+                                        Margin="0,10,0,0"
+                                        HorizontalAlignment="Center"
+                                        VerticalAlignment="Center"
+                                        Click="_avatarWebcamCaptureBtn__Click"
+                                        Content="&#xE8B8;"
+                                        Style="{StaticResource ButtonStyle3}" />
                                 <Grid Margin="0,10">
                                     <Grid.ColumnDefinitions>
-                                        <ColumnDefinition Width="*"/>
-                                        <ColumnDefinition Width="25"/>
+                                        <ColumnDefinition Width="*" />
+                                        <ColumnDefinition Width="25" />
                                     </Grid.ColumnDefinitions>
-                                    <!-- ajouter add a new account to et mettre le fullname -->
-                                    <TextBox x:Name="_fullnameTextBox_"
-                                             Grid.Column="0"
-                                             PlaceholderText="Enter your full name"
-                                             KeyUp="_fullnameTextBox__KeyUp"/>
-                                    <TextBlock x:Name="_fullnameValid_"
-                                               Grid.Column="1"
+                                    <!--  ajouter add a new account to et mettre le fullname  -->
+                                    <TextBox Grid.Column="0"
+                                             x:Name="_fullnameTextBox_"
+                                             x:Uid="_wizardFullName_"
+                                             Margin="20,0,20,0"
+                                             IsSpellCheckEnabled="False"
+                                             KeyUp="_fullnameTextBox__KeyUp" />
+                                    <TextBlock Grid.Column="1"
+                                               x:Name="_fullnameValid_"
+                                               Margin="-20,0,0,0"
                                                Padding="10,0"
                                                Style="{StaticResource TextSegoeStyle-20pt-green}"
-                                               Visibility="Collapsed"
-                                               Text="&#xE10B;"/>
-                                    <TextBlock x:Name="_fullnameInvalid_"
-                                               Grid.Column="1"
+                                               Text="&#xE10B;"
+                                               Visibility="Collapsed" />
+                                    <TextBlock Grid.Column="1"
+                                               x:Name="_fullnameInvalid_"
+                                               Margin="-20,0,0,0"
                                                Padding="10,0"
                                                Style="{StaticResource TextSegoeStyle-20pt-red}"
-                                               Text="&#xE10A;"/>
+                                               Text="&#xE10A;" />
                                 </Grid>
-                                <!-- Register public username -->
-                                <StackPanel Orientation="Horizontal"
-                                            Margin="0,20,0,10">
-                                    <TextBlock Style="{StaticResource TextSegoeStyle-24pt-black}"
-                                               Text="&#xE167;"/>
-                                    <TextBlock Text="Register public username"
-                                               Style="{StaticResource TitleTextBlockStyle}"/>
+                                <!--  Register public username  -->
+                                <StackPanel Margin="10,20,0,10" Orientation="Horizontal">
+                                    <TextBlock Style="{StaticResource TextSegoeStyle-24pt-black}" Text="&#xE167;" />
+                                    <TextBlock x:Uid="_accountsRegisterPublicName_"
+                                               Margin="10,0,0,0"
+                                               FontWeight="SemiLight"
+                                               Style="{StaticResource TitleTextBlockStyle}" />
                                 </StackPanel>
                                 <ToggleSwitch x:Name="_RegisterState_"
-                                              Toggled="_RegisterState__Toggled"
+                                              Margin="20,10,0,10"
                                               IsOn="True"
-                                              Margin="0,10"/>
-                                <TextBlock x:Name="_whatWilHappen_"
-                                           Margin="0,10,0,0"
-                                           Style="{StaticResource BodyTextBlockStyle}"
-                                           Text="peoples will find you with your username"/>
-                                <HyperlinkButton Content="Learn more"
-                                                 Margin="0,0,0,10"
-                                                 NavigateUri="http://ring.cx"/>
+                                              Toggled="_RegisterState__Toggled" />
+                                <TextBlock x:Name="_whatWillHappen_"
+                                           x:Uid="_whatWillHappenEditionUid_"
+                                           Margin="20,10,0,0"
+                                           Style="{StaticResource BodyTextBlockStyle}" />
+                                <HyperlinkButton Margin="20,0,0,10"
+                                                 Content="Learn more"
+                                                 NavigateUri="http://ring.cx" />
                                 <Grid Margin="0,10">
                                     <Grid.ColumnDefinitions>
-                                        <ColumnDefinition Width="*"/>
-                                        <ColumnDefinition Width="25"/>
+                                        <ColumnDefinition Width="*" />
+                                        <ColumnDefinition Width="25" />
                                     </Grid.ColumnDefinitions>
-                                    <TextBox x:Name="_usernameTextBox_"
-                                             Grid.Column="0"
-                                             PlaceholderText="Enter your full name"
-                                             KeyUp="_usernameTextBox__KeyUp"/>
-                                    <TextBlock x:Name="_usernameValid_"
-                                               Grid.Column="1"
+                                    <TextBox Grid.Column="0"
+                                             x:Name="_usernameTextBox_"
+                                             x:Uid="_usernameTextBoxEditionUid_"
+                                             Margin="20,0,20,0"
+                                             IsSpellCheckEnabled="False"
+                                             KeyUp="_usernameTextBox__KeyUp"
+                                             PlaceholderText="" />
+                                    <TextBlock Grid.Column="1"
+                                               x:Name="_usernameValid_"
+                                               Margin="-20,0,0,0"
                                                Padding="10,0"
                                                Style="{StaticResource TextSegoeStyle-20pt-green}"
-                                               Visibility="Collapsed"
-                                               Text="&#xE10B;"/>
-                                    <TextBlock x:Name="_usernameInvalid_"
-                                               Grid.Column="1"
+                                               Text="&#xE10B;"
+                                               Visibility="Collapsed" />
+                                    <TextBlock Grid.Column="1"
+                                               x:Name="_usernameInvalid_"
+                                               Margin="-20,0,0,0"
                                                Padding="10,0"
                                                Style="{StaticResource TextSegoeStyle-20pt-red}"
-                                               Text="&#xE10A;"/>
+                                               Text="&#xE10A;" />
                                 </Grid>
-                                <StackPanel Orientation="Horizontal"
-                                            Margin="0,20,0,10">
-                                    <TextBlock Style="{StaticResource TextSegoeStyle-24pt-black}"
-                                               Text="&#xE8D7;"/>
-                                    <TextBlock Text="Ring account password"
-                                               Style="{StaticResource TitleTextBlockStyle}"/>
+                                <StackPanel Margin="10,20,0,10" Orientation="Horizontal">
+                                    <TextBlock Style="{StaticResource TextSegoeStyle-24pt-black}" Text="&#xE8D7;" />
+                                    <TextBlock x:Uid="_wizardRingAccountPassword_"
+                                               Margin="10,0,0,0"
+                                               FontWeight="SemiLight"
+                                               Style="{StaticResource TitleTextBlockStyle}" />
                                 </StackPanel>
                                 <Grid Margin="0,10">
                                     <Grid.ColumnDefinitions>
-                                        <ColumnDefinition Width="*"/>
-                                        <ColumnDefinition Width="25"/>
+                                        <ColumnDefinition Width="*" />
+                                        <ColumnDefinition Width="25" />
                                     </Grid.ColumnDefinitions>
                                     <PasswordBox x:Name="_password_"
-                                             Margin="0,10"
-                                             PasswordChanged="_password__PasswordChanged"
-                                             PlaceholderText="Enter your password"/>
-                                    <TextBlock x:Name="_passwordValid_"
-                                               Grid.Column="1"
+                                                 x:Uid="_accountsEnterArchivePassword_"
+                                                 Margin="20,10,20,10"
+                                                 PasswordChanged="_password__PasswordChanged" />
+                                    <TextBlock Grid.Column="1"
+                                               x:Name="_passwordValid_"
+                                               Margin="-20,0,0,0"
                                                Padding="10,0"
                                                Style="{StaticResource TextSegoeStyle-20pt-green}"
-                                               Visibility="Collapsed"
-                                               Text="&#xE10B;"/>
-                                    <TextBlock x:Name="_passwordInvalid_"
-                                               Grid.Column="1"
+                                               Text="&#xE10B;"
+                                               Visibility="Collapsed" />
+                                    <TextBlock Grid.Column="1"
+                                               x:Name="_passwordInvalid_"
+                                               Margin="-20,0,0,0"
                                                Padding="10,0"
                                                Style="{StaticResource TextSegoeStyle-20pt-red}"
-                                               Text="&#xE10A;"/>
+                                               Text="&#xE10A;" />
                                 </Grid>
                                 <Grid Margin="0,10">
                                     <Grid.ColumnDefinitions>
-                                        <ColumnDefinition Width="*"/>
-                                        <ColumnDefinition Width="25"/>
+                                        <ColumnDefinition Width="*" />
+                                        <ColumnDefinition Width="25" />
                                     </Grid.ColumnDefinitions>
                                     <PasswordBox x:Name="_passwordCheck_"
-                                                 Margin="0,10,0,20"
-                                                 PasswordChanged="_passwordCheck__PasswordChanged"
-                                                 PlaceholderText="Repeat your Password"/>
-                                    <TextBlock x:Name="_passwordCheckValid_"
-                                               Grid.Column="1"
+                                                 x:Uid="_ringPasswordBoxAccountCreationCheckUid_"
+                                                 Margin="20,0,20,20"
+                                                 PasswordChanged="_passwordCheck__PasswordChanged" />
+                                    <TextBlock Grid.Column="1"
+                                               x:Name="_passwordCheckValid_"
+                                               Margin="-20,0,0,0"
                                                Padding="10,0"
                                                Style="{StaticResource TextSegoeStyle-20pt-green}"
-                                               Visibility="Collapsed"
-                                               Text="&#xE10B;"/>
-                                    <TextBlock x:Name="_passwordCheckInvalid_"
-                                               Grid.Column="1"
+                                               Text="&#xE10B;"
+                                               Visibility="Collapsed" />
+                                    <TextBlock Grid.Column="1"
+                                               x:Name="_passwordCheckInvalid_"
+                                               Margin="-20,0,0,0"
                                                Padding="10,0"
                                                Style="{StaticResource TextSegoeStyle-20pt-red}"
-                                               Text="&#xE10A;"/>
+                                               Text="&#xE10A;" />
                                 </Grid>
                             </StackPanel>
                         </StackPanel>
-                        <!-- buttons yes/no to create the new account. -->
+                        <!--  buttons yes/no to create the new account.  -->
                         <Grid Grid.Row="1">
-                            <StackPanel Orientation="Horizontal"
-                                    HorizontalAlignment="Center">
+                            <StackPanel Grid.Row="1"
+                                        HorizontalAlignment="Center"
+                                        Orientation="Horizontal">
                                 <Button x:Name="_createAccountYes_"
-                                    Grid.Row="1"
-                                    VerticalAlignment="Center"
-                                    HorizontalAlignment="Center"
-                                    Content="&#xE081;"
-                                    IsEnabled="False"
-                                    Click="_createAccountYes__Click"
-                                    Style="{StaticResource ButtonStyle2}"/>
+                                        HorizontalAlignment="Center"
+                                        VerticalAlignment="Center"
+                                        Click="_createAccountYes__Click"
+                                        Content="&#xE081;"
+                                        IsEnabled="False"
+                                        Style="{StaticResource ButtonStyle2}">
+                                    <ToolTipService.ToolTip>
+                                        <TextBlock x:Uid="_tt_create_account_yes_" />
+                                    </ToolTipService.ToolTip>
+                                </Button>
+                                <Button x:Name="_createAccountNo_"
+                                        HorizontalAlignment="Center"
+                                        VerticalAlignment="Center"
+                                        Click="collapseMenus"
+                                        Content="&#xE106;"
+                                        IsEnabled="True"
+                                        Style="{StaticResource ButtonStyle2}">
+                                    <ToolTipService.ToolTip>
+                                        <TextBlock x:Uid="_tt_account_cancel_" />
+                                    </ToolTipService.ToolTip>
+                                </Button>
                             </StackPanel>
                         </Grid>
                     </Grid>
                 </StackPanel>
-                <Rectangle Height="50"/>
-                <!-- add account. -->
-                <StackPanel Height="auto"
-                        Background="#3bc1d3"
-                        Grid.Column="2">
-                    <StackPanel x:Name="addExistingAccountStep1">
-                    </StackPanel>
+                <StackPanel x:Name="_addStack_"
+                            Height="auto"
+                            Margin="0,36,0,50"
+                            Background="{StaticResource RingBlueMidBrush}"
+                            Visibility="Visible">
+                    <StackPanel x:Name="addExistingAccountStep1" />
                     <StackPanel x:Name="addExistingAccountStep2">
-                        <Button x:Name="_showAddAccountMenuTitle_"
-                                Content="Add Existing Account"
-                                Foreground="White"
-                                Visibility="Collapsed"
-                                Style="{StaticResource ButtonStyle8}"
-                                Click="collapseMenus"
-                                HorizontalAlignment="Center"/>
+                        <TextBlock x:Name="_showAddAccountMenuTitle_"
+                                   x:Uid="_wizardAddExistingAccountTitle_"
+                                   HorizontalAlignment="Center"
+                                   FontSize="30"
+                                   Foreground="White"
+                                   Padding="4"
+                                   Style="{StaticResource SubheaderTextBlockStyle}"
+                                   Visibility="Collapsed" />
                         <Button x:Name="_showAddAccountMenuBtn_"
-                                Visibility="Visible"
-                                Content="Add Existing Account"
+                                x:Uid="_wizardAddExistingAccount_"
+                                Width="400"
+                                Height="36"
                                 HorizontalAlignment="Center"
-                                Style="{StaticResource ButtonStyle4}"
-                                Click="_showAddAccountMenuBtn__Click"/>
+                                Click="_showAddAccountMenuBtn__Click"
+                                FontSize="18"
+                                Style="{StaticResource WizardButtons1}"
+                                Visibility="Visible" />
                         <Grid x:Name="_accountAddMenuGrid_"
-                          Visibility="Collapsed"
-                          Background="#3bc1d3">
+                              Background="{StaticResource RingBlueMidBrush}"
+                              Visibility="Collapsed">
                             <Grid.RowDefinitions>
-                                <RowDefinition Height="30"/>
-                                <RowDefinition Height="auto"/>
-                                <RowDefinition Height="30"/>
+                                <RowDefinition Height="0" />
+                                <RowDefinition Height="auto" />
+                                <RowDefinition Height="30" />
                             </Grid.RowDefinitions>
-                            <StackPanel Orientation="Horizontal"
-                                        Grid.Row="0">
-                                <Button x:Name="_step1button_"
-                                        Style="{StaticResource ButtonStyle4}"
-                                        Content="Step 1"
-                                        Click="_step1button__Click"/>
-                                <TextBlock Text=">"
-                                           VerticalAlignment="Center"
-                                           Style="{StaticResource TextStyle7}"/>
-                                <Button x:Name="_step2button_"
-                                        Style="{StaticResource ButtonStyle4}"
-                                        Click="_step2button__Click"
-                                        Content="Step 2"/>
-                            </StackPanel>
-                            <!-- step 1. -->
-                            <StackPanel x:Name="_step1Menu_"
-                                        Background="#FFE4F1F9"
-                                        Padding="10"
-                                        Grid.Row="1">
-                                <TextBlock Text="To link this device to a Ring account, you'll first need to generate a PIN from Ring on a device hosting the account."
-                                           TextWrapping="Wrap"
-                                           TextAlignment="Justify"/>
-                                <HyperlinkButton Content="Learn more"
-                                                 Margin="0,0,0,10"
-                                                 NavigateUri="http://ring.cx"/>
-                            </StackPanel>
-                            <!-- step 2. -->
-                            <StackPanel x:Name="_step2Menu_"
-                                        Background="#FFE4F1F9"
-                                        Visibility="Collapsed"
-                                        Grid.Row="1">
-                                <TextBox  x:Name="_PINTextBox_"
-                                      Margin="10"
-                                      GotFocus="_PINTextBox__GotFocus"
-                                          KeyUp="_PINTextBox__KeyUp"
-                                      PlaceholderText="Enter PIN"/>
+                            <StackPanel Grid.Row="1"
+                                        x:Name="_step2Menu_"
+                                        Background="{StaticResource RingBlueLightBrush}"
+                                        Orientation="Vertical">
+                                <TextBlock x:Uid="_accountsAddStep1_"
+                                           Margin="30,20,30,20"
+                                           TextAlignment="Justify"
+                                           TextWrapping="Wrap" />
+                                <HyperlinkButton x:Uid="_accountsEditionLearnMore_"
+                                                 Margin="30,0,0,10"
+                                                 NavigateUri="http://ring.cx" />
+                                <TextBox x:Name="_PINTextBox_"
+                                         x:Uid="_accountsAddEnterPIN_"
+                                         Margin="30,20,30,10"
+                                         GotFocus="_PINTextBox__GotFocus"
+                                         IsSpellCheckEnabled="False"
+                                         KeyUp="_PINTextBox__KeyUp" />
                                 <PasswordBox x:Name="_ArchivePassword_"
-                                      Margin="10"
-                                             KeyUp="_ArchivePassword__KeyUp"
-                                      PlaceholderText="Enter your password"/>
+                                             x:Uid="_accountsEnterArchivePassword_"
+                                             Margin="30,10,30,10"
+                                             KeyUp="_ArchivePassword__KeyUp" />
                                 <TextBlock x:Name="_response_"
-                                           Foreground="Red"
                                            HorizontalAlignment="Center"
-                                           Text=""/>
+                                           Foreground="Red" />
                             </StackPanel>
-                            <!-- buttons next step and yes/no to add the account. -->
+                            <!--  buttons next step and yes/no to add the account.  -->
                             <Grid Grid.Row="2">
-                                <StackPanel Orientation="Horizontal"
-                                            Padding="10,0"
-                                            HorizontalAlignment="Center">
-                                    <Button x:Name="_nextstep_"
-                                            VerticalAlignment="Center"
+                                <StackPanel Padding="10,0"
                                             HorizontalAlignment="Center"
-                                            Content="&#xE081;"
-                                            Click="_step2button__Click"
-                                            Style="{StaticResource ButtonStyle2}"/>
+                                            Orientation="Horizontal">
                                     <Button x:Name="_addAccountYes_"
-                                            VerticalAlignment="Center"
                                             HorizontalAlignment="Center"
-                                            Visibility="Collapsed"
-                                            Content="&#xE081;"
+                                            VerticalAlignment="Center"
                                             Click="_addAccountYes__Click"
+                                            Content="&#xE081;"
                                             IsEnabled="False"
-                                            Style="{StaticResource ButtonStyle2}"/>
+                                            Style="{StaticResource ButtonStyle2}">
+                                        <ToolTipService.ToolTip>
+                                            <TextBlock x:Uid="_tt_add_account_yes_" />
+                                        </ToolTipService.ToolTip>
+                                    </Button>
+                                    <Button x:Name="_addAccountNo_"
+                                            HorizontalAlignment="Center"
+                                            VerticalAlignment="Center"
+                                            Click="collapseMenus"
+                                            Content="&#xE106;"
+                                            IsEnabled="True"
+                                            Style="{StaticResource ButtonStyle2}">
+                                        <ToolTipService.ToolTip>
+                                            <TextBlock x:Uid="_tt_account_cancel_" />
+                                        </ToolTipService.ToolTip>
+                                    </Button>
                                 </StackPanel>
                             </Grid>
                         </Grid>
@@ -285,10 +339,4 @@
             </StackPanel>
         </Grid>
     </ScrollViewer>
-
-
-
-
-
-
 </Page>
diff --git a/Wizard.xaml.cpp b/Wizard.xaml.cpp
index b7af70c28ae2e292e0b24dbcdcd8f223a821a68e..7d94bd84fb184c6f8a7fb12ea9b621a2a9a692ea 100644
--- a/Wizard.xaml.cpp
+++ b/Wizard.xaml.cpp
@@ -1,3 +1,22 @@
+/**************************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: J�ger Nicolas <nicolas.jager@savoirfairelinux.com>              *
+* Author: Traczyk Andreas <andreas.traczyk@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 "pch.h"
 #include <direct.h>
 #include "Wizard.xaml.h"
@@ -34,26 +53,41 @@ Wizard::Wizard()
 
 void RingClientUWP::Views::Wizard::OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs ^ e)
 {
-    RingD::instance->init();
+    if (!RingD::instance->daemonRunning) {
+        RingD::instance->init();
+    }
+
+    collapseMenus(nullptr, nullptr);
+    _password_->Password = "";
+    _passwordCheck_->Password = "";
+    _ArchivePassword_->Password = "";
+    _PINTextBox_->Text = "";
+    _fullnameTextBox_->Text = "";
+    _usernameTextBox_->Text = "";
+    _RegisterState_->IsOn = true;
+
+    RingD::instance->isInWizard = true;
 }
 
 void
 Wizard::_createAccountYes__Click(Object^ sender, RoutedEventArgs^ e)
 {
-    //RingD::instance->_startingStatus = StartingStatus::REGISTERING_ON_THIS_PC;
     this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::High, ref new Windows::UI::Core::DispatchedHandler([this] () {
+        RingD::instance->isInWizard = false;
         this->Frame->Navigate(Windows::UI::Xaml::Interop::TypeName(RingClientUWP::MainPage::typeid));
         RingD::instance->createRINGAccount(_fullnameTextBox_->Text
                                            , _password_->Password
                                            , true // upnp by default set to true
                                            , (_RegisterState_->IsOn)? _usernameTextBox_->Text : "");
-        _password_->Password = "";
     }));
 }
 
 void
 Wizard::_showCreateAccountMenuBtn__Click(Object^ sender, RoutedEventArgs^ e)
 {
+    _addStack_->Visibility = VIS::Collapsed;
+    _createStack_->Margin = Windows::UI::Xaml::Thickness(0.0, 0.0, 0.0, 50.0);
+
     _accountAddMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _showAddAccountMenuTitle_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _showAddAccountMenuBtn_->Visibility = Windows::UI::Xaml::Visibility::Visible;
@@ -66,6 +100,9 @@ Wizard::_showCreateAccountMenuBtn__Click(Object^ sender, RoutedEventArgs^ e)
 void
 Wizard::_showAddAccountMenuBtn__Click(Object^ sender, RoutedEventArgs^ e)
 {
+    _createStack_->Visibility = VIS::Collapsed;
+    _addStack_->Margin = Windows::UI::Xaml::Thickness(0.0, 0.0, 0.0, 50.0);
+
     _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _showCreateAccountMenuTitle_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _showCreateAccountMenuBtn_->Visibility = Windows::UI::Xaml::Visibility::Visible;
@@ -78,40 +115,20 @@ Wizard::_showAddAccountMenuBtn__Click(Object^ sender, RoutedEventArgs^ e)
 void
 Wizard::_avatarWebcamCaptureBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
-    CameraCaptureUI^ cameraCaptureUI = ref new CameraCaptureUI();
-    cameraCaptureUI->PhotoSettings->Format = CameraCaptureUIPhotoFormat::Jpeg;
-    cameraCaptureUI->PhotoSettings->CroppedSizeInPixels = Size(80, 80);
-
-    create_task(cameraCaptureUI->CaptureFileAsync(CameraCaptureUIMode::Photo))
-    .then([this](StorageFile^ photoFile)
-    {
-        if (photoFile != nullptr) {
-            auto brush = ref new ImageBrush();
-
-            auto circle = ref new Ellipse();
-            circle->Height = 80;
-            circle->Width = 80;
-            auto path = photoFile->Path;
-            auto uri = ref new Windows::Foundation::Uri(path);
-            auto bitmapImage = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage();
-            bitmapImage->UriSource = uri;
-
-            std::string fileBuffer = Utils::getStringFromFile(Utils::toString(photoFile->Path));
-            std::string profilePath = RingD::instance->getLocalFolder() + ".profile";
-            _mkdir(profilePath.c_str());
-            std::ofstream file((profilePath + "\\profile_image.png"),
-                               std::ios::out | std::ios::trunc | std::ios::binary);
-            if (file.is_open()) {
-                file << fileBuffer;
-                file.close();
+    create_task(Configuration::getProfileImageAsync()).then([&](task<BitmapImage^> image){
+        try {
+            if (auto bitmapImage = image.get()) {
+                auto brush = ref new ImageBrush();
+                auto circle = ref new Ellipse();
+                circle->Height = 100;
+                circle->Width = 100;
+                brush->ImageSource = bitmapImage;
+                circle->Fill = brush;
+                _avatarWebcamCaptureBtn_->Content = circle;
             }
-
-            Configuration::UserPreferences::instance->PREF_PROFILE_HASPHOTO = true;
-            Configuration::UserPreferences::instance->save();
-
-            brush->ImageSource = bitmapImage;
-            circle->Fill = brush;
-            _avatarWebcamCaptureBtn_->Content = circle;
+        }
+        catch (Platform::Exception^ e) {
+            EXC_(e);
         }
     });
 }
@@ -201,12 +218,11 @@ void RingClientUWP::Views::Wizard::_usernameTextBox__KeyUp(Platform::Object^ sen
         _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
         _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
     } else {
-        RingD::instance->lookUpName(alias);
+        auto accountId = ViewModel::AccountListItemsViewModel::instance->getSelectedAccountId();
+        RingD::instance->lookUpName(Utils::toString(accountId), alias);
         _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
         _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     }
-
-    // checkState(); is made in OnregisteredNameFound
 }
 
 void RingClientUWP::Views::Wizard::_RegisterState__Toggled(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
@@ -220,10 +236,12 @@ void RingClientUWP::Views::Wizard::_RegisterState__Toggled(Platform::Object^ sen
 
     if (isPublic) {
         _usernameTextBox_->IsEnabled = true;
-        _whatWilHappen_->Text = "peoples will find you with your username.";
+        auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+        _whatWillHappen_->Text = loader->GetString("_whatWillHappenEditionUid_.Text");
     } else {
         _usernameTextBox_->IsEnabled = false;
-        _whatWilHappen_->Text = "you'll have to send your ringId.";
+        auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+        _whatWillHappen_->Text = loader->GetString("_whatWillHappen_2_");
     }
 
     checkState();
@@ -246,6 +264,12 @@ void RingClientUWP::Views::Wizard::_fullnameTextBox__KeyUp(Platform::Object^ sen
 
 void RingClientUWP::Views::Wizard::collapseMenus(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
+    _createStack_->Visibility = VIS::Visible;
+    _addStack_->Visibility = VIS::Visible;
+
+    _createStack_->Margin = Windows::UI::Xaml::Thickness(0.0, 0.0, 0.0, 0.0);
+    _addStack_->Margin = Windows::UI::Xaml::Thickness(0.0, 36.0, 0.0, 50.0);
+
     _accountAddMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _showAddAccountMenuTitle_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _showAddAccountMenuBtn_->Visibility = Windows::UI::Xaml::Visibility::Visible;
@@ -255,34 +279,13 @@ void RingClientUWP::Views::Wizard::collapseMenus(Platform::Object^ sender, Windo
     _showCreateAccountMenuBtn_->Visibility = Windows::UI::Xaml::Visibility::Visible;
 }
 
-void RingClientUWP::Views::Wizard::_step1button__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
-{
-    _step1Menu_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-    _step2Menu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-
-    _nextstep_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-    _addAccountYes_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-}
-
-void RingClientUWP::Views::Wizard::_step2button__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
-{
-    _step1Menu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-    _step2Menu_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-
-    _nextstep_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-    _addAccountYes_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-}
-
-void RingClientUWP::Views::Wizard::OnregisteredNameFound(LookupStatus status, const std::string& address, const std::string& name)
+void RingClientUWP::Views::Wizard::OnregisteredNameFound(LookupStatus status,  const std::string& accountId, const std::string& address, const std::string& name)
 {
     switch (status)
     {
     case LookupStatus::SUCCESS:
-        _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-        _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-        isUsernameValid = false;
-        break;
     case LookupStatus::INVALID_NAME:
+    case LookupStatus::ERRORR:
         _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
         _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
         isUsernameValid = false;
@@ -292,31 +295,23 @@ void RingClientUWP::Views::Wizard::OnregisteredNameFound(LookupStatus status, co
         _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
         isUsernameValid = true;
         break;
-    case LookupStatus::ERRORR:
-        _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-        _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-        isUsernameValid = false;
-        break;
     }
 
     checkState();
 }
 
-
-
 void RingClientUWP::Views::Wizard::OnregistrationStateErrorGeneric(const std::string &accountId)
 {
-    _response_->Text = "Credentials error or PIN expired.";
+    auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
+    _response_->Text = loader->GetString("_accountsCredentialsExpired_");
     _addAccountYes_->IsEnabled = false;
 }
 
-
 void RingClientUWP::Views::Wizard::_PINTextBox__GotFocus(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     _response_->Text = "";
 }
 
-
 void RingClientUWP::Views::Wizard::_ArchivePassword__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
 {
     if (_PINTextBox_->Text->IsEmpty() || _ArchivePassword_->Password->IsEmpty())
@@ -325,7 +320,6 @@ void RingClientUWP::Views::Wizard::_ArchivePassword__KeyUp(Platform::Object^ sen
         _addAccountYes_->IsEnabled = true;
 }
 
-
 void RingClientUWP::Views::Wizard::_PINTextBox__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
 {
     if (_PINTextBox_->Text->IsEmpty() || _ArchivePassword_->Password->IsEmpty())
@@ -333,3 +327,9 @@ void RingClientUWP::Views::Wizard::_PINTextBox__KeyUp(Platform::Object^ sender,
     else
         _addAccountYes_->IsEnabled = true;
 }
+
+void
+Wizard::_createAccountNo__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+
+}
diff --git a/Wizard.xaml.h b/Wizard.xaml.h
index 7e8ebedf8bccbd015d39dcdbaaae90b9c3f89348..71c4761f7671146577639c5ad628375e08a8dfe7 100644
--- a/Wizard.xaml.h
+++ b/Wizard.xaml.h
@@ -1,3 +1,22 @@
+/**************************************************************************
+* Copyright (C) 2016 by Savoir-faire Linux                                *
+* Author: J�ger Nicolas <nicolas.jager@savoirfairelinux.com>              *
+* Author: Traczyk Andreas <andreas.traczyk@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 "Wizard.g.h"
@@ -25,9 +44,7 @@ private:
     void _RegisterState__Toggled(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _fullnameTextBox__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
     void collapseMenus(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
-    void _step1button__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
-    void _step2button__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
-    void OnregisteredNameFound(LookupStatus status, const std::string& address, const std::string& name);
+    void OnregisteredNameFound(LookupStatus status,  const std::string& accountId, const std::string& address, const std::string& name);
     void _password__PasswordChanged(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _passwordCheck__PasswordChanged(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void checkState();
@@ -42,6 +59,7 @@ private:
     void _PINTextBox__GotFocus(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _ArchivePassword__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
     void _PINTextBox__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
+    void _createAccountNo__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
 };
 
 }
diff --git a/_language-fr.appx b/_language-fr.appx
index 51bf9e26b8f25bb43d7a7124c7fb5a83661df0cf..4b9c411cadd65e65de2bf0f43a7299b4abeca66f 100644
Binary files a/_language-fr.appx and b/_language-fr.appx differ
diff --git a/_scale-100.appx b/_scale-100.appx
index cba6a7476ff3db03c797713c7ccb125cb18aa794..a1b6872643a84b471783f1e0a8083164f9f8a3f8 100644
Binary files a/_scale-100.appx and b/_scale-100.appx differ
diff --git a/_scale-125.appx b/_scale-125.appx
index 6d6ece8d6416fbfc5965c62c9718bdc4b0b5df56..dae8a5197feb1e5c6f03a38333d42a4a9fd23ad6 100644
Binary files a/_scale-125.appx and b/_scale-125.appx differ
diff --git a/_scale-150.appx b/_scale-150.appx
index 09b8ffe25c8097d08c7be5a57bdcaef446b705df..eafedef0938a69e8dd66543bfc54b7d04518800c 100644
Binary files a/_scale-150.appx and b/_scale-150.appx differ
diff --git a/_scale-400.appx b/_scale-400.appx
index 698e354d015f8f98033b918534b6e2417564952d..1763977eae3165e5e4d0cacb53ff092facc95b6f 100644
Binary files a/_scale-400.appx and b/_scale-400.appx differ
diff --git a/localization/Fr-fr/Resources.resw b/localization/Fr-fr/Resources.resw
deleted file mode 100644
index 0ae0ea1a91b62b75c5e3472fdea4691aee1fd11f..0000000000000000000000000000000000000000
--- a/localization/Fr-fr/Resources.resw
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="_welcomeMsg.Text" xml:space="preserve">
-    <value>Salut!</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/localization/US-en/Resources.resw b/localization/US-en/Resources.resw
deleted file mode 100644
index 7a8dd42d702cbf5c7632b45028c6b71e303d73d8..0000000000000000000000000000000000000000
--- a/localization/US-en/Resources.resw
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="_welcomeMsg.Text" xml:space="preserve">
-    <value>Hi!</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/localization/ar/Resources.resw b/localization/ar/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..9525fba7967aa73797e6e814bf53305c2e0c8c9a
--- /dev/null
+++ b/localization/ar/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>عن RING</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>الأطراف المصممة</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>مشاركة</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>حسابات</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>الاتصالات</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>سجل</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>إعدادات</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>جهاز</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>نسق</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>دقة العرض (resolution)</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>فيديو</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>عن RING</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>الاسم المستعار</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>أحدث حساب</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>ألغِ</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>حسابات</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>أضف حساب</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>الاتصالات</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>منجز</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>إبعث رسالة</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>إعدادات</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>أضف إلى الاتصالات المعروفة</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>مكالمة</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>مصمم العمل الفني:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>أحدثه:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/bg/Resources.resw b/localization/bg/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..240e02f205da5267141f046d1eed48afb74b188d
--- /dev/null
+++ b/localization/bg/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Относно</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Затваряне</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Заслуги</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>Вижте</value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>Общия публичен лиценз на ГНУ, версия 3 или по-нова</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>за подробности.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring е сигурен и разпределен софтуер за общуване.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>Клиентът на Ring за „Microsoft Windows Runtime“.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Въведете псевдоним</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Редактиране на акаунта</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Добавяне на устройство</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Въведете ПИН</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Авт. отговор</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Устройства</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Научете повече</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Въведете паролата си</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Регистриране на публично потребителско име</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Споделяне</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Акаунти</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Тип на акаунта</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Контакти</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Научете повече</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Регистриране</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Повторете паролата</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Въведете парола</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Настройки</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Устройство</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Скорост</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Разделителна способност</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Видео</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Въведете име на сървър</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Въведете парола</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Въведете потребителско име</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Въведете потребителското си име</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>изчакване на списъка с устройства…</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Относно</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Декларация за поверителност</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Акаунтът Ви ще бъде изтрит от този компютър. На другите устройства няма да има промени. Публичната Ви регистрация не може да бъде изтрита по никакъв начин.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Акаунтът Ви ще бъде изтрит от този компютър.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>Хората могат да Ви намерят по потребителското Ви име</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>Вече имате регистрация.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>Все още нямате регистрация.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>Няма открит идентификатор на устройство!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>мрежова грешка!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Добавяне на съществуващ акаунт</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Създаване на нов акаунт</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Въведете пълното си име</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Парола за акаунта в Ring</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Стъпка 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Стъпка 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Псевдоним</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Създаване на акаунт</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Отказ</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Акаунти</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Добавяне на акаунт</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Контакти</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Устройства</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Готово</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Свържи това устройство със съществуващ акаунт</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Изпращане на съобщение</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Настройки</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Добавяне към контактите</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Добавяне на устройство</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Затваряне</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Обаждане</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Добавяне на съществуващ акаунт</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Създаване на нов акаунт</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>С изображения от:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Създаден от:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/ca/Resources.resw b/localization/ca/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..62c98fd1130478a6a56a0425bb07a087cd12cada
--- /dev/null
+++ b/localization/ca/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Comptes</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contactes</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Opcions</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Vídeo</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Àlies</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Comptes</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contactes</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Fet</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Enviar el missatge</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Opcions</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Afegir als contactes</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Trucada</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/cs-CZ/Resources.resw b/localization/cs-CZ/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..c7609a57b92b46f9915c19d9b1a3e510999b0c61
--- /dev/null
+++ b/localization/cs-CZ/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>O aplikaci</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Zavřít</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Zásluhy</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>Tento program je poskytován bez jakékoli záruky</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>Podívejte se na</value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, verze 3 nebo pozdější</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>na podrobnosti.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring je zabezpečený a distribuovaný komunikační program.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>Klient prostředí Microsoft Windows pro Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Zadat přezdívku</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Upravit účet</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Přidat zařízení</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Zadejte PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>Pro připojení tohoto zařízení k účtu Ringu nejprve musíte vytvořit PIN z Ringu na zařízení hostujícím účet.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Automatická odpověď</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Zařízení</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Naučit se více</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Zadejte své heslo</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Přijímat hovory a zprávy od osob nevystupujících pod vlastním jménem</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>Tvůrce PIN</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Zaregistrovat veřejné uživatelské jméno</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Sdílet</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>Prametry účtu SIP</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Účty</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Typ účtu</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Účet se exportuje na Ring…</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>hledá</value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Poslána žádost o kontakt</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Žádosti o kontakt</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontakty</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Naučit se více</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Začátek času</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Zaregistrovat</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Zopakujte heslo</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Zadejte heslo</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Nastavení</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Zařízení</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rychlost</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Rozlišení</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Zadejte hostitelské jméno</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Zadejte heslo</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Zadejte uživatelské jméno</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Zadejte své uživatelské jméno</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>čeká se na seznam zařízení...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>O aplikaci</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring je svobodný software určený k univerzální komunikaci, který respektuje svobody a práva uživatelů.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Postoj k soukromí</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Váš účet bude smazán z tohoto počítače. Jiná zařízení nejsou tímto krokem ovlivněna. Vaši veřejnou registraci nelze smazat nikdy.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Váš účet bude smazán z tohoto počítače.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>Lidé vás mohou najít pomocí vašeho uživatelského jména</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>Již jste zaregistrován.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>Ještě nejste zaregistrován.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>Musíte poslat své ID Ringu.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Chyba v přihlašovacích údajích nebo vypršel PIN.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>Nenalezeno ID zařízení!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>chyba sítě!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Přidat stávající účet</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Vytvořit nový účet</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Zadejte své celé jméno</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Heslo k účtu Ring</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Krok 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Krok 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Přezdívka</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Zrušit</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Účty</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Přidat účet</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontakty</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Vytvořit účet</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Žádosti o kontakt</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Zařízení</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Hotovo</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Propojit zařízení s již existujícím účtem</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Odeslat zprávu</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Nastavení</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Přidat do kontaktů</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Přidat zařízení</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Zavřít</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Volat</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Přidat stávající účet</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Vytvořit nový účet</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Grafika:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Vytvořili:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/da-DK/Resources.resw b/localization/da-DK/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..ff08809e9449c5032394d0dc6636cd0172d53fba
--- /dev/null
+++ b/localization/da-DK/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Om</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Luk</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Krediteringer</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>Dette program leveres uden nogen form for garanti</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>Se</value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 eller nyere</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>detaljer.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring er et sikret og distribueret kommunikationsprogram.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>Microsoft Windows Runtime klienten til Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Indtast alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Rediger konto</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Tilføj enhed</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Indtast PIN-kode</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>For at kunne tilknytte denne enhed til en Ring konto, skal du først generere en PIN fra Ring på en enhed som allerede er tilknyttet denne konto.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Besvar automatisk</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Enheder</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Find ud af mere</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Indtast dit kodeord</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accepter opkald og beskeder fra kontakter der er inkognito</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Registrer offentligt brugernavn</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Del</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP konto parametre</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Konti</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Kontotype</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Eksporterer kontoen til Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>leder efter</value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Kontaktforespørgsel afsendt</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Kontaktanmodninger</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontakter</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Find ud af mere</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Tidernes morgen</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registrér</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Gentag kodeord</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Indtast kodeord</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Indstillinger</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Enhed</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Takst</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Opløsning</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Indtast hostnavn</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Indtast kodeord</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Indtast brugernavn</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Indtast dit brugernavn</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>venter på enhedsliste...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Om</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring er fri software til universel kommunikation som respekterer sine brugeres frihed og privatliv.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privatlivspolitik</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Din konto vil blive slettet fra denne computer. Dette har ingen effekt på andre enheder. Din offentlige registrering kan aldrig blive slettet.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Din konto vil blive slettet fra denne computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>Andre personer kan finde dig gennem dit brugernavn</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>Du er allerede registreret.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>Du er endnu ikke registreret.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>Du bliver nødt til at sende dit ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Fejl med legitimationsoplysninger eller udløbet PIN.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>Intet endheds-id fundet!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>netværksfejl!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Tilføj eksisterende konto</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Opret ny konto</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Indtast dit fulde navn</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring-konto kodeord</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Skridt 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Skridt 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Opret konto</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Annuller</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Konti</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Tilføj konto</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontakter</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Opret konto</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Kontaktanmodninger</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Enheder</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Færdig</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Tilnyt denne enhed til en eksisterende konto</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Send besked</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Indstillinger</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Tilføj til kontakt</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Tilføj enhed</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Luk</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Ring op</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Tilføj eksisterende konto</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Opret ny konto</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Grafik af:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Skabt af:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/de-DE/Resources.resw b/localization/de-DE/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..12f34109f2b54a73a492a416efd5b5036deb0295
--- /dev/null
+++ b/localization/de-DE/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Über</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Abspann</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Freigeben</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Kontos</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontakte</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registrieren</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Einstellungen</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Gerät</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Über</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Konto anlegen</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Abbrechen</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Kontos</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Konto hinzufügen</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontakte</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Konto erstellen</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Nachricht senden</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Einstellungen</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Kontakte hinzufügen</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Anrufen</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/de/Resources.resw b/localization/de/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..7ed6044b3e1ec7b3066e12fc1b7da5670e5d77de
--- /dev/null
+++ b/localization/de/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Über</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Schließen</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Würdigung</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>Dieses Programm kommt ohne jede Gewährleistung</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>Lesen Sie die</value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or aktueller</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.de.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>für Details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring ist sichere und dezentralisierte Software zur Kommunikation.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>Die Microsoft Windows Anwendung für Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Aliasnamen eingeben</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Konto bearbeiten</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Gerät hinzufügen</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>PIN eingeben</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>Um diese Gerät mit einem Ring-Konto zu verknüpfen, musst du dir erst auf dem Gerät, auf dem das Konto angemeldet ist, eine PIN generieren lassen.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Automatisch antworten</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Geräte</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Mehr erfahren</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Geben Sie Ihr Passwort ein</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Anrufe und Nachrichten von unerkannten Kontakten erlauben</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN Generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Öffentlichen Benutzernamen registrieren</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Teilen</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP Kontoeinstellungen</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Konten</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Kontotyp</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Das Konto wird zu Ring exportiert...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>suche nach</value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Kontaktanfrage gesendet</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Kontaktanfragen</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontakte</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Mehr erfahren</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Anfang der Zeit</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registrieren</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Passwort wiederholen</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Passwort eingeben</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Einstellungen</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Gerät</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Auflösung</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Servername eingeben</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Passwort eingeben</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Benutzername eingeben</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Geben Sie ihren Benutzernamen ein</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>Warten auf die Geräteliste…</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Über</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring ist eine Freie Software für universelle Kommunikation und respektiert die Freiheiten und Privatsphäre der Benutzer.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Datenschutz-Bestimmungen</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Dein Konto wird von diesem Computer gelöscht werden. Andere Geräte bleiben unverändert. Deine Öffentliche Registrierung kann nicht gelöscht werden.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Dein Konto wird von diesem Computer gelöscht werden.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>Unter diesem Namen können dich andere Leute finden</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>Du bist bereits registriert.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>Du bist noch nicht registriert.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>Du musst deine Ring-ID senden.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Fehler mit den Anmeldeinformationen oder abgelaufene PIN.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>Keine Gerätekennung gefunden!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>Netzwerkfehler</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Vorhandenes Konto hinzufügen</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Neues Konto erstellen</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Geben Sie Ihren vollständigen Namen ein</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring-Kontopasswort</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Schritt 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Schritt 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Konto erstellen</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Abbrechen</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Konten</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Konto hinzufügen</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontakte</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Konto erstellen</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Kontaktanfragen</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Geräte</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Erledigt</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Dieses Gerät mit einem vorhandenen Konto verknüpfen</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Nachricht senden</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Einstellungen</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Zu Kontakten hinzufügen</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Gerät hinzufügen</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Schließen</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Anruf</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Vorhandenes Konto hinzufügen</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Neues Konto erstellen</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Visuelle Gestaltung:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Erstellt von:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/el/Resources.resw b/localization/el/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..3224f63d8ed4cd2746194acecdc8adff2bba3f01
--- /dev/null
+++ b/localization/el/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Περί</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Μονάδες</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Συσκευές</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Λογαριασμοί</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Εξαγωγή λογαριασμού στο Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Επαφές</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Εγγραφή</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Ρυθμίσεις</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Συσκευή</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Βίντεο</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Περί</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Το Ring είναι ελεύθερο λογισμικό για παγκόσμια επικοινωνία που σέβεται τις ελευθερίες και την ιδιωτικότητα των χρηστών του.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Ψευδώνυμο</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Ακύρωση</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Λογαριασμοί</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Προσθήκη λογαριασμού</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Επαφές</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Συσκευές</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Σύνδεση αυτής της συσκευής σε έναν λογαριασμό που ήδη υπάρχει</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Στείλε μήνυμα</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Ρυθμίσεις</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Προσθήκη στις επαφές</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Κλήση</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/en-GB/Resources.resw b/localization/en-GB/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..7ef237ab01cd0c8f388ae42a9e68763b72e8000f
--- /dev/null
+++ b/localization/en-GB/Resources.resw
@@ -0,0 +1,522 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Release: Beta 2 - Gaston Miron</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you'll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact.</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent.</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Settings</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You'll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id.</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added.</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added.</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid.</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found.</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user's contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Send message</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Settings</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Add to contacts</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Call</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/localization/en-US/Resources.resw b/localization/en-US/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..189aec3472e4bd632a6babd708c1250e0cf10dd6
--- /dev/null
+++ b/localization/en-US/Resources.resw
@@ -0,0 +1,561 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you'll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Settings</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is a free and universal communication platform which preserves the users' privacy and freedoms.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You'll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user's contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Send message</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Settings</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Add to contacts</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Call</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_welcome_.Text" xml:space="preserve">
+    <value>Welcome to</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/localization/en/Resources.resw b/localization/en/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..a566a1bf5b2e8ca2135407e2f228c1b50d73e6bf
--- /dev/null
+++ b/localization/en/Resources.resw
@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Release: Beta 2 - Gaston Miron</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you'll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact.</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent.</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Settings</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You'll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id.</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added.</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added.</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid.</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found.</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/localization/eo/Resources.resw b/localization/eo/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..2d23329914fe2699ab0335adf33d2064c974a355
--- /dev/null
+++ b/localization/eo/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Pri</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Kredito</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Aparatoj</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Kunhavi</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Kontoj</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Elportanta konton sur Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontaktoj</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registri</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Agordoj</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Aparato</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Datumrapido</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Distingivo</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Pri</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring estas libera programo por universala komunikado, kiu respektas liberon kaj privatecon de siaj uzantoj.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Kaŝnomo</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Krei Konton</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Rezigni</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Kontoj</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Aldoni konton</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontaktoj</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Aparatoj</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Finita</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Ligi ĉi tiun aparaton al ekzistanta konto</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Sendi mesaĝon</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Agordoj</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Aldoni al kontaktoj</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Voko</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Grafiko de:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Kreita de:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/es/Resources.resw b/localization/es/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..3226c1b53843608a1420088c2d8ddf04b119efb1
--- /dev/null
+++ b/localization/es/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Acerca de</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Cerrar</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Créditos</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>Este programa viene con absolutamente ninguna garantía</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>Ver</value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>Licencia Pública General GNU, versión 3 o posterior</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>para detalles.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring es un programa de comunicación seguro y distribuido.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>El cliente de Microsoft Windows Runtime para Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Introducir alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Editar cuenta</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Agregar dispositivo</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Ingresa tu PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>Para asociar este dispositivo a una cuenta Ring primero debes generar un PIN desde un dispositivo previamente dado de alta en la cuenta</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Respuesta automática</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Dispositivos</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Más información</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Ingresa tu contraseña</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Aceptar llamadas y mensajes de los contactos anónimos</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>Generador de PIN</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Registrar nombre de usuario público</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Compartir</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>Parámetros de la cuenta SIP</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Cuentas</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Tipo de cuenta</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exportando cuenta en Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>buscando</value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Solicitud de contacto enviada</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Solicitudes de contacto</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contactos</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Más información</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Principio de los tiempos</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registrar</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repite la contraseña</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Ingresa la contraseña</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Configuración</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Dispositivo</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Tasa</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolución</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Vídeo</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Nombre del equipo</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Ingresa la contraseña</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Introducir nombre de usuario</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Introduzca su nombre de usuario</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>esperando la lista de dispositivos...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Acerca de</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring es software libre de comunicaciones que respeta las libertades y privacidad de sus usuarios.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Política de privacidad</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Se borrará la cuenta de este equipo. Esto no afecta a otros dispositivos. El registro público del usuario no se puede eliminar.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Se borrará la cuenta en este equipo.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>La gente puede encontrarte mediante tu nombre de usuario</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>Ya estabas registrado previamente</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>Aún no estás registrado.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>Tendrás que enviar tu RingId</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Error de credenciales o PIN caducado</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>¡No se encuentra el identificador del dispositivo!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>¡Error en la red!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Agregar cuenta existente</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Crear nueva cuenta</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Introduce tu nombre completo</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Contraseña de la cuenta Ring</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Paso 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Paso 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Crear Cuenta</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Cancelar</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Cuentas</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Agregar cuenta</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contactos</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Crear cuenta</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Solicitudes de contacto</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Dispositivos</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Hecho</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Vincular este dispositivo con una cuenta existente</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Enviar mensaje</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Configuración</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Añadir a contactos</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Agregar dispositivo</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Cerrar</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Llamar</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Agregar cuenta existente</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Crear nueva cuenta</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Diseñado por:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Creado por:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/et-EE/Resources.resw b/localization/et-EE/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..1e7a157bba123809ea6971300c5759076b4c42d1
--- /dev/null
+++ b/localization/et-EE/Resources.resw
@@ -0,0 +1,336 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Release: Beta 2 - Gaston Miron</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact.</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent.</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Settings</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id.</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added.</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added.</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid.</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found.</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+</root>
diff --git a/localization/fa-IR/Resources.resw b/localization/fa-IR/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..aa587a21d8eea7d97564d9f94b77c9e5a2d176e9
--- /dev/null
+++ b/localization/fa-IR/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>درباره</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>بستن</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>دست‌اندرکاران</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>این برنامه بدون هیچ ضمانتی عرضه شده.</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>دیدن</value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>جوازنامه عمومی گنو نسخه ۳ و ۳ به بعد</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>جزئیات</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring نرم‌افزار امن و توزیع شده ارتباطی است.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>ویرایش حساب‌کاربری</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>اضافه‌کردن دستگاه</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>پین را وارد کنید</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>پاسخ خودکار</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>افزاره‌ها</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>اطلاعات بیشتر</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>گذرواژه‌تان را وارد کنید</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>قبول پیام و تماس از طرف مخاطب ناشناس</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>رمز ساز</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>ثبت نام‌کاربری عمومی</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>هم‌رسانی</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>مشخصات حساب SIP</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>حساب‌ها</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>نوع حساب</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>درخواست تماس ارسال شد</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>مخاطبان</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>اطلاعات بیشتر</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>ثبت‌نام</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>گذرواژه را وارد کنید</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>تنظیمات</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>دستگاه</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>رتبه</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>ویدیو</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>گذرواژه را وارد کنید</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>درباره</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>رینگ یک نرم‌افزار ارتباطات عمومی است که به آزادی‌ها و حریم شخصی کاربرانش احترام می‌گذارد.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>نام کامل خود را وارد کنید</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>نام مستعار</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>لغو</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>حساب‌ها</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>افزودن حساب</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>مخاطبان</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>ایجاد حساب</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>افزاره‌ها</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>ارسال پیام</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>تنظیمات</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>افزودن به مخاطبان</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>اضافه‌کردن دستگاه</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>بستن</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>برقراری تماس</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>ساخته‌شده توسط:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/fi/Resources.resw b/localization/fi/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..0876d539f124566bcbe43fd8c5d2e86cf91cf5db
--- /dev/null
+++ b/localization/fi/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Tietoa</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Jako</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Tunnukset</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Yhteystiedot</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Rekistöröi</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Asetukset</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Laite</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Arvostele</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Tarkkuus</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Tietoa</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Lempinimi</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Peru</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Tunnukset</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Lisää tunnus</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Yhteystiedot</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Valmis</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Lähetä viesti</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Asetukset</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Lisää yhteystietoihin</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Soita</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Grafiikka:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Luonut:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/fr-CA/Resources.resw b/localization/fr-CA/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..7ccf941edaf5cce6d53bd9f423641090c1790fcd
--- /dev/null
+++ b/localization/fr-CA/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>À propos</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Crédits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Entrer le NIP</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Appareils</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Comptes</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Inscription</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Entrer le mot de passe</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Réglages</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Appareil</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Résolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Vidéo</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Entrer le mot de passe</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>À propos</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Annuler</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Comptes</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Créer un compte</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Appareils</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Envoyer le message</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Réglages</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Ajouter aux contacts</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Appeler</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Créé par:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/fr-FR/Resources.resw b/localization/fr-FR/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..aba6c77e8276829c1a702db1bdf3018c00171129
--- /dev/null
+++ b/localization/fr-FR/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Réglages</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Vidéo</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Annuler</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Envoyer un message</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Réglages</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Ajouter dans les contacts</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Appel</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/fr/Resources.resw b/localization/fr/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..e4c7c471cd7afc06c085e320e3ec8aee6f9b058d
--- /dev/null
+++ b/localization/fr/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>À Propos</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Fermer</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Crédits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>Ce programme est proposé sans aucune garantie</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Entrez l&apos;alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Éditer le compte</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Ajouter un appareil</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Entrez votre code PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Décrocher automatiquement</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Appareils</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>En savoir plus</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Entrer votre mot de passe</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accepter les appels et messages de contacts inconnus</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Enregistrer un nom d&apos;utilisateur public</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Partager</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>Paramètres du compte SIP</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Comptes</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Type de compte</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Export du compte sur le Ring…</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>rechercher</value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Invitations</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>En savoir plus</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Enregistrer</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Confirmez le mot de passe</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Entrez le mot de passe</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Paramètres</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Appareil</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Débit</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Résolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Vidéo</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Entrez le nom d&apos;hôte</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Entrez le mot de passe</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Entrez le nom d&apos;utilisateur</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Entrez votre nom d&apos;utilisateur</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>À Propos</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring est un logiciel libre de communication universelle qui respecte les libertés et la vie privée de ses utilisateurs.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Votre compte va être supprimé de cet ordinateur</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>Les gens peuvent vous trouver avec votre nom d&apos;utilisateur</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>Vous êtes déjà enregistré</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>Vous n&apos;êtes pas encore enregistré</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Créer un nouveau compte</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Entrez votre nom complet</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Mot de passe du compte Ring</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Étape 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Étape 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Nom du compte</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Créer un compte</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Annuler</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Comptes</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Créer un nouveau compte</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Ajouter le compte</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Créer le compte</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Invitations</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Appareils</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Effectué</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Lier cet appareil à un compte existant</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Envoyer le message</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Paramètres</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Ajouter aux contacts</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Ajouter un appareil</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Fermer</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Appelez</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Créer un nouveau compte</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Graphismes par :</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Créé par :</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/he/Resources.resw b/localization/he/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..5de5f878bf943bab5f33507ebf043fb243f89f14
--- /dev/null
+++ b/localization/he/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>אודות</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>תודות</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>חשבונות</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>אנשי קשר</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>הירשם</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>הגדרות</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>מכשיר</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>רזולוציה</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>וידאו</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>אודות</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>כינוי</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>צור חשבון</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>ביטול</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>חשבונות</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>הוסף חשבון</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>אנשי קשר</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>סיים</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>שלח הודעה</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>הגדרות</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Add to contacts</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>קריאה</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/hi-IN/Resources.resw b/localization/hi-IN/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..cb31d176f3e5ca34bf97719daa8f81991dd202b5
--- /dev/null
+++ b/localization/hi-IN/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Settings</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>वीडियो</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>रिंग हर तरह के संवाद के लिये एक मुक्त/स्विधीन साॅफ्टवेयर है, जो अपने उपभोक्ताओं की स्वाधीनता व गोपनीयता का सम्मान करता है</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Send message</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Settings</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Add to contacts</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Call</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/hr/Resources.resw b/localization/hr/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..ea1de973980f6ca47b8587264b719a177a2ded61
--- /dev/null
+++ b/localization/hr/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>O programu</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Zasluge</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Podijeli</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Računi</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontakti</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registriraj</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Unesite lozinku</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Postavke</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Uređaj</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Prijenos</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Razlučivost</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Unesite lozinku</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>O programu</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Unesite vaše puno ime</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>napravi račun</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Poništi</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Računi</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Dodaj račun</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontakti</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Napravi račun</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Učinjeno</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Pošalji poruku</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Postavke</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Dodaj u kontakte</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Nazovi</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Napravio:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/hu/Resources.resw b/localization/hu/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..a60a4692dd784fb002c02eaaae1c5630f4692ad5
--- /dev/null
+++ b/localization/hu/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Névjegy</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Készítők</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Eszközök</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Fiókok</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Partnerkérelem elküldve</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Partnerek</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Regisztráció</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Beállítások</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Eszköz</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Felbontás</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Videó</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Névjegy</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring a szabad szoftver az univerzális kommunikációhoz, amely tiszteletben tartja a felhasználók szabadságát és magánéletét.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Álnév</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Mé_gse</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Fiókok</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Névjegyzék</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Fiók létrehozása</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Eszközök</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Kész</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Ezt az eszköz csatlakoztassa egy másik eszközön létrehozott RING-fiókhoz</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Üzenet küldése</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Beállítások</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Hozzáadás a partnerekhez</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Hívás</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Művészi elemek készítője:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Szerző:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/id/Resources.resw b/localization/id/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..cb0d3b24e7787e9bdc76938f654ce04da934be92
--- /dev/null
+++ b/localization/id/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontak</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Settings</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontak</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Kirim pesan</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Settings</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Tambah sebagai kontak</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Call</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/it-IT/Resources.resw b/localization/it-IT/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..f809af65f2a130851424cee9b3f02b5cee60c3c0
--- /dev/null
+++ b/localization/it-IT/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Info</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Chiudi</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Crediti</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>Questo programma viene fornito senza alcuna garanzia</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, versione 3 o successiva</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>per dettagli.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring è un software per comunicazioni sicure e distribuite.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>Il client Microsoft Windows Runtime per Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Inserisci un alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Modifica l&apos;account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Aggiungi dispositivo</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Inserisci il PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>Per collegare questo dispositivo ad un account Ring, devi prima generare un PIN su un dispositivo con quell&apos;account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Risposta automatica</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Dispositivi</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Scopri di più</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Inserisci la tua password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accetta chiamate e messaggi da contatti sconosciuti</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>generatore di condici PIN</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Registra nome utente pubblico</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Condividi</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>parametri dell&apos;account SIP</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Tipo di account</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Esportando l&apos;account su Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>in cerca di</value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Richiesta di contatto inviata</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Richieste di contatto.</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contatti</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Scopri di più</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Salva</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Ripeti la password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Inserire password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Opzioni</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Dispositivo</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Velocità</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Risoluzione</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Inserire il nome dell&apos;host</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Inserire password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Inserire il nome utente</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Inserisci il tuo nome utente</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>in attesa della lista dei dispositivi...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Info</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring è software libero per la comunicazione universale che rispetta le libertà e la privacy dei suoi utenti.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>Sei già registrato.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>Non sei ancora registrato.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>Devi inviare il tuo RingID</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Errore delle credenziali o PIN scaduto.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>Nessun ID del dispositivo trovato!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>errore di rete!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Aggiunti un account esistente</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Crea un nuovo account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Inserisci il tuo nome completo</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Password dell&apos;account Ring</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Passo 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Passo 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Annulla</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contatti</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Crea account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Richieste di contatto.</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Dispositivi</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Collega questo dispositivo ad un account esistente</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Invia messaggio</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Opzioni</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Aggiungi alla rubrica</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Aggiungi dispositivo</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Chiudi</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Chiamata</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Aggiunti un account esistente</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Crea un nuovo account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Tema di:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Creato da:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/it/Resources.resw b/localization/it/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..c5c3d2d73ccab69b0518c1d076b465ad6e4b70e9
--- /dev/null
+++ b/localization/it/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contatti</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Impostazioni</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Cancella</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Aggiungiere un account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contatti</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Invia messaggio</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Impostazioni</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Aggiungi contatti</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Chiama</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/ja/Resources.resw b/localization/ja/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..b2240bc85a622abdead9a2da88d23534eb8a9788
--- /dev/null
+++ b/localization/ja/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>閉じる</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>クレジット</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>PINを入力してください</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>端末</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>パスワードを入力してください</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>共有</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>アカウント</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>連絡先のリクエストを送信しました</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>連絡先</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>登録</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>パスワードを入力してください</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>設定</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>端末</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>レート</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>動画</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>パスワードを入力してください</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring は、ユーザーの自由とプライバシーを尊重する普遍的なコミュニケーションのためのフリーソフトウェアです。</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>別名</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>キャンセル</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>アカウント</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>連絡先</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>アカウント作成</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>端末</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>メッセージを送信</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>設定</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>連絡先に追加</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>閉じる</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>通話</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/lt/Resources.resw b/localization/lt/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..23562bef2ed04c76ed6b9389bf1ec83c6cf46428
--- /dev/null
+++ b/localization/lt/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Apie</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Užverti</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Padėkos</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>Ši programa teikiama be jokios garantijos</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>Žiūrėkite </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU Bendrąją Viešąją Licenciją, versiją 3 arba vėlesnę</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>, norėdami sužinoti daugiau.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring yra saugi ir paskirstytoji susisiekimo programinė įranga.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Taisyti paskyrą</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Pridėti įrenginį</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Įveskite PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Įrenginiai</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Sužinoti daugiau</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP paskyros parametrai</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Paskyros</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Paskyros tipas</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Eksportuojama paskyra Ring sistemoje...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>ieškoma </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Kontakto užklausa išsiųsta</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Kontakto užklausos</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontaktai</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Sužinoti daugiau</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registruoti</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Pakartokite slaptažodį</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Įveskite slaptažodį</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Nustatymai</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Įrenginys</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Raiška</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Vaizdas</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Įveskite kompiuterio vardą</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Įveskite slaptažodį</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Įveskite naudotojo vardą</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Įveskite savo naudotojo vardą</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>laukiama įrenginių sąrašo...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Apie</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring yra visuotiniam susisiekimui skirta laisva programinė įranga, kuri gerbia savo naudotojų laisves ir privatumą.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privatumo politika</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Jūsų paskyra bus ištrinta iš šio kompiuterio.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>Jums reikės išsiųsti savo ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>tinklo klaida!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Pridėti esamą paskyrą</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Sukurti naują paskyrą</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Įrašykite savo vardą</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring paskyros slaptažodis</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>1 žingsnis</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>2 žingsnis</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Slapyvardis</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Sukurti paskyrą</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Atsisakyti</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Paskyros</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Pridėti paskyrą</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontaktai</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Sukurti paskyrą</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Kontakto užklausos</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Įrenginiai</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Atlikta</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Susieti šį įrenginį su esama paskyra</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Siųsti žinutę</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Nustatymai</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Pridėti prie kontaktų</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Pridėti įrenginį</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Užverti</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Skambutis</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Pridėti esamą paskyrą</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Sukurti naują paskyrą</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Apipavidalino:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Sukūrė:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/ms/Resources.resw b/localization/ms/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..7894ed42e3c04110715e6bee67b1a2aef103d6a9
--- /dev/null
+++ b/localization/ms/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Tentang</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Kredit</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Masukkan PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Perangkat</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Masukkan kata laluan anda</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Akaun</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kenalan</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Daftar</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Masukkan kata laluan</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Tetapan</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Masukkan kata laluan</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Tentang</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Nama panggilan</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Batal</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Akaun</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kenalan</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Cipta akaun</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Perangkat</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Hantar pesan</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Tetapan</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Tambahkan sebagai kenalan</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Panggilan</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Kerja seni oleh:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Dicipta oleh:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/nb/Resources.resw b/localization/nb/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..1adbba76138c254a0162354a378ad702e96a8b2b
--- /dev/null
+++ b/localization/nb/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Kontoer</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontakter</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registrer</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Innstillinger</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Enhet</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Lag konto</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Avbryt</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Kontoer</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Legg til konto</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontakter</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Ferdig</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Send melding</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Innstillinger</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Legg til kontakter</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Ring</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/nl-NL/Resources.resw b/localization/nl-NL/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..9d5b6597e6f0dc7964c6fa3537a731731676ee3d
--- /dev/null
+++ b/localization/nl-NL/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registreren</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Instellingen</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Beeld</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Account Aanmaken</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Send message</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Instellingen</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Voeg toe aan contacten</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Bellen</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/nl/Resources.resw b/localization/nl/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..5b7047ffbfd837f9807070a313b455b6e029d2a7
--- /dev/null
+++ b/localization/nl/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Over</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Sluiten</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Met dank aan</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>Op dit programma zit geen enkele garantie</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>Zie de</value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, versie 3 of hoger</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>voor details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is software voor beveiligde en gedistribueerde communicatie.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>De Microsoft Windows Runtime-cliënt voor Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Voer een alias in</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Account wijzigen</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Apparaat toevoegen</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Voer pincode in</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>Om dit apparaat te koppelen aan een Ring-account moet je eerst een pincode genereren op een apparaat waarop je Ring-account staat.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Automatisch beantwoorden</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Apparaten</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Meer informatie</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Voer je wachtwoord in</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Aanvaard oproepen en berichten van anonieme contacten</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>Pincodegenerator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Registreer een publieke gebruikersnaam</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Delen</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP-accountparameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Accounttype</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Account wordt geëxporteerd naar de Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>zoekende naar</value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>heeft je toegevoegd als contactpersoon</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contactverzoek verzonden</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contactverzoeken</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contacten</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Meer informatie</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Begin der tijden</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registreren</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Herhaal wachtwoord</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Voer wachtwoord in</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Instellingen</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Apparaat</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolutie</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Voer hostnaam in</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Voer wachtwoord in</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Voer gebruikersnaam in</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Voer je gebruikersnaam in</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>wachten op apparatenlijst...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Over</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is vrije software voor universele communicatie, die de vrijheden en privacy van haar gebruikers eerbiedigt.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacybeleid</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Je account zal worden verwijderd van deze computer. Op andere apparaten heeft dit geen invloed. Je publieke registratie kan nooit worden verwijderd.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Je account wordt verwijderd van deze computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>Mensen kunnen je vinden met je gebruikersnaam</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>Je bent reeds geregistreerd.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>Je bent nog niet geregistreerd.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>Je zult je Ring-ID moeten sturen.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Fout in inloggegevens of pincode is verlopen.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>Geen apparaat-ID gevonden!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>je hebt al een contact met deze Ring-ID</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>netwerkfout!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>Ring-ID toegevoegd</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>gebruikersnaam gevonden en toegevoegd</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>ongeldige gebruikersnaam</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>gebruikersnaam niet gevonden</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Bestaande account toevoegen</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Nieuwe account aanmaken</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Voer je volledige naam in</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring-accountwachtwoord</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Stap 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Stap 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Account aanmaken</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account ingeschakeld</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Geblokkeerde contacten verbergen</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Geblokkeerde contacten weergeven</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>Geen verbinding beschikbaar</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accountwijzigingen aanvaarden</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Aanvaard de inkomende oproep</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Voeg deze gebruiker toe aan je contacten</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Annuleren</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Nieuwe account aanmaken</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Volgende stap</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Account toevoegen</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Deblokkeer en voeg deze gebruiker toe aan je contacten</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Voeg een nieuw apparaat toe aan deze account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start een audiogesprek</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Blokkeer deze gebruiker zodat deze geen contact meer met je kan opnemen</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(de gebruiker kan gedeblokkeerd worden in de Accountinstellingen)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Accountwijzigingen verwerpen</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Annuleer de uitgaande oproep</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Berichtvensteroriëntatie aanpassen</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Dit gesprek wissen</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contacten</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Account aanmaken</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contactverzoeken</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Apparaten</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Klaar</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open de Accountinstellingen</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Start/Over</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Negeer het contactverzoek van deze gebruiker</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Dit apparaat aan een bestaande account koppelen</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Pincodegeneratie annuleren</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Pincode voor account genereren</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Weiger de inkomende oproep</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Dit contact verwijderen</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Apparaat de toegang tot deze account ontzeggen</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Bericht versturen</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Instellingen</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>QR-code en Ring-ID weergeven</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start een videogesprek</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>TURN-server inschakelen</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Aan contacten toevoegen</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audiocodec:</value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Beelden per seconde:</value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resolutie:</value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Videocodec:</value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Apparaat toevoegen</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Zoeken naar nieuwe of bestaande contacten</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Zoeken naar nieuwe of bestaande contacten</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>Dit apparaat</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN-serveradres</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Account verwijderen</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Typ een bericht</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Sluiten</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Toevoegen aan groepsgesprek</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Oproep</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Ring-ID kopiëren</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Naam</value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Netwerk niet beschikbaar</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Andere gekoppelde apparaten</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Contact verwijderen</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Bestaande account toevoegen</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Nieuwe account aanmaken</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>nooit gebeld</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Illustraties door:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Geschreven door:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Dit apparaat wordt toegevoegd...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Account wordt aangemaakt...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Account wordt verwijderd...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Pincode wordt aangemaakt</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Apparaat met volgende ID wordt ingetrokken:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Account wordt bijgewerkt...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Contact verwijderen</value>
+  </data>
+</root>
diff --git a/localization/pa/Resources.resw b/localization/pa/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..7aaeb2456d10f5c1f976539cd1b2a7226e710ab9
--- /dev/null
+++ b/localization/pa/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>ਸੈਟਿੰਗ</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Accounts</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Send message</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>ਸੈਟਿੰਗ</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Add to contacts</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Call</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/pl/Resources.resw b/localization/pl/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..78d881c5f18fdcbe07be05a6ea340b607a0f2f84
--- /dev/null
+++ b/localization/pl/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>O programie</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Zamknij</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Podziękowania</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>Ten program nie daje absolutnie żadnej gwarancji.</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>Zobacz</value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, wersja 3 lub późniejsza</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>aby uzyskać szczegółowe informacje.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring jest zabezpieczonym i rozproszonym oprogramowaniem do komunikacji.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Wprowadź PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Podziel się</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Konta</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Wysłano zaproszenie</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontakty</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Zarejestruj</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Wprowadź hasło</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Ustawienia</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Urządzenie</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Szybkość</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Rozdzielczość</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Wideo</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Wprowadź hasło</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>O programie</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Wprowadź swoje imię i nazwisko</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Nazwa konta</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Stwórz konto</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Anuluj</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Konta</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Dodaj konto</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontakty</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Stwórz konto</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Gotowe</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Wyślij wiadomość</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Ustawienia</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Dodaj do kontaków</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Zamknij</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Dzwoń</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Obrazki przez:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Stworzone przez:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/pt-BR/Resources.resw b/localization/pt-BR/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..b76340e945279961b99c0b8afad7c9cc6786f171
--- /dev/null
+++ b/localization/pt-BR/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Sobre</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Fechar</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Créditos</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>Este programa vem com absolutamente sem nenhuma garantia</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>Veja a</value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>Licença GNU General Public, versão 3 ou superior</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.pt-br.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>para detalhes.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring é um software de comunicação seguro e distribuído.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>Cliente Ring para Microsoft Windows Runtime.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Entre com o apelido</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Editar Conta</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Adicionar Dispositivo</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Entre o PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>Para vincular este dispositivo a sua conta Ring, primeiramente você terá que gerar um PIN a partir do Ring em um dispositivo hospedando a conta.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto atender</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Dispositivos</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Aprenda mais</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Entre sua senha</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Aceitar chamadas e mensagens de contatos anônimos</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>Gerador de PIN</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Registrar nome de usuário público</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Compartilhar</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>Parâmetros de configuração da conta SIP</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Contas</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Tipo de conta</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exportando conta no Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>procurando por</value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Solicitação de contato enviada</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Solicitações de Contatos</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contatos</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Aprenda mais</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Início do Tempo</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registrar</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repita sua senha</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Entre a senha</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Configurações</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Dispositivo</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Taxa</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolução</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Vídeo</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Entre com o nome do servidor</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Entre a senha</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Entre o nome de usuário</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Entre seu nome de usuário</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>aguardando por lista de dispositivos...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Sobre</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring é um software livre para comunicação universal que respeita as liberdades e privacidade de seus usuários.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Política de Privacidade</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Sua conta será removida deste computador. Outros dispositivos não serão afetados. Seu registro público nunca poderá ser removido.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Sua conta será removida deste computador.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>As pessoas podem te encontrar pelo seu nome de usuário</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>Você já está registrado.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>Você ainda não está registrado.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>Você terá que enviar seu ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Erro de credenciais ou PIN expirado.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>Nenhum ID de dispositivo encontrado!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>erro de conectividade!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Adicionar Conta Existente</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Criar Nova Conta</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Insira seu nome completo</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Senha da conta Ring</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Passo 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Passo 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Apelido</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Criar Conta</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Cancelar</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Contas</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Adicionar conta</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contatos</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Criar conta</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Solicitações de Contatos</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Dispositivos</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Feito</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Associar este dispositivo à uma conta existente</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Enviar mensagem</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Configurações</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Adicionar aos contatos</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Adicionar Dispositivo</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Fechar</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Chamar</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Adicionar Conta Existente</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Criar Nova Conta</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork por:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Criado por:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/pt/Resources.resw b/localization/pt/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..e28ce4cfde75f50d39d408ffe0d2a98f08467117
--- /dev/null
+++ b/localization/pt/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Contas</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contatos</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Configurações</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Vídeo</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Apelido</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Contas</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contatos</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Concluido</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Enviar mensagem</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Configurações</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Adicionar aos contactos</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Chamada</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/ro/Resources.resw b/localization/ro/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..26675b0fea8ee967e172f7d57be35cca44c5b7f8
--- /dev/null
+++ b/localization/ro/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credite</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Conturi</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registrare</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Setari</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Device</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>About</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Conturi</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Contacts</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Trimite messajul</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Setari</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Adaugă la contacte</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Sună</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/ru-RU/Resources.resw b/localization/ru-RU/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..c9db5e8e7185def8699889bcef737863aa878605
--- /dev/null
+++ b/localization/ru-RU/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>О продукте</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Кредиты</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Поделится</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Учетные записи</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Контакты</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Зарегистрировать</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Настройки</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Устройство</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Разрешение</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Видео</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>О продукте</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Псевдоним</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Отмена</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Учетные записи</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Добавить аккаунт</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Контакты</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Ок</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Отправить сообщение</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Настройки</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Добавить контакт</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Вызов</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:10pt; color:#aeaeae;&quot;&gt;Это ваш RingID.&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:10pt; color:#aeaeae;&quot;&gt;Скопировать и поделиться с друзьями!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/ru/Resources.resw b/localization/ru/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..69e24a9364d09b199e7e117d754a5d48b29bd122
--- /dev/null
+++ b/localization/ru/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>О программе</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Закрыть</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Благодарности</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>Эта программа поставляется без каких-либо гарантий</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>См. </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>Стандартная общественная лицензия GNU (GPL), версия 3 или более поздняя</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.ru.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>для получения более подробной информации.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring — это безопасная и распределённая программа для общения.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>Клиент RIng для Microsoft Windows</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Введите псевдоним</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Изменить аккаунт</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Добавить устройство</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Введите PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>Чтобы привязать это устройство к аккаунту Ring, надо сперва сгенерировать PIN на устройстве, на котором размещён аккаунт.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Автоответ</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Устройства</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Узнать больше</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Введите ваш пароль</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Принимать звонки и сообщения от инкогнито пользователей</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>Генератор PIN</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Зарегистрировать публичное имя</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Поделиться</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>Настройки SIP аккаунта</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Аккаунты</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Тип учётной записи</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Экспорт аккаунта в сеть Ring…</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>поиск</value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Запрос на добавление в контакты отправлен</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Запросы на добавление в контакты</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Контакты</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Узнать больше</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Начало времени</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Регистрация</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Повторите пароль</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Введите пароль</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Настройки</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Устройство</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Тариф</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Разрешение</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Видео</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Введите имя сервера</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Введите пароль</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Введите имя пользователя</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Введите ваше имя пользователя</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>ожидание списка устройств…</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>О программе</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring — это свободная программа для всеобщей связи, уважающая свободы и конфиденциальность ее пользователей.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Политика конфиденциальности</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Ваш аккаунт будет удалён с этого компьютера. Это действие не затронет другие устройства. Ваш публичный аккаунт не может быть удалён.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Ваш аккаунт будет удалён с этого компьютера.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>Люди смогут найти вас по вашему имени пользователя</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>Вы уже зарегистрированы.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>Вы ещё не зарегистрированы.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>Нужно отправить свой Ring ID.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Неверные учётные данные или PIN просрочен</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>Не найден идентификатор устройства!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>ошибка сети!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Добавить существующий аккаунт</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Создать новый аккаунт</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Введите ваше полное имя</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Пароль аккаунта Ring</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Шаг 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Шаг 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Псевдоним</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Создать учётную запись</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Отмена</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Аккаунты</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Добавить учётную запись</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Контакты</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Создать аккаунт</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Запросы на добавление в контакты</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Устройства</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Готово</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Привязать это устройство к существующему аккаунту</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Отправить сообщение</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Настройки</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Добавить в контакты</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Добавить устройство</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Закрыть</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Звонок</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Добавить существующий аккаунт</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Создать новый аккаунт</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Дизайн:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Авторы проекта:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/sk-SK/Resources.resw b/localization/sk-SK/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..1ccaf12a59fb51b43832788ef114ab89ec2fae4b
--- /dev/null
+++ b/localization/sk-SK/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>O programe</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Zariadenia</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Účet</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontakty</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Nastavenie</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Zariadenie</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>O programe</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Zruš</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Účet</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontakty</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Zariadenia</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Vyšli správu</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Nastavenie</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Add to contacts</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Volaj</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/sq-AL/Resources.resw b/localization/sq-AL/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..02cf7d7dd4b026541731db4845f300f5470f5a46
--- /dev/null
+++ b/localization/sq-AL/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Mbi</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Kredite</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Jepni PIN-in</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Pajisje</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Jepni fjalëkalimin tuaj</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Llogari</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontakte</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Regjistrohuni</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Jepni fjalëkalimin</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Rregullime</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Pajisje</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Resolution</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Jepni fjalëkalimin</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Mbi</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring është software i lirë për komunikim universal që respekton privatësinë e përdoruesve të tij.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Jepni emrin tuaj të plotë</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Anuloje</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Llogari</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontakte</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Krijoni llogari</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Pajisje</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Dërgoje mesazhin</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Rregullime</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Shtoje te kontaktet</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Call</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Përkujdesja grafike:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Krijuar nga:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/sv/Resources.resw b/localization/sv/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..13e678407284e682621227e0c7817d8b9313e180
--- /dev/null
+++ b/localization/sv/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Om</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Stäng</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Tack till</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>För det här programmet lämnas inga som helst garantier</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>Se</value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public Licens, version 3 eller senare</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>för fler detaljer</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring är en säker och distribuerad kommunikationsmjukvara</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>Windows-klienten för för Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Ange alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Redigera konto</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Lägg till enhet</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Ange PIN-kod</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>För att länka en enhet till ett Ring-konto, måste du först generera en PIN-kod på en enhet som redan har ett aktivt konto.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Automatiskt svar</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Enheter</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Läs mer</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Ange ditt lösenord</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Acceptera samtal och meddelanden från inkognito kontakter</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN-generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Registrera offentligt användarnamn</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Dela</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP-kontoparametrar</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Konton</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Kontotyp</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporterar Ring-konto...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>söker efter</value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>har lagt till dig som kontakt</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Kontaktförfrågan skickad</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Kontaktförfrågningar</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kontakter</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Läs mer</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Tidens början</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Registrera</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Upprepa lösenordet</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Ange lösenord</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Inställningar</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Enhet</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Frekvens</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Upplösning</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Video</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Ange värdnamn</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Ange lösenord</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Ange användarnamn</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Ange ditt användarnamn</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>väntar på enhetslistan...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Om</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring är fri mjukvara för universell kommunikation, med respekt för användarens frihet och integritet.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Sekretesspolicy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Ditt konto kommer att tas bort från denna dator. Andra enheter påverkas inte. Din offentliga registrering kan aldrig tas bort.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Ditt konto kommer att tas bort från denna dator.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>Folk kan hitta dig med hjälp av ditt användarnamn</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>Du är redan registrerad</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>Du är ännu inte registrerad.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>Du måste skicka ditt Ring-ID.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Fel inloggningsuppgifter eller utgången PIN-kod.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>Inget enhets-ID hittades!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>du har redan en kontakt med detta Ring-ID</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>Nätverksfel!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>Ring-ID tillagt</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>användarnamnet hittat och tillagt</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>användarnamnet ogiltigt</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>användarnamnet hittades inte</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Lägg till befintligt konto</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Skapa nytt konto</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Ange ditt fullständiga namn</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring-kontolösenord</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Steg 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Steg 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Alias</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Skapa konto</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Kontot aktiverat</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Dölj bannlysta kontakter</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Visa bannlysta kontakter</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>Ingen anslutning tillgänglig</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Acceptera kontoändringar</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Acceptera det inkommande samtalet</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Lägg till den här användaren till dina kontakter</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Avbryt</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Konton</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Skapa ett nytt konto</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Nästa steg</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Lägg till konto</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Avblockera och lägg till denna användare till dina kontakter</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Lägg till en ny enhet till detta konto</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Starta ett röstsamtal</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Blockera denna användare från vidare kontakt</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kontakter</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Skapa konto</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Kontaktförfrågningar</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Enheter</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Klar</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Koppla den här enheten till ett befintligt konto</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Skicka meddelande</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Inställningar</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Lägg till i kontakter</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Lägg till enhet</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Stäng</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Samtal</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Lägg till befintligt konto</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Skapa nytt konto</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Bildkonst av:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Skapad av:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/tr/Resources.resw b/localization/tr/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..b903ee6c5b98b8ccd7e6aa455fad2df08557c83c
--- /dev/null
+++ b/localization/tr/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Hakkında</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Kapat</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Krediler</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>Bakınız</value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU Genel Kamu Lisansı 3. sürüm veya üstü</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>ayrıntılar için.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Takma ad gir</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Hesabı Düzenle</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Aygıt Ekle</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>PIN&apos;i gir</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Kendiliğinden Yanıtla</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Aygıtlar</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Daha çok  öğren</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Parolanızı girin</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN üreteci</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Halka açık kullanıcı adı kaydet</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Paylaş</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP hesabı değişkenleri</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Hesaplar</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Hesap türü</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Ring&apos;de hesap dışa aktarılıyor...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>arıyor</value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>İletişim istekleri</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Kişiler</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Daha çok  öğren</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Kaydol</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Parola tekrar</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Parolayı gir</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Ayarlar</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Aygıt</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Oran</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Çözünürlük</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Görüntü</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Makine adını girin</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Parolayı gir</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Kullanıcı adını girin</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Kullanıcı adınızı girin</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>aygıt listesi için bekleyin...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Hakkında</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring; kullanıcılarının özgürlüklerine ve gizliliğine önem veren, evrensel iletişim için özgür yazılımdır.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Gizlilik Politikası</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Hesabınız bu bilgisayardan silinmiş olacak.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>İnsanlar kullanıcı adınız ile sizi bulabilir</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>Zaten kayıtlısınız.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>Henüz kayıtlı değilsiniz.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>Ağ hatası!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Var Olan Hesabı Ekle</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Yeni Hesap Oluştur</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Tam adınızı girin</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring hesabı parolası</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>1. Adım</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>2. Adım</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Takma ad</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Hesap Oluştur</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>İptal</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Hesaplar</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Hesap ekle</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Kişiler</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Hesap oluştur</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>İletişim istekleri</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Aygıtlar</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Tamam</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Bu aygıtı var olan bir hesaba bağla</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>İleti gönder</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Ayarlar</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Kişilere ekle</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Aygıt Ekle</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Kapat</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Ara</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Var Olan Hesabı Ekle</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Yeni Hesap Oluştur</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Çizenler:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Oluşturanlar:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/uk/Resources.resw b/localization/uk/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..eba523975c53e885b856a9eed348e543185d1d7a
--- /dev/null
+++ b/localization/uk/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>Про программу</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Подяки</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Поділитися</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>Аккаунти</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Тип аккаунта</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>Контакти</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Зареєструватися</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>Налаштування</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>Пристрій</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Очінка</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>Роздільна здатність</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>Відео</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>Про программу</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>Додаткове ім’я</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Створити Аккаунт</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>Відміна</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>Аккаунти</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Додати аккаунт</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>Контакти</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Готово</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Відправити повідомлення</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>Налаштування</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>Додати контакти</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Дзвінок</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Намальовано:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Стоворено:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/zh-CN/Resources.resw b/localization/zh-CN/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..fa9cc060026efe2c46d48313ba37d111ccd153d5
--- /dev/null
+++ b/localization/zh-CN/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>关于</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>关闭</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>致谢</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>本程序不担保任何责任</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>参阅</value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU通用公共许可证版本3或更新</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value>以获得详细信息。</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring是安全的、分布式的通讯软件。</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>Ring的Microsoft Windows Runtime客户端。</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>输入别名</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>编辑帐户</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>添加设备</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>输入PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>要将该设备与一个Ring帐户进行连接,首先您需要从该帐户的上一个设备生成一个PIN。</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>自动应答</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>设备</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>了解更多</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>输入您的密码</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>接收匿名联系人的通话与消息</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN生成器</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>注册公共用户名</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>共享</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP帐户配置</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>帐户</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>帐户类型</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Ring正在导出帐户…</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>查找</value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>联系人请求已发送</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>联系人请求</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>通讯录</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>了解更多</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>注册</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>确认密码</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>输入密码</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>设置</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>设备</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>码率</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>分辨率</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>视频</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>输入主机名</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>输入密码</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>输入用户名</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>输入您的用户名</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>正在等待设备列表…</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>关于</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring是自由软件,尊重用户的通讯自由与隐私。</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>隐私政策</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>您的帐户将从该计算机删除,其他设备不受影响。您注册的公共信息仍然保留。</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>您的帐户将从该计算机删除。</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>其他用户可通过用户名找到您</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>您已注册。</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>您尚未注册。</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>您必须发送您的RingID。</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>认证信息错误或PIN过期</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>设备ID未找到!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>网络错误!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>添加已有帐户</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>创建新帐户</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>输入您的全名</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring帐户密码</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>第1步</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>第2步</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>别名</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>取消</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>帐户</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>通讯录</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>创建帐户</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>联系人请求</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>设备</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>Done</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>将此设备与已有帐户进行连接</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>发消息</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>设置</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>加入通讯录</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>添加设备</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>关闭</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>通话</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>添加已有帐户</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>创建新帐户</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>界面设计:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>开发者:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/zh-TW/Resources.resw b/localization/zh-TW/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..98368bebc4633ec5c5b29808adcb0fa7f2a0c3ca
--- /dev/null
+++ b/localization/zh-TW/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>關於</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>裝置</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>輸入你的密碼</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>Share</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>帳號</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>聯絡人</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>註冊</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>輸入密碼</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>設定</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>裝置</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>Rate</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>解析度</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>視訊</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>輸入密碼</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>關於</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>別名</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>取消</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>帳號</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>加入帳號</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>聯絡人</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>建立帳號</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>裝置</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>完成</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>傳送訊息</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>設定</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>加到聯絡人</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>Call</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/localization/zh/Resources.resw b/localization/zh/Resources.resw
new file mode 100644
index 0000000000000000000000000000000000000000..b510bf903ce4f948e578ff2fa0214a5ac4574c18
--- /dev/null
+++ b/localization/zh/Resources.resw
@@ -0,0 +1,558 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string"/>
+              <xsd:attribute name="type" type="xsd:string"/>
+              <xsd:attribute name="mimetype" type="xsd:string"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string"/>
+              <xsd:attribute name="name" type="xsd:string"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
+              <xsd:attribute ref="xml:space"/>
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required"/>
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="_aboutBasicButton_.Content" xml:space="preserve">
+    <value>關於</value>
+  </data>
+  <data name="_aboutCloseButton_.Content" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_aboutCreditsButton_.Content" xml:space="preserve">
+    <value>Credits</value>
+  </data>
+  <data name="_aboutDisclaimer_.Text" xml:space="preserve">
+    <value>This program comes with absolutely no warranty</value>
+  </data>
+  <data name="_aboutGPL_0_.Text" xml:space="preserve">
+    <value>See the </value>
+  </data>
+  <data name="_aboutGPL_1_.Content" xml:space="preserve">
+    <value>GNU General Public License, version 3 or later</value>
+  </data>
+  <data name="_aboutGPL_1_.NavigateUri" xml:space="preserve">
+    <value>https://www.gnu.org/licenses/gpl-3.0.en.html</value>
+  </data>
+  <data name="_aboutGPL_2_.Text" xml:space="preserve">
+    <value> for details.</value>
+  </data>
+  <data name="_aboutReleaseDescription_.Text" xml:space="preserve">
+    <value>Ring is a secured and distributed communication software.</value>
+  </data>
+  <data name="_aboutReleasePlatform_.Text" xml:space="preserve">
+    <value>The Microsoft Windows Runtime client for Ring.</value>
+  </data>
+  <data name="_aboutReleaseTitle_.Text" xml:space="preserve">
+    <value>Liberté, Égalité, Fraternité! -  Version 1.0</value>
+  </data>
+  <data name="_accountAliasTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter alias</value>
+  </data>
+  <data name="_accountEditionTitle_.Text" xml:space="preserve">
+    <value>Edit Account</value>
+  </data>
+  <data name="_accountsAddDevice_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_accountsAddEnterPIN_.PlaceholderText" xml:space="preserve">
+    <value>Enter PIN</value>
+  </data>
+  <data name="_accountsAddStep1_.Text" xml:space="preserve">
+    <value>To link this device to a Ring account, you&apos;ll first need to generate a PIN from Ring on a device hosting the account.</value>
+  </data>
+  <data name="_accountsAutoAnswer_.Text" xml:space="preserve">
+    <value>Auto answer</value>
+  </data>
+  <data name="_accountsDevices_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_accountsEditionLearnMore_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_accountsEnterArchivePassword_.PlaceholderText" xml:space="preserve">
+    <value>Enter your password</value>
+  </data>
+  <data name="_accountsIncognitoContacts_.Text" xml:space="preserve">
+    <value>Accept calls and messages from incognito contacts</value>
+  </data>
+  <data name="_accountsPINGenerator_.Text" xml:space="preserve">
+    <value>PIN generator</value>
+  </data>
+  <data name="_accountsRegisterPublicName_.Text" xml:space="preserve">
+    <value>Register public username</value>
+  </data>
+  <data name="_accountsShare_.Text" xml:space="preserve">
+    <value>分享</value>
+  </data>
+  <data name="_accountsSIPParameters_.Text" xml:space="preserve">
+    <value>SIP account parameters</value>
+  </data>
+  <data name="_accountsTitle_.Text" xml:space="preserve">
+    <value>帳號</value>
+  </data>
+  <data name="_accountsType_.Text" xml:space="preserve">
+    <value>Account type</value>
+  </data>
+  <data name="_accountsUPnP_.Text" xml:space="preserve">
+    <value>UPnP</value>
+  </data>
+  <data name="_accountsWaitingAndResult_.Text" xml:space="preserve">
+    <value>Exporting account on the Ring...</value>
+  </data>
+  <data name="_callsLookingFor_" xml:space="preserve">
+    <value>looking for </value>
+  </data>
+  <data name="_contactRequestPending_.Text" xml:space="preserve">
+    <value>has added you as a contact</value>
+  </data>
+  <data name="_contactRequestSent_.Text" xml:space="preserve">
+    <value>Contact request sent</value>
+  </data>
+  <data name="_contactRequestsTitle_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_contactsTitle_.Text" xml:space="preserve">
+    <value>聯絡人</value>
+  </data>
+  <data name="_learnMoreDeleteAccountEditionUid_.Content" xml:space="preserve">
+    <value>Learn more</value>
+  </data>
+  <data name="_msgBeginningOfTime_.Text" xml:space="preserve">
+    <value>Beginning of Time</value>
+  </data>
+  <data name="_registerOnBlockchainEditionUid_.Content" xml:space="preserve">
+    <value>Register</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationCheckUid_.PlaceholderText" xml:space="preserve">
+    <value>Repeat password</value>
+  </data>
+  <data name="_ringPasswordBoxAccountCreationUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_settingsTitle_.Text" xml:space="preserve">
+    <value>設定</value>
+  </data>
+  <data name="_settingsVideoDevice_.Text" xml:space="preserve">
+    <value>裝置</value>
+  </data>
+  <data name="_settingsVideoRate_.Text" xml:space="preserve">
+    <value>比率</value>
+  </data>
+  <data name="_settingsVideoResolution_.Text" xml:space="preserve">
+    <value>解析度</value>
+  </data>
+  <data name="_settingsVideo_.Text" xml:space="preserve">
+    <value>影像</value>
+  </data>
+  <data name="_sipHostnameEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter hostname</value>
+  </data>
+  <data name="_sipPasswordEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter password</value>
+  </data>
+  <data name="_sipUsernameEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter username</value>
+  </data>
+  <data name="_usernameTextBoxEditionUid_.PlaceholderText" xml:space="preserve">
+    <value>Enter your username</value>
+  </data>
+  <data name="_waitingDevicesListUid_.Text" xml:space="preserve">
+    <value>waiting for devices list...</value>
+  </data>
+  <data name="_welcomeAboutButton_.Content" xml:space="preserve">
+    <value>關於</value>
+  </data>
+  <data name="_welcomeDescription_.Text" xml:space="preserve">
+    <value>Ring is free software for universal communication which respects the freedoms and privacy of its users.</value>
+  </data>
+  <data name="_welcomePrivacyLink_.Content" xml:space="preserve">
+    <value>Privacy Policy</value>
+  </data>
+  <data name="_whatWillHappendeleteRingAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer. Other devices are not affected. Your public registration can never be deleted.</value>
+  </data>
+  <data name="_whatWillHappendeleteSipAccountEditionUid_.Text" xml:space="preserve">
+    <value>Your account will be deleted from this computer.</value>
+  </data>
+  <data name="_whatWillHappenEditionUid_.Text" xml:space="preserve">
+    <value>People can find you with your username</value>
+  </data>
+  <data name="_whatWillHappen_0_" xml:space="preserve">
+    <value>You are already registered.</value>
+  </data>
+  <data name="_whatWillHappen_1_" xml:space="preserve">
+    <value>You are not yet registered.</value>
+  </data>
+  <data name="_whatWillHappen_2_" xml:space="preserve">
+    <value>You&apos;ll have to send your ringId.</value>
+  </data>
+  <data name="_accountsCredentialsExpired_" xml:space="preserve">
+    <value>Credentials error or PIN expired.</value>
+  </data>
+  <data name="_accountsNoDeviceId_" xml:space="preserve">
+    <value>No device id found!</value>
+  </data>
+  <data name="_contactsContactExists_" xml:space="preserve">
+    <value>you already have a contact with this ring id</value>
+  </data>
+  <data name="_contactsNetworkError_" xml:space="preserve">
+    <value>network error!</value>
+  </data>
+  <data name="_contactsRingIdAdded_" xml:space="preserve">
+    <value>ring id added</value>
+  </data>
+  <data name="_contactsUserAdded_" xml:space="preserve">
+    <value>username found and added</value>
+  </data>
+  <data name="_contactsUsernameInvalid_" xml:space="preserve">
+    <value>username invalid</value>
+  </data>
+  <data name="_contactsUsernameNotFound_" xml:space="preserve">
+    <value>username not found</value>
+  </data>
+  <data name="_wizardAddExistingAccount_.Content" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccount_.Content" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="_wizardFullName_.PlaceholderText" xml:space="preserve">
+    <value>Enter your full name</value>
+  </data>
+  <data name="_wizardRingAccountPassword_.Text" xml:space="preserve">
+    <value>Ring account password</value>
+  </data>
+  <data name="_wizardStep1_.Content" xml:space="preserve">
+    <value>Step 1</value>
+  </data>
+  <data name="_wizardStep2_.Content" xml:space="preserve">
+    <value>Step 2</value>
+  </data>
+  <data name="_accountsAlias_.Text" xml:space="preserve">
+    <value>別名</value>
+  </data>
+  <data name="_accountsCreation_.Text" xml:space="preserve">
+    <value>Create Account</value>
+  </data>
+  <data name="_accountsEnabled_.Text" xml:space="preserve">
+    <value>Account enabled</value>
+  </data>
+  <data name="_accountsHideBannedList_" xml:space="preserve">
+    <value>Hide banned contacts</value>
+  </data>
+  <data name="_accountsShowBannedList_" xml:space="preserve">
+    <value>Show banned contacts</value>
+  </data>
+  <data name="_accountNotRegistered_" xml:space="preserve">
+    <value>No connection available</value>
+  </data>
+  <data name="_tt_accept_account_mod_.Text" xml:space="preserve">
+    <value>Accept account modifications</value>
+  </data>
+  <data name="_tt_accept_call_.Text" xml:space="preserve">
+    <value>Accept the incoming call</value>
+  </data>
+  <data name="_tt_accept_cr_.Text" xml:space="preserve">
+    <value>Add this user to your contacts</value>
+  </data>
+  <data name="_tt_account_cancel_.Text" xml:space="preserve">
+    <value>取消</value>
+  </data>
+  <data name="_tt_account_list_menu_.Text" xml:space="preserve">
+    <value>帳號</value>
+  </data>
+  <data name="_tt_add_account_.Text" xml:space="preserve">
+    <value>Create a new account</value>
+  </data>
+  <data name="_tt_add_account_next_.Text" xml:space="preserve">
+    <value>Next step</value>
+  </data>
+  <data name="_tt_add_account_yes_.Text" xml:space="preserve">
+    <value>Add account</value>
+  </data>
+  <data name="_tt_add_banned_.Text" xml:space="preserve">
+    <value>Unblock and add this user to your contacts</value>
+  </data>
+  <data name="_tt_add_device_.Text" xml:space="preserve">
+    <value>Add a new device to this account</value>
+  </data>
+  <data name="_tt_audio_call_.Text" xml:space="preserve">
+    <value>Start an audio call</value>
+  </data>
+  <data name="_tt_block_cr_.Text" xml:space="preserve">
+    <value>Block this user from making any further contact</value>
+  </data>
+  <data name="_tt_block_cr_2.Text" xml:space="preserve">
+    <value>(the user can be unblocked from the Account Settings panel)</value>
+  </data>
+  <data name="_tt_cancel_account_mod_.Text" xml:space="preserve">
+    <value>Cancel account modifications</value>
+  </data>
+  <data name="_tt_cancel_call_.Text" xml:space="preserve">
+    <value>Cancel the outgoing call</value>
+  </data>
+  <data name="_tt_change_orientation_.Text" xml:space="preserve">
+    <value>Change message panel orientation</value>
+  </data>
+  <data name="_tt_clear_conversation_.Text" xml:space="preserve">
+    <value>Erase this conversation</value>
+  </data>
+  <data name="_tt_contact_list_menu_.Text" xml:space="preserve">
+    <value>聯絡人</value>
+  </data>
+  <data name="_tt_create_account_yes_.Text" xml:space="preserve">
+    <value>Create account</value>
+  </data>
+  <data name="_tt_cr_list_menu_.Text" xml:space="preserve">
+    <value>Contact Requests</value>
+  </data>
+  <data name="_tt_devices_list_menu_.Text" xml:space="preserve">
+    <value>Devices</value>
+  </data>
+  <data name="_tt_done_.Text" xml:space="preserve">
+    <value>完成</value>
+  </data>
+  <data name="_tt_edit_account_.Text" xml:space="preserve">
+    <value>Open the Account Settings panel</value>
+  </data>
+  <data name="_tt_home_menu_.Text" xml:space="preserve">
+    <value>Home/About</value>
+  </data>
+  <data name="_tt_ingnore_cr_.Text" xml:space="preserve">
+    <value>Ignore this user&apos;s contact request</value>
+  </data>
+  <data name="_tt_link_device_.Text" xml:space="preserve">
+    <value>Link this device to an existing account</value>
+  </data>
+  <data name="_tt_pin_gen_no_.Text" xml:space="preserve">
+    <value>Cancel PIN generation</value>
+  </data>
+  <data name="_tt_pin_gen_yes_.Text" xml:space="preserve">
+    <value>Generate account PIN</value>
+  </data>
+  <data name="_tt_reject_call_.Text" xml:space="preserve">
+    <value>Reject the incoming call</value>
+  </data>
+  <data name="_tt_remove_contact_.Text" xml:space="preserve">
+    <value>Remove this contact</value>
+  </data>
+  <data name="_tt_revoke_device_.Text" xml:space="preserve">
+    <value>Revoke the device from this account</value>
+  </data>
+  <data name="_tt_send_message_.Text" xml:space="preserve">
+    <value>Send message</value>
+  </data>
+  <data name="_tt_settings_menu_.Text" xml:space="preserve">
+    <value>設定</value>
+  </data>
+  <data name="_tt_share_menu_.Text" xml:space="preserve">
+    <value>Display QR code and RingID</value>
+  </data>
+  <data name="_tt_video_call_.Text" xml:space="preserve">
+    <value>Start a video call</value>
+  </data>
+  <data name="_accountsTurnEnabled_.Text" xml:space="preserve">
+    <value>Enable TURN server</value>
+  </data>
+  <data name="_tt_send_contactrequest_.Text" xml:space="preserve">
+    <value>加到聯絡人</value>
+  </data>
+  <data name="_si_audioCodec_.Text" xml:space="preserve">
+    <value>Audio codec: </value>
+  </data>
+  <data name="_si_fps_.Text" xml:space="preserve">
+    <value>Framerate: </value>
+  </data>
+  <data name="_si_resolution_.Text" xml:space="preserve">
+    <value>Resoulution: </value>
+  </data>
+  <data name="_si_videoCodec_.Text" xml:space="preserve">
+    <value>Video codec: </value>
+  </data>
+  <data name="_addDeviceMenuTitle_.Text" xml:space="preserve">
+    <value>Add Device</value>
+  </data>
+  <data name="_ringTxtBxPlaceholderText_" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_ringTxtBx_.PlaceholderText" xml:space="preserve">
+    <value>Search for new or existing contacts</value>
+  </data>
+  <data name="_thisDevice_.Text" xml:space="preserve">
+    <value>This device</value>
+  </data>
+  <data name="_turnEditionTextBoxUid_.PlaceholderText" xml:space="preserve">
+    <value>TURN server address</value>
+  </data>
+  <data name="_tt_delete_account_.Text" xml:space="preserve">
+    <value>Delete account</value>
+  </data>
+  <data name="_messageTextBox_.PlaceholderText" xml:space="preserve">
+    <value>Type a message</value>
+  </data>
+  <data name="_tt_pin_gen_close_.Text" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="_add_to_conference_.Text" xml:space="preserve">
+    <value>Add to conference</value>
+  </data>
+  <data name="_call_.Text" xml:space="preserve">
+    <value>撥打</value>
+  </data>
+  <data name="_copy_ring_id_.Text" xml:space="preserve">
+    <value>Copy RingID</value>
+  </data>
+  <data name="_deviceName_.Text" xml:space="preserve">
+    <value>Name </value>
+  </data>
+  <data name="_network_unavailable_.Text" xml:space="preserve">
+    <value>Network unavailable</value>
+  </data>
+  <data name="_other_linked_devices_.Text" xml:space="preserve">
+    <value>Other linked devices</value>
+  </data>
+  <data name="_removeContact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+  <data name="_wizardAddExistingAccountTitle_.Text" xml:space="preserve">
+    <value>Add Existing Account</value>
+  </data>
+  <data name="_wizardCreateAccountTitle_.Text" xml:space="preserve">
+    <value>Create New Account</value>
+  </data>
+  <data name="m_never_called_" xml:space="preserve">
+    <value>never called</value>
+  </data>
+  <data name="_c_artwork_by_.Text" xml:space="preserve">
+    <value>Artwork by:</value>
+  </data>
+  <data name="_c_created_by_.Text" xml:space="preserve">
+    <value>Created by:</value>
+  </data>
+  <data name="_m_add_device_" xml:space="preserve">
+    <value>Attempting to add this device...</value>
+  </data>
+  <data name="_m_creating_account_" xml:space="preserve">
+    <value>Creating account...</value>
+  </data>
+  <data name="_m_deleting_account_" xml:space="preserve">
+    <value>Deleting account...</value>
+  </data>
+  <data name="_m_generating_pin_" xml:space="preserve">
+    <value>Generating PIN</value>
+  </data>
+  <data name="_m_revoking_device_" xml:space="preserve">
+    <value>Revoking device with ID:</value>
+  </data>
+  <data name="_m_updating_account_" xml:space="preserve">
+    <value>Updating account...</value>
+  </data>
+  <data name="_remove_contact_.Text" xml:space="preserve">
+    <value>Remove contact</value>
+  </data>
+</root>
diff --git a/lodepng.cpp b/lodepng.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3b6bac9854ce0240be99610682fd99b1b24706d9
--- /dev/null
+++ b/lodepng.cpp
@@ -0,0 +1,6230 @@
+/*
+LodePNG version 20161127
+
+Copyright (c) 2005-2016 Lode Vandevenne
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+    1. The origin of this software must not be misrepresented; you must not
+    claim that you wrote the original software. If you use this software
+    in a product, an acknowledgment in the product documentation would be
+    appreciated but is not required.
+
+    2. Altered source versions must be plainly marked as such, and must not be
+    misrepresented as being the original software.
+
+    3. This notice may not be removed or altered from any source
+    distribution.
+*/
+
+/*
+The manual and changelog are in the header file "lodepng.h"
+Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C.
+*/
+
+#include "lodepng.h"
+
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1310) /*Visual Studio: A few warning types are not desired here.*/
+#pragma warning( disable : 4244 ) /*implicit conversions: not warned by gcc -Wall -Wextra and requires too much casts*/
+#pragma warning( disable : 4996 ) /*VS does not like fopen, but fopen_s is not standard C so unusable here*/
+#endif /*_MSC_VER */
+
+const char* LODEPNG_VERSION_STRING = "20161127";
+
+/*
+This source file is built up in the following large parts. The code sections
+with the "LODEPNG_COMPILE_" #defines divide this up further in an intermixed way.
+-Tools for C and common code for PNG and Zlib
+-C Code for Zlib (huffman, deflate, ...)
+-C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...)
+-The C++ wrapper around all of the above
+*/
+
+/*The malloc, realloc and free functions defined here with "lodepng_" in front
+of the name, so that you can easily change them to others related to your
+platform if needed. Everything else in the code calls these. Pass
+-DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out
+#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and
+define them in your own project's source files without needing to change
+lodepng source code. Don't forget to remove "static" if you copypaste them
+from here.*/
+
+#ifdef LODEPNG_COMPILE_ALLOCATORS
+static void* lodepng_malloc(size_t size)
+{
+  return malloc(size);
+}
+
+static void* lodepng_realloc(void* ptr, size_t new_size)
+{
+  return realloc(ptr, new_size);
+}
+
+static void lodepng_free(void* ptr)
+{
+  free(ptr);
+}
+#else /*LODEPNG_COMPILE_ALLOCATORS*/
+void* lodepng_malloc(size_t size);
+void* lodepng_realloc(void* ptr, size_t new_size);
+void lodepng_free(void* ptr);
+#endif /*LODEPNG_COMPILE_ALLOCATORS*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* // Tools for C, and common code for PNG and Zlib.                       // */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*
+Often in case of an error a value is assigned to a variable and then it breaks
+out of a loop (to go to the cleanup phase of a function). This macro does that.
+It makes the error handling code shorter and more readable.
+
+Example: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83);
+*/
+#define CERROR_BREAK(errorvar, code)\
+{\
+  errorvar = code;\
+  break;\
+}
+
+/*version of CERROR_BREAK that assumes the common case where the error variable is named "error"*/
+#define ERROR_BREAK(code) CERROR_BREAK(error, code)
+
+/*Set error var to the error code, and return it.*/
+#define CERROR_RETURN_ERROR(errorvar, code)\
+{\
+  errorvar = code;\
+  return code;\
+}
+
+/*Try the code, if it returns error, also return the error.*/
+#define CERROR_TRY_RETURN(call)\
+{\
+  unsigned error = call;\
+  if(error) return error;\
+}
+
+/*Set error var to the error code, and return from the void function.*/
+#define CERROR_RETURN(errorvar, code)\
+{\
+  errorvar = code;\
+  return;\
+}
+
+/*
+About uivector, ucvector and string:
+-All of them wrap dynamic arrays or text strings in a similar way.
+-LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version.
+-The string tools are made to avoid problems with compilers that declare things like strncat as deprecated.
+-They're not used in the interface, only internally in this file as static functions.
+-As with many other structs in this file, the init and cleanup functions serve as ctor and dtor.
+*/
+
+#ifdef LODEPNG_COMPILE_ZLIB
+/*dynamic vector of unsigned ints*/
+typedef struct uivector
+{
+  unsigned* data;
+  size_t size; /*size in number of unsigned longs*/
+  size_t allocsize; /*allocated size in bytes*/
+} uivector;
+
+static void uivector_cleanup(void* p)
+{
+  ((uivector*)p)->size = ((uivector*)p)->allocsize = 0;
+  lodepng_free(((uivector*)p)->data);
+  ((uivector*)p)->data = NULL;
+}
+
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned uivector_reserve(uivector* p, size_t allocsize)
+{
+  if(allocsize > p->allocsize)
+  {
+    size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2);
+    void* data = lodepng_realloc(p->data, newsize);
+    if(data)
+    {
+      p->allocsize = newsize;
+      p->data = (unsigned*)data;
+    }
+    else return 0; /*error: not enough memory*/
+  }
+  return 1;
+}
+
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned uivector_resize(uivector* p, size_t size)
+{
+  if(!uivector_reserve(p, size * sizeof(unsigned))) return 0;
+  p->size = size;
+  return 1; /*success*/
+}
+
+/*resize and give all new elements the value*/
+static unsigned uivector_resizev(uivector* p, size_t size, unsigned value)
+{
+  size_t oldsize = p->size, i;
+  if(!uivector_resize(p, size)) return 0;
+  for(i = oldsize; i < size; ++i) p->data[i] = value;
+  return 1;
+}
+
+static void uivector_init(uivector* p)
+{
+  p->data = NULL;
+  p->size = p->allocsize = 0;
+}
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned uivector_push_back(uivector* p, unsigned c)
+{
+  if(!uivector_resize(p, p->size + 1)) return 0;
+  p->data[p->size - 1] = c;
+  return 1;
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+#endif /*LODEPNG_COMPILE_ZLIB*/
+
+/* /////////////////////////////////////////////////////////////////////////// */
+
+/*dynamic vector of unsigned chars*/
+typedef struct ucvector
+{
+  unsigned char* data;
+  size_t size; /*used size*/
+  size_t allocsize; /*allocated size*/
+} ucvector;
+
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned ucvector_reserve(ucvector* p, size_t allocsize)
+{
+  if(allocsize > p->allocsize)
+  {
+    size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2);
+    void* data = lodepng_realloc(p->data, newsize);
+    if(data)
+    {
+      p->allocsize = newsize;
+      p->data = (unsigned char*)data;
+    }
+    else return 0; /*error: not enough memory*/
+  }
+  return 1;
+}
+
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned ucvector_resize(ucvector* p, size_t size)
+{
+  if(!ucvector_reserve(p, size * sizeof(unsigned char))) return 0;
+  p->size = size;
+  return 1; /*success*/
+}
+
+#ifdef LODEPNG_COMPILE_PNG
+
+static void ucvector_cleanup(void* p)
+{
+  ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0;
+  lodepng_free(((ucvector*)p)->data);
+  ((ucvector*)p)->data = NULL;
+}
+
+static void ucvector_init(ucvector* p)
+{
+  p->data = NULL;
+  p->size = p->allocsize = 0;
+}
+#endif /*LODEPNG_COMPILE_PNG*/
+
+#ifdef LODEPNG_COMPILE_ZLIB
+/*you can both convert from vector to buffer&size and vica versa. If you use
+init_buffer to take over a buffer and size, it is not needed to use cleanup*/
+static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size)
+{
+  p->data = buffer;
+  p->allocsize = p->size = size;
+}
+#endif /*LODEPNG_COMPILE_ZLIB*/
+
+#if (defined(LODEPNG_COMPILE_PNG) && defined(LODEPNG_COMPILE_ANCILLARY_CHUNKS)) || defined(LODEPNG_COMPILE_ENCODER)
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned ucvector_push_back(ucvector* p, unsigned char c)
+{
+  if(!ucvector_resize(p, p->size + 1)) return 0;
+  p->data[p->size - 1] = c;
+  return 1;
+}
+#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/
+
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_PNG
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned string_resize(char** out, size_t size)
+{
+  char* data = (char*)lodepng_realloc(*out, size + 1);
+  if(data)
+  {
+    data[size] = 0; /*null termination char*/
+    *out = data;
+  }
+  return data != 0;
+}
+
+/*init a {char*, size_t} pair for use as string*/
+static void string_init(char** out)
+{
+  *out = NULL;
+  string_resize(out, 0);
+}
+
+/*free the above pair again*/
+static void string_cleanup(char** out)
+{
+  lodepng_free(*out);
+  *out = NULL;
+}
+
+static void string_set(char** out, const char* in)
+{
+  size_t insize = strlen(in), i;
+  if(string_resize(out, insize))
+  {
+    for(i = 0; i != insize; ++i)
+    {
+      (*out)[i] = in[i];
+    }
+  }
+}
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+unsigned lodepng_read32bitInt(const unsigned char* buffer)
+{
+  return (unsigned)((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]);
+}
+
+#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)
+/*buffer must have at least 4 allocated bytes available*/
+static void lodepng_set32bitInt(unsigned char* buffer, unsigned value)
+{
+  buffer[0] = (unsigned char)((value >> 24) & 0xff);
+  buffer[1] = (unsigned char)((value >> 16) & 0xff);
+  buffer[2] = (unsigned char)((value >>  8) & 0xff);
+  buffer[3] = (unsigned char)((value      ) & 0xff);
+}
+#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+static void lodepng_add32bitInt(ucvector* buffer, unsigned value)
+{
+  ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/
+  lodepng_set32bitInt(&buffer->data[buffer->size - 4], value);
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / File IO                                                                / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_DISK
+
+/* returns negative value on error. This should be pure C compatible, so no fstat. */
+static long lodepng_filesize(const char* filename)
+{
+  FILE* file;
+  long size;
+  file = fopen(filename, "rb");
+  if(!file) return -1;
+
+  if(fseek(file, 0, SEEK_END) != 0)
+  {
+    fclose(file);
+    return -1;
+  }
+
+  size = ftell(file);
+  /* It may give LONG_MAX as directory size, this is invalid for us. */
+  if(size == LONG_MAX) size = -1;
+
+  fclose(file);
+  return size;
+}
+
+/* load file into buffer that already has the correct allocated size. Returns error code.*/
+static unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename)
+{
+  FILE* file;
+  size_t readsize;
+  file = fopen(filename, "rb");
+  if(!file) return 78;
+
+  readsize = fread(out, 1, size, file);
+  fclose(file);
+
+  if (readsize != size) return 78;
+  return 0;
+}
+
+unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename)
+{
+  long size = lodepng_filesize(filename);
+  if (size < 0) return 78;
+  *outsize = (size_t)size;
+
+  *out = (unsigned char*)lodepng_malloc((size_t)size);
+  if(!(*out) && size > 0) return 83; /*the above malloc failed*/
+
+  return lodepng_buffer_file(*out, (size_t)size, filename);
+}
+
+/*write given buffer to the file, overwriting the file, it doesn't append to it.*/
+unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename)
+{
+  FILE* file;
+  file = fopen(filename, "wb" );
+  if(!file) return 79;
+  fwrite((char*)buffer , 1 , buffersize, file);
+  fclose(file);
+  return 0;
+}
+
+#endif /*LODEPNG_COMPILE_DISK*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* // End of common code and tools. Begin of Zlib related code.            // */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_ZLIB
+#ifdef LODEPNG_COMPILE_ENCODER
+/*TODO: this ignores potential out of memory errors*/
+#define addBitToStream(/*size_t**/ bitpointer, /*ucvector**/ bitstream, /*unsigned char*/ bit)\
+{\
+  /*add a new byte at the end*/\
+  if(((*bitpointer) & 7) == 0) ucvector_push_back(bitstream, (unsigned char)0);\
+  /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\
+  (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7));\
+  ++(*bitpointer);\
+}
+
+static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits)
+{
+  size_t i;
+  for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1));
+}
+
+static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits)
+{
+  size_t i;
+  for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1));
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+#define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1)
+
+static unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream)
+{
+  unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream));
+  ++(*bitpointer);
+  return result;
+}
+
+static unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits)
+{
+  unsigned result = 0, i;
+  for(i = 0; i != nbits; ++i)
+  {
+    result += ((unsigned)READBIT(*bitpointer, bitstream)) << i;
+    ++(*bitpointer);
+  }
+  return result;
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Deflate - Huffman                                                      / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#define FIRST_LENGTH_CODE_INDEX 257
+#define LAST_LENGTH_CODE_INDEX 285
+/*256 literals, the end code, some length codes, and 2 unused codes*/
+#define NUM_DEFLATE_CODE_SYMBOLS 288
+/*the distance codes have their own symbols, 30 used, 2 unused*/
+#define NUM_DISTANCE_SYMBOLS 32
+/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/
+#define NUM_CODE_LENGTH_CODES 19
+
+/*the base lengths represented by codes 257-285*/
+static const unsigned LENGTHBASE[29]
+  = {3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59,
+     67, 83, 99, 115, 131, 163, 195, 227, 258};
+
+/*the extra bits used by codes 257-285 (added to base length)*/
+static const unsigned LENGTHEXTRA[29]
+  = {0, 0, 0, 0, 0, 0, 0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,
+      4,  4,  4,   4,   5,   5,   5,   5,   0};
+
+/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/
+static const unsigned DISTANCEBASE[30]
+  = {1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513,
+     769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577};
+
+/*the extra bits of backwards distances (added to base)*/
+static const unsigned DISTANCEEXTRA[30]
+  = {0, 0, 0, 0, 1, 1, 2,  2,  3,  3,  4,  4,  5,  5,   6,   6,   7,   7,   8,
+       8,    9,    9,   10,   10,   11,   11,   12,    12,    13,    13};
+
+/*the order in which "code length alphabet code lengths" are stored, out of this
+the huffman tree of the dynamic huffman tree lengths is generated*/
+static const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES]
+  = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*
+Huffman tree struct, containing multiple representations of the tree
+*/
+typedef struct HuffmanTree
+{
+  unsigned* tree2d;
+  unsigned* tree1d;
+  unsigned* lengths; /*the lengths of the codes of the 1d-tree*/
+  unsigned maxbitlen; /*maximum number of bits a single code can get*/
+  unsigned numcodes; /*number of symbols in the alphabet = number of codes*/
+} HuffmanTree;
+
+/*function used for debug purposes to draw the tree in ascii art with C++*/
+/*
+static void HuffmanTree_draw(HuffmanTree* tree)
+{
+  std::cout << "tree. length: " << tree->numcodes << " maxbitlen: " << tree->maxbitlen << std::endl;
+  for(size_t i = 0; i != tree->tree1d.size; ++i)
+  {
+    if(tree->lengths.data[i])
+      std::cout << i << " " << tree->tree1d.data[i] << " " << tree->lengths.data[i] << std::endl;
+  }
+  std::cout << std::endl;
+}*/
+
+static void HuffmanTree_init(HuffmanTree* tree)
+{
+  tree->tree2d = 0;
+  tree->tree1d = 0;
+  tree->lengths = 0;
+}
+
+static void HuffmanTree_cleanup(HuffmanTree* tree)
+{
+  lodepng_free(tree->tree2d);
+  lodepng_free(tree->tree1d);
+  lodepng_free(tree->lengths);
+}
+
+/*the tree representation used by the decoder. return value is error*/
+static unsigned HuffmanTree_make2DTree(HuffmanTree* tree)
+{
+  unsigned nodefilled = 0; /*up to which node it is filled*/
+  unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/
+  unsigned n, i;
+
+  tree->tree2d = (unsigned*)lodepng_malloc(tree->numcodes * 2 * sizeof(unsigned));
+  if(!tree->tree2d) return 83; /*alloc fail*/
+
+  /*
+  convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means
+  uninited, a value >= numcodes is an address to another bit, a value < numcodes
+  is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as
+  many columns as codes - 1.
+  A good huffman tree has N * 2 - 1 nodes, of which N - 1 are internal nodes.
+  Here, the internal nodes are stored (what their 0 and 1 option point to).
+  There is only memory for such good tree currently, if there are more nodes
+  (due to too long length codes), error 55 will happen
+  */
+  for(n = 0; n < tree->numcodes * 2; ++n)
+  {
+    tree->tree2d[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/
+  }
+
+  for(n = 0; n < tree->numcodes; ++n) /*the codes*/
+  {
+    for(i = 0; i != tree->lengths[n]; ++i) /*the bits for this code*/
+    {
+      unsigned char bit = (unsigned char)((tree->tree1d[n] >> (tree->lengths[n] - i - 1)) & 1);
+      /*oversubscribed, see comment in lodepng_error_text*/
+      if(treepos > 2147483647 || treepos + 2 > tree->numcodes) return 55;
+      if(tree->tree2d[2 * treepos + bit] == 32767) /*not yet filled in*/
+      {
+        if(i + 1 == tree->lengths[n]) /*last bit*/
+        {
+          tree->tree2d[2 * treepos + bit] = n; /*put the current code in it*/
+          treepos = 0;
+        }
+        else
+        {
+          /*put address of the next step in here, first that address has to be found of course
+          (it's just nodefilled + 1)...*/
+          ++nodefilled;
+          /*addresses encoded with numcodes added to it*/
+          tree->tree2d[2 * treepos + bit] = nodefilled + tree->numcodes;
+          treepos = nodefilled;
+        }
+      }
+      else treepos = tree->tree2d[2 * treepos + bit] - tree->numcodes;
+    }
+  }
+
+  for(n = 0; n < tree->numcodes * 2; ++n)
+  {
+    if(tree->tree2d[n] == 32767) tree->tree2d[n] = 0; /*remove possible remaining 32767's*/
+  }
+
+  return 0;
+}
+
+/*
+Second step for the ...makeFromLengths and ...makeFromFrequencies functions.
+numcodes, lengths and maxbitlen must already be filled in correctly. return
+value is error.
+*/
+static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree)
+{
+  uivector blcount;
+  uivector nextcode;
+  unsigned error = 0;
+  unsigned bits, n;
+
+  uivector_init(&blcount);
+  uivector_init(&nextcode);
+
+  tree->tree1d = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned));
+  if(!tree->tree1d) error = 83; /*alloc fail*/
+
+  if(!uivector_resizev(&blcount, tree->maxbitlen + 1, 0)
+  || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0))
+    error = 83; /*alloc fail*/
+
+  if(!error)
+  {
+    /*step 1: count number of instances of each code length*/
+    for(bits = 0; bits != tree->numcodes; ++bits) ++blcount.data[tree->lengths[bits]];
+    /*step 2: generate the nextcode values*/
+    for(bits = 1; bits <= tree->maxbitlen; ++bits)
+    {
+      nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1;
+    }
+    /*step 3: generate all the codes*/
+    for(n = 0; n != tree->numcodes; ++n)
+    {
+      if(tree->lengths[n] != 0) tree->tree1d[n] = nextcode.data[tree->lengths[n]]++;
+    }
+  }
+
+  uivector_cleanup(&blcount);
+  uivector_cleanup(&nextcode);
+
+  if(!error) return HuffmanTree_make2DTree(tree);
+  else return error;
+}
+
+/*
+given the code lengths (as stored in the PNG file), generate the tree as defined
+by Deflate. maxbitlen is the maximum bits that a code in the tree can have.
+return value is error.
+*/
+static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen,
+                                            size_t numcodes, unsigned maxbitlen)
+{
+  unsigned i;
+  tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned));
+  if(!tree->lengths) return 83; /*alloc fail*/
+  for(i = 0; i != numcodes; ++i) tree->lengths[i] = bitlen[i];
+  tree->numcodes = (unsigned)numcodes; /*number of symbols*/
+  tree->maxbitlen = maxbitlen;
+  return HuffmanTree_makeFromLengths2(tree);
+}
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+/*BPM: Boundary Package Merge, see "A Fast and Space-Economical Algorithm for Length-Limited Coding",
+Jyrki Katajainen, Alistair Moffat, Andrew Turpin, 1995.*/
+
+/*chain node for boundary package merge*/
+typedef struct BPMNode
+{
+  int weight; /*the sum of all weights in this chain*/
+  unsigned index; /*index of this leaf node (called "count" in the paper)*/
+  struct BPMNode* tail; /*the next nodes in this chain (null if last)*/
+  int in_use;
+} BPMNode;
+
+/*lists of chains*/
+typedef struct BPMLists
+{
+  /*memory pool*/
+  unsigned memsize;
+  BPMNode* memory;
+  unsigned numfree;
+  unsigned nextfree;
+  BPMNode** freelist;
+  /*two heads of lookahead chains per list*/
+  unsigned listsize;
+  BPMNode** chains0;
+  BPMNode** chains1;
+} BPMLists;
+
+/*creates a new chain node with the given parameters, from the memory in the lists */
+static BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned index, BPMNode* tail)
+{
+  unsigned i;
+  BPMNode* result;
+
+  /*memory full, so garbage collect*/
+  if(lists->nextfree >= lists->numfree)
+  {
+    /*mark only those that are in use*/
+    for(i = 0; i != lists->memsize; ++i) lists->memory[i].in_use = 0;
+    for(i = 0; i != lists->listsize; ++i)
+    {
+      BPMNode* node;
+      for(node = lists->chains0[i]; node != 0; node = node->tail) node->in_use = 1;
+      for(node = lists->chains1[i]; node != 0; node = node->tail) node->in_use = 1;
+    }
+    /*collect those that are free*/
+    lists->numfree = 0;
+    for(i = 0; i != lists->memsize; ++i)
+    {
+      if(!lists->memory[i].in_use) lists->freelist[lists->numfree++] = &lists->memory[i];
+    }
+    lists->nextfree = 0;
+  }
+
+  result = lists->freelist[lists->nextfree++];
+  result->weight = weight;
+  result->index = index;
+  result->tail = tail;
+  return result;
+}
+
+/*sort the leaves with stable mergesort*/
+static void bpmnode_sort(BPMNode* leaves, size_t num)
+{
+  BPMNode* mem = (BPMNode*)lodepng_malloc(sizeof(*leaves) * num);
+  size_t width, counter = 0;
+  for(width = 1; width < num; width *= 2)
+  {
+    BPMNode* a = (counter & 1) ? mem : leaves;
+    BPMNode* b = (counter & 1) ? leaves : mem;
+    size_t p;
+    for(p = 0; p < num; p += 2 * width)
+    {
+      size_t q = (p + width > num) ? num : (p + width);
+      size_t r = (p + 2 * width > num) ? num : (p + 2 * width);
+      size_t i = p, j = q, k;
+      for(k = p; k < r; k++)
+      {
+        if(i < q && (j >= r || a[i].weight <= a[j].weight)) b[k] = a[i++];
+        else b[k] = a[j++];
+      }
+    }
+    counter++;
+  }
+  if(counter & 1) memcpy(leaves, mem, sizeof(*leaves) * num);
+  lodepng_free(mem);
+}
+
+/*Boundary Package Merge step, numpresent is the amount of leaves, and c is the current chain.*/
+static void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numpresent, int c, int num)
+{
+  unsigned lastindex = lists->chains1[c]->index;
+
+  if(c == 0)
+  {
+    if(lastindex >= numpresent) return;
+    lists->chains0[c] = lists->chains1[c];
+    lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, 0);
+  }
+  else
+  {
+    /*sum of the weights of the head nodes of the previous lookahead chains.*/
+    int sum = lists->chains0[c - 1]->weight + lists->chains1[c - 1]->weight;
+    lists->chains0[c] = lists->chains1[c];
+    if(lastindex < numpresent && sum > leaves[lastindex].weight)
+    {
+      lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, lists->chains1[c]->tail);
+      return;
+    }
+    lists->chains1[c] = bpmnode_create(lists, sum, lastindex, lists->chains1[c - 1]);
+    /*in the end we are only interested in the chain of the last list, so no
+    need to recurse if we're at the last one (this gives measurable speedup)*/
+    if(num + 1 < (int)(2 * numpresent - 2))
+    {
+      boundaryPM(lists, leaves, numpresent, c - 1, num);
+      boundaryPM(lists, leaves, numpresent, c - 1, num);
+    }
+  }
+}
+
+unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,
+                                      size_t numcodes, unsigned maxbitlen)
+{
+  unsigned error = 0;
+  unsigned i;
+  size_t numpresent = 0; /*number of symbols with non-zero frequency*/
+  BPMNode* leaves; /*the symbols, only those with > 0 frequency*/
+
+  if(numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/
+  if((1u << maxbitlen) < numcodes) return 80; /*error: represent all symbols*/
+
+  leaves = (BPMNode*)lodepng_malloc(numcodes * sizeof(*leaves));
+  if(!leaves) return 83; /*alloc fail*/
+
+  for(i = 0; i != numcodes; ++i)
+  {
+    if(frequencies[i] > 0)
+    {
+      leaves[numpresent].weight = (int)frequencies[i];
+      leaves[numpresent].index = i;
+      ++numpresent;
+    }
+  }
+
+  for(i = 0; i != numcodes; ++i) lengths[i] = 0;
+
+  /*ensure at least two present symbols. There should be at least one symbol
+  according to RFC 1951 section 3.2.7. Some decoders incorrectly require two. To
+  make these work as well ensure there are at least two symbols. The
+  Package-Merge code below also doesn't work correctly if there's only one
+  symbol, it'd give it the theoritical 0 bits but in practice zlib wants 1 bit*/
+  if(numpresent == 0)
+  {
+    lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/
+  }
+  else if(numpresent == 1)
+  {
+    lengths[leaves[0].index] = 1;
+    lengths[leaves[0].index == 0 ? 1 : 0] = 1;
+  }
+  else
+  {
+    BPMLists lists;
+    BPMNode* node;
+
+    bpmnode_sort(leaves, numpresent);
+
+    lists.listsize = maxbitlen;
+    lists.memsize = 2 * maxbitlen * (maxbitlen + 1);
+    lists.nextfree = 0;
+    lists.numfree = lists.memsize;
+    lists.memory = (BPMNode*)lodepng_malloc(lists.memsize * sizeof(*lists.memory));
+    lists.freelist = (BPMNode**)lodepng_malloc(lists.memsize * sizeof(BPMNode*));
+    lists.chains0 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*));
+    lists.chains1 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*));
+    if(!lists.memory || !lists.freelist || !lists.chains0 || !lists.chains1) error = 83; /*alloc fail*/
+
+    if(!error)
+    {
+      for(i = 0; i != lists.memsize; ++i) lists.freelist[i] = &lists.memory[i];
+
+      bpmnode_create(&lists, leaves[0].weight, 1, 0);
+      bpmnode_create(&lists, leaves[1].weight, 2, 0);
+
+      for(i = 0; i != lists.listsize; ++i)
+      {
+        lists.chains0[i] = &lists.memory[0];
+        lists.chains1[i] = &lists.memory[1];
+      }
+
+      /*each boundaryPM call adds one chain to the last list, and we need 2 * numpresent - 2 chains.*/
+      for(i = 2; i != 2 * numpresent - 2; ++i) boundaryPM(&lists, leaves, numpresent, (int)maxbitlen - 1, (int)i);
+
+      for(node = lists.chains1[maxbitlen - 1]; node; node = node->tail)
+      {
+        for(i = 0; i != node->index; ++i) ++lengths[leaves[i].index];
+      }
+    }
+
+    lodepng_free(lists.memory);
+    lodepng_free(lists.freelist);
+    lodepng_free(lists.chains0);
+    lodepng_free(lists.chains1);
+  }
+
+  lodepng_free(leaves);
+  return error;
+}
+
+/*Create the Huffman tree given the symbol frequencies*/
+static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies,
+                                                size_t mincodes, size_t numcodes, unsigned maxbitlen)
+{
+  unsigned error = 0;
+  while(!frequencies[numcodes - 1] && numcodes > mincodes) --numcodes; /*trim zeroes*/
+  tree->maxbitlen = maxbitlen;
+  tree->numcodes = (unsigned)numcodes; /*number of symbols*/
+  tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned));
+  if(!tree->lengths) return 83; /*alloc fail*/
+  /*initialize all lengths to 0*/
+  memset(tree->lengths, 0, numcodes * sizeof(unsigned));
+
+  error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen);
+  if(!error) error = HuffmanTree_makeFromLengths2(tree);
+  return error;
+}
+
+static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index)
+{
+  return tree->tree1d[index];
+}
+
+static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index)
+{
+  return tree->lengths[index];
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/
+static unsigned generateFixedLitLenTree(HuffmanTree* tree)
+{
+  unsigned i, error = 0;
+  unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned));
+  if(!bitlen) return 83; /*alloc fail*/
+
+  /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/
+  for(i =   0; i <= 143; ++i) bitlen[i] = 8;
+  for(i = 144; i <= 255; ++i) bitlen[i] = 9;
+  for(i = 256; i <= 279; ++i) bitlen[i] = 7;
+  for(i = 280; i <= 287; ++i) bitlen[i] = 8;
+
+  error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15);
+
+  lodepng_free(bitlen);
+  return error;
+}
+
+/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/
+static unsigned generateFixedDistanceTree(HuffmanTree* tree)
+{
+  unsigned i, error = 0;
+  unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned));
+  if(!bitlen) return 83; /*alloc fail*/
+
+  /*there are 32 distance codes, but 30-31 are unused*/
+  for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen[i] = 5;
+  error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15);
+
+  lodepng_free(bitlen);
+  return error;
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+/*
+returns the code, or (unsigned)(-1) if error happened
+inbitlength is the length of the complete buffer, in bits (so its byte length times 8)
+*/
+static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp,
+                                    const HuffmanTree* codetree, size_t inbitlength)
+{
+  unsigned treepos = 0, ct;
+  for(;;)
+  {
+    if(*bp >= inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/
+    /*
+    decode the symbol from the tree. The "readBitFromStream" code is inlined in
+    the expression below because this is the biggest bottleneck while decoding
+    */
+    ct = codetree->tree2d[(treepos << 1) + READBIT(*bp, in)];
+    ++(*bp);
+    if(ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/
+    else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/
+
+    if(treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/
+  }
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Inflator (Decompressor)                                                / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/
+static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d)
+{
+  /*TODO: check for out of memory errors*/
+  generateFixedLitLenTree(tree_ll);
+  generateFixedDistanceTree(tree_d);
+}
+
+/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/
+static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d,
+                                      const unsigned char* in, size_t* bp, size_t inlength)
+{
+  /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/
+  unsigned error = 0;
+  unsigned n, HLIT, HDIST, HCLEN, i;
+  size_t inbitlength = inlength * 8;
+
+  /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/
+  unsigned* bitlen_ll = 0; /*lit,len code lengths*/
+  unsigned* bitlen_d = 0; /*dist code lengths*/
+  /*code length code lengths ("clcl"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/
+  unsigned* bitlen_cl = 0;
+  HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/
+
+  if((*bp) + 14 > (inlength << 3)) return 49; /*error: the bit pointer is or will go past the memory*/
+
+  /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/
+  HLIT =  readBitsFromStream(bp, in, 5) + 257;
+  /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/
+  HDIST = readBitsFromStream(bp, in, 5) + 1;
+  /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/
+  HCLEN = readBitsFromStream(bp, in, 4) + 4;
+
+  if((*bp) + HCLEN * 3 > (inlength << 3)) return 50; /*error: the bit pointer is or will go past the memory*/
+
+  HuffmanTree_init(&tree_cl);
+
+  while(!error)
+  {
+    /*read the code length codes out of 3 * (amount of code length codes) bits*/
+
+    bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned));
+    if(!bitlen_cl) ERROR_BREAK(83 /*alloc fail*/);
+
+    for(i = 0; i != NUM_CODE_LENGTH_CODES; ++i)
+    {
+      if(i < HCLEN) bitlen_cl[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3);
+      else bitlen_cl[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/
+    }
+
+    error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7);
+    if(error) break;
+
+    /*now we can use this tree to read the lengths for the tree that this function will return*/
+    bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned));
+    bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned));
+    if(!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/);
+    for(i = 0; i != NUM_DEFLATE_CODE_SYMBOLS; ++i) bitlen_ll[i] = 0;
+    for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen_d[i] = 0;
+
+    /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/
+    i = 0;
+    while(i < HLIT + HDIST)
+    {
+      unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength);
+      if(code <= 15) /*a length code*/
+      {
+        if(i < HLIT) bitlen_ll[i] = code;
+        else bitlen_d[i - HLIT] = code;
+        ++i;
+      }
+      else if(code == 16) /*repeat previous*/
+      {
+        unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/
+        unsigned value; /*set value to the previous code*/
+
+        if(i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/
+
+        if((*bp + 2) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/
+        replength += readBitsFromStream(bp, in, 2);
+
+        if(i < HLIT + 1) value = bitlen_ll[i - 1];
+        else value = bitlen_d[i - HLIT - 1];
+        /*repeat this value in the next lengths*/
+        for(n = 0; n < replength; ++n)
+        {
+          if(i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/
+          if(i < HLIT) bitlen_ll[i] = value;
+          else bitlen_d[i - HLIT] = value;
+          ++i;
+        }
+      }
+      else if(code == 17) /*repeat "0" 3-10 times*/
+      {
+        unsigned replength = 3; /*read in the bits that indicate repeat length*/
+        if((*bp + 3) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/
+        replength += readBitsFromStream(bp, in, 3);
+
+        /*repeat this value in the next lengths*/
+        for(n = 0; n < replength; ++n)
+        {
+          if(i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/
+
+          if(i < HLIT) bitlen_ll[i] = 0;
+          else bitlen_d[i - HLIT] = 0;
+          ++i;
+        }
+      }
+      else if(code == 18) /*repeat "0" 11-138 times*/
+      {
+        unsigned replength = 11; /*read in the bits that indicate repeat length*/
+        if((*bp + 7) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/
+        replength += readBitsFromStream(bp, in, 7);
+
+        /*repeat this value in the next lengths*/
+        for(n = 0; n < replength; ++n)
+        {
+          if(i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/
+
+          if(i < HLIT) bitlen_ll[i] = 0;
+          else bitlen_d[i - HLIT] = 0;
+          ++i;
+        }
+      }
+      else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/
+      {
+        if(code == (unsigned)(-1))
+        {
+          /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol
+          (10=no endcode, 11=wrong jump outside of tree)*/
+          error = (*bp) > inbitlength ? 10 : 11;
+        }
+        else error = 16; /*unexisting code, this can never happen*/
+        break;
+      }
+    }
+    if(error) break;
+
+    if(bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/
+
+    /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/
+    error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15);
+    if(error) break;
+    error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15);
+
+    break; /*end of error-while*/
+  }
+
+  lodepng_free(bitlen_cl);
+  lodepng_free(bitlen_ll);
+  lodepng_free(bitlen_d);
+  HuffmanTree_cleanup(&tree_cl);
+
+  return error;
+}
+
+/*inflate a block with dynamic of fixed Huffman tree*/
+static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp,
+                                    size_t* pos, size_t inlength, unsigned btype)
+{
+  unsigned error = 0;
+  HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/
+  HuffmanTree tree_d; /*the huffman tree for distance codes*/
+  size_t inbitlength = inlength * 8;
+
+  HuffmanTree_init(&tree_ll);
+  HuffmanTree_init(&tree_d);
+
+  if(btype == 1) getTreeInflateFixed(&tree_ll, &tree_d);
+  else if(btype == 2) error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength);
+
+  while(!error) /*decode all symbols until end reached, breaks at end code*/
+  {
+    /*code_ll is literal, length or end code*/
+    unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength);
+    if(code_ll <= 255) /*literal symbol*/
+    {
+      /*ucvector_push_back would do the same, but for some reason the two lines below run 10% faster*/
+      if(!ucvector_resize(out, (*pos) + 1)) ERROR_BREAK(83 /*alloc fail*/);
+      out->data[*pos] = (unsigned char)code_ll;
+      ++(*pos);
+    }
+    else if(code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/
+    {
+      unsigned code_d, distance;
+      unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/
+      size_t start, forward, backward, length;
+
+      /*part 1: get length base*/
+      length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX];
+
+      /*part 2: get extra bits and add the value of that to length*/
+      numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX];
+      if((*bp + numextrabits_l) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/
+      length += readBitsFromStream(bp, in, numextrabits_l);
+
+      /*part 3: get distance code*/
+      code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength);
+      if(code_d > 29)
+      {
+        if(code_ll == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/
+        {
+          /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol
+          (10=no endcode, 11=wrong jump outside of tree)*/
+          error = (*bp) > inlength * 8 ? 10 : 11;
+        }
+        else error = 18; /*error: invalid distance code (30-31 are never used)*/
+        break;
+      }
+      distance = DISTANCEBASE[code_d];
+
+      /*part 4: get extra bits from distance*/
+      numextrabits_d = DISTANCEEXTRA[code_d];
+      if((*bp + numextrabits_d) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/
+      distance += readBitsFromStream(bp, in, numextrabits_d);
+
+      /*part 5: fill in all the out[n] values based on the length and dist*/
+      start = (*pos);
+      if(distance > start) ERROR_BREAK(52); /*too long backward distance*/
+      backward = start - distance;
+
+      if(!ucvector_resize(out, (*pos) + length)) ERROR_BREAK(83 /*alloc fail*/);
+      if (distance < length) {
+        for(forward = 0; forward < length; ++forward)
+        {
+          out->data[(*pos)++] = out->data[backward++];
+        }
+      } else {
+        memcpy(out->data + *pos, out->data + backward, length);
+        *pos += length;
+      }
+    }
+    else if(code_ll == 256)
+    {
+      break; /*end code, break the loop*/
+    }
+    else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/
+    {
+      /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol
+      (10=no endcode, 11=wrong jump outside of tree)*/
+      error = ((*bp) > inlength * 8) ? 10 : 11;
+      break;
+    }
+  }
+
+  HuffmanTree_cleanup(&tree_ll);
+  HuffmanTree_cleanup(&tree_d);
+
+  return error;
+}
+
+static unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength)
+{
+  size_t p;
+  unsigned LEN, NLEN, n, error = 0;
+
+  /*go to first boundary of byte*/
+  while(((*bp) & 0x7) != 0) ++(*bp);
+  p = (*bp) / 8; /*byte position*/
+
+  /*read LEN (2 bytes) and NLEN (2 bytes)*/
+  if(p + 4 >= inlength) return 52; /*error, bit pointer will jump past memory*/
+  LEN = in[p] + 256u * in[p + 1]; p += 2;
+  NLEN = in[p] + 256u * in[p + 1]; p += 2;
+
+  /*check if 16-bit NLEN is really the one's complement of LEN*/
+  if(LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/
+
+  if(!ucvector_resize(out, (*pos) + LEN)) return 83; /*alloc fail*/
+
+  /*read the literal data: LEN bytes are now stored in the out buffer*/
+  if(p + LEN > inlength) return 23; /*error: reading outside of in buffer*/
+  for(n = 0; n < LEN; ++n) out->data[(*pos)++] = in[p++];
+
+  (*bp) = p * 8;
+
+  return error;
+}
+
+static unsigned lodepng_inflatev(ucvector* out,
+                                 const unsigned char* in, size_t insize,
+                                 const LodePNGDecompressSettings* settings)
+{
+  /*bit pointer in the "in" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/
+  size_t bp = 0;
+  unsigned BFINAL = 0;
+  size_t pos = 0; /*byte position in the out buffer*/
+  unsigned error = 0;
+
+  (void)settings;
+
+  while(!BFINAL)
+  {
+    unsigned BTYPE;
+    if(bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/
+    BFINAL = readBitFromStream(&bp, in);
+    BTYPE = 1u * readBitFromStream(&bp, in);
+    BTYPE += 2u * readBitFromStream(&bp, in);
+
+    if(BTYPE == 3) return 20; /*error: invalid BTYPE*/
+    else if(BTYPE == 0) error = inflateNoCompression(out, in, &bp, &pos, insize); /*no compression*/
+    else error = inflateHuffmanBlock(out, in, &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/
+
+    if(error) return error;
+  }
+
+  return error;
+}
+
+unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
+                         const unsigned char* in, size_t insize,
+                         const LodePNGDecompressSettings* settings)
+{
+  unsigned error;
+  ucvector v;
+  ucvector_init_buffer(&v, *out, *outsize);
+  error = lodepng_inflatev(&v, in, insize, settings);
+  *out = v.data;
+  *outsize = v.size;
+  return error;
+}
+
+static unsigned inflate(unsigned char** out, size_t* outsize,
+                        const unsigned char* in, size_t insize,
+                        const LodePNGDecompressSettings* settings)
+{
+  if(settings->custom_inflate)
+  {
+    return settings->custom_inflate(out, outsize, in, insize, settings);
+  }
+  else
+  {
+    return lodepng_inflate(out, outsize, in, insize, settings);
+  }
+}
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Deflator (Compressor)                                                  / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258;
+
+/*bitlen is the size in bits of the code*/
+static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen)
+{
+  addBitsToStreamReversed(bp, compressed, code, bitlen);
+}
+
+/*search the index in the array, that has the largest value smaller than or equal to the given value,
+given array must be sorted (if no value is smaller, it returns the size of the given array)*/
+static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value)
+{
+  /*binary search (only small gain over linear). TODO: use CPU log2 instruction for getting symbols instead*/
+  size_t left = 1;
+  size_t right = array_size - 1;
+
+  while(left <= right) {
+    size_t mid = (left + right) >> 1;
+    if (array[mid] >= value) right = mid - 1;
+    else left = mid + 1;
+  }
+  if(left >= array_size || array[left] > value) left--;
+  return left;
+}
+
+static void addLengthDistance(uivector* values, size_t length, size_t distance)
+{
+  /*values in encoded vector are those used by deflate:
+  0-255: literal bytes
+  256: end
+  257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits)
+  286-287: invalid*/
+
+  unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length);
+  unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]);
+  unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance);
+  unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]);
+
+  uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX);
+  uivector_push_back(values, extra_length);
+  uivector_push_back(values, dist_code);
+  uivector_push_back(values, extra_distance);
+}
+
+/*3 bytes of data get encoded into two bytes. The hash cannot use more than 3
+bytes as input because 3 is the minimum match length for deflate*/
+static const unsigned HASH_NUM_VALUES = 65536;
+static const unsigned HASH_BIT_MASK = 65535; /*HASH_NUM_VALUES - 1, but C90 does not like that as initializer*/
+
+typedef struct Hash
+{
+  int* head; /*hash value to head circular pos - can be outdated if went around window*/
+  /*circular pos to prev circular pos*/
+  unsigned short* chain;
+  int* val; /*circular pos to hash value*/
+
+  /*TODO: do this not only for zeros but for any repeated byte. However for PNG
+  it's always going to be the zeros that dominate, so not important for PNG*/
+  int* headz; /*similar to head, but for chainz*/
+  unsigned short* chainz; /*those with same amount of zeros*/
+  unsigned short* zeros; /*length of zeros streak, used as a second hash chain*/
+} Hash;
+
+static unsigned hash_init(Hash* hash, unsigned windowsize)
+{
+  unsigned i;
+  hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES);
+  hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize);
+  hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);
+
+  hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);
+  hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1));
+  hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);
+
+  if(!hash->head || !hash->chain || !hash->val  || !hash->headz|| !hash->chainz || !hash->zeros)
+  {
+    return 83; /*alloc fail*/
+  }
+
+  /*initialize hash table*/
+  for(i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1;
+  for(i = 0; i != windowsize; ++i) hash->val[i] = -1;
+  for(i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/
+
+  for(i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1;
+  for(i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/
+
+  return 0;
+}
+
+static void hash_cleanup(Hash* hash)
+{
+  lodepng_free(hash->head);
+  lodepng_free(hash->val);
+  lodepng_free(hash->chain);
+
+  lodepng_free(hash->zeros);
+  lodepng_free(hash->headz);
+  lodepng_free(hash->chainz);
+}
+
+
+
+static unsigned getHash(const unsigned char* data, size_t size, size_t pos)
+{
+  unsigned result = 0;
+  if(pos + 2 < size)
+  {
+    /*A simple shift and xor hash is used. Since the data of PNGs is dominated
+    by zeroes due to the filters, a better hash does not have a significant
+    effect on speed in traversing the chain, and causes more time spend on
+    calculating the hash.*/
+    result ^= (unsigned)(data[pos + 0] << 0u);
+    result ^= (unsigned)(data[pos + 1] << 4u);
+    result ^= (unsigned)(data[pos + 2] << 8u);
+  } else {
+    size_t amount, i;
+    if(pos >= size) return 0;
+    amount = size - pos;
+    for(i = 0; i != amount; ++i) result ^= (unsigned)(data[pos + i] << (i * 8u));
+  }
+  return result & HASH_BIT_MASK;
+}
+
+static unsigned countZeros(const unsigned char* data, size_t size, size_t pos)
+{
+  const unsigned char* start = data + pos;
+  const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH;
+  if(end > data + size) end = data + size;
+  data = start;
+  while(data != end && *data == 0) ++data;
+  /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/
+  return (unsigned)(data - start);
+}
+
+/*wpos = pos & (windowsize - 1)*/
+static void updateHashChain(Hash* hash, size_t wpos, unsigned hashval, unsigned short numzeros)
+{
+  hash->val[wpos] = (int)hashval;
+  if(hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval];
+  hash->head[hashval] = wpos;
+
+  hash->zeros[wpos] = numzeros;
+  if(hash->headz[numzeros] != -1) hash->chainz[wpos] = hash->headz[numzeros];
+  hash->headz[numzeros] = wpos;
+}
+
+/*
+LZ77-encode the data. Return value is error code. The input are raw bytes, the output
+is in the form of unsigned integers with codes representing for example literal bytes, or
+length/distance pairs.
+It uses a hash table technique to let it encode faster. When doing LZ77 encoding, a
+sliding window (of windowsize) is used, and all past bytes in that window can be used as
+the "dictionary". A brute force search through all possible distances would be slow, and
+this hash technique is one out of several ways to speed this up.
+*/
+static unsigned encodeLZ77(uivector* out, Hash* hash,
+                           const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize,
+                           unsigned minmatch, unsigned nicematch, unsigned lazymatching)
+{
+  size_t pos;
+  unsigned i, error = 0;
+  /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/
+  unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8;
+  unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64;
+
+  unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/
+  unsigned numzeros = 0;
+
+  unsigned offset; /*the offset represents the distance in LZ77 terminology*/
+  unsigned length;
+  unsigned lazy = 0;
+  unsigned lazylength = 0, lazyoffset = 0;
+  unsigned hashval;
+  unsigned current_offset, current_length;
+  unsigned prev_offset;
+  const unsigned char *lastptr, *foreptr, *backptr;
+  unsigned hashpos;
+
+  if(windowsize == 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/
+  if((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/
+
+  if(nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH;
+
+  for(pos = inpos; pos < insize; ++pos)
+  {
+    size_t wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/
+    unsigned chainlength = 0;
+
+    hashval = getHash(in, insize, pos);
+
+    if(usezeros && hashval == 0)
+    {
+      if(numzeros == 0) numzeros = countZeros(in, insize, pos);
+      else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros;
+    }
+    else
+    {
+      numzeros = 0;
+    }
+
+    updateHashChain(hash, wpos, hashval, numzeros);
+
+    /*the length and offset found for the current position*/
+    length = 0;
+    offset = 0;
+
+    hashpos = hash->chain[wpos];
+
+    lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH];
+
+    /*search for the longest string*/
+    prev_offset = 0;
+    for(;;)
+    {
+      if(chainlength++ >= maxchainlength) break;
+      current_offset = hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize;
+
+      if(current_offset < prev_offset) break; /*stop when went completely around the circular buffer*/
+      prev_offset = current_offset;
+      if(current_offset > 0)
+      {
+        /*test the next characters*/
+        foreptr = &in[pos];
+        backptr = &in[pos - current_offset];
+
+        /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/
+        if(numzeros >= 3)
+        {
+          unsigned skip = hash->zeros[hashpos];
+          if(skip > numzeros) skip = numzeros;
+          backptr += skip;
+          foreptr += skip;
+        }
+
+        while(foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/
+        {
+          ++backptr;
+          ++foreptr;
+        }
+        current_length = (unsigned)(foreptr - &in[pos]);
+
+        if(current_length > length)
+        {
+          length = current_length; /*the longest length*/
+          offset = current_offset; /*the offset that is related to this longest length*/
+          /*jump out once a length of max length is found (speed gain). This also jumps
+          out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/
+          if(current_length >= nicematch) break;
+        }
+      }
+
+      if(hashpos == hash->chain[hashpos]) break;
+
+      if(numzeros >= 3 && length > numzeros)
+      {
+        hashpos = hash->chainz[hashpos];
+        if(hash->zeros[hashpos] != numzeros) break;
+      }
+      else
+      {
+        hashpos = hash->chain[hashpos];
+        /*outdated hash value, happens if particular value was not encountered in whole last window*/
+        if(hash->val[hashpos] != (int)hashval) break;
+      }
+    }
+
+    if(lazymatching)
+    {
+      if(!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH)
+      {
+        lazy = 1;
+        lazylength = length;
+        lazyoffset = offset;
+        continue; /*try the next byte*/
+      }
+      if(lazy)
+      {
+        lazy = 0;
+        if(pos == 0) ERROR_BREAK(81);
+        if(length > lazylength + 1)
+        {
+          /*push the previous character as literal*/
+          if(!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/);
+        }
+        else
+        {
+          length = lazylength;
+          offset = lazyoffset;
+          hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/
+          hash->headz[numzeros] = -1; /*idem*/
+          --pos;
+        }
+      }
+    }
+    if(length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/);
+
+    /*encode it as length/distance pair or literal value*/
+    if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/
+    {
+      if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/);
+    }
+    else if(length < minmatch || (length == 3 && offset > 4096))
+    {
+      /*compensate for the fact that longer offsets have more extra bits, a
+      length of only 3 may be not worth it then*/
+      if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/);
+    }
+    else
+    {
+      addLengthDistance(out, length, offset);
+      for(i = 1; i < length; ++i)
+      {
+        ++pos;
+        wpos = pos & (windowsize - 1);
+        hashval = getHash(in, insize, pos);
+        if(usezeros && hashval == 0)
+        {
+          if(numzeros == 0) numzeros = countZeros(in, insize, pos);
+          else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros;
+        }
+        else
+        {
+          numzeros = 0;
+        }
+        updateHashChain(hash, wpos, hashval, numzeros);
+      }
+    }
+  } /*end of the loop through each character of input*/
+
+  return error;
+}
+
+/* /////////////////////////////////////////////////////////////////////////// */
+
+static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize)
+{
+  /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte,
+  2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/
+
+  size_t i, j, numdeflateblocks = (datasize + 65534) / 65535;
+  unsigned datapos = 0;
+  for(i = 0; i != numdeflateblocks; ++i)
+  {
+    unsigned BFINAL, BTYPE, LEN, NLEN;
+    unsigned char firstbyte;
+
+    BFINAL = (i == numdeflateblocks - 1);
+    BTYPE = 0;
+
+    firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1));
+    ucvector_push_back(out, firstbyte);
+
+    LEN = 65535;
+    if(datasize - datapos < 65535) LEN = (unsigned)datasize - datapos;
+    NLEN = 65535 - LEN;
+
+    ucvector_push_back(out, (unsigned char)(LEN & 255));
+    ucvector_push_back(out, (unsigned char)(LEN >> 8));
+    ucvector_push_back(out, (unsigned char)(NLEN & 255));
+    ucvector_push_back(out, (unsigned char)(NLEN >> 8));
+
+    /*Decompressed data*/
+    for(j = 0; j < 65535 && datapos < datasize; ++j)
+    {
+      ucvector_push_back(out, data[datapos++]);
+    }
+  }
+
+  return 0;
+}
+
+/*
+write the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees.
+tree_ll: the tree for lit and len codes.
+tree_d: the tree for distance codes.
+*/
+static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded,
+                          const HuffmanTree* tree_ll, const HuffmanTree* tree_d)
+{
+  size_t i = 0;
+  for(i = 0; i != lz77_encoded->size; ++i)
+  {
+    unsigned val = lz77_encoded->data[i];
+    addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val));
+    if(val > 256) /*for a length code, 3 more things have to be added*/
+    {
+      unsigned length_index = val - FIRST_LENGTH_CODE_INDEX;
+      unsigned n_length_extra_bits = LENGTHEXTRA[length_index];
+      unsigned length_extra_bits = lz77_encoded->data[++i];
+
+      unsigned distance_code = lz77_encoded->data[++i];
+
+      unsigned distance_index = distance_code;
+      unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index];
+      unsigned distance_extra_bits = lz77_encoded->data[++i];
+
+      addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits);
+      addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code),
+                       HuffmanTree_getLength(tree_d, distance_code));
+      addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits);
+    }
+  }
+}
+
+/*Deflate for a block of type "dynamic", that is, with freely, optimally, created huffman trees*/
+static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
+                               const unsigned char* data, size_t datapos, size_t dataend,
+                               const LodePNGCompressSettings* settings, unsigned final)
+{
+  unsigned error = 0;
+
+  /*
+  A block is compressed as follows: The PNG data is lz77 encoded, resulting in
+  literal bytes and length/distance pairs. This is then huffman compressed with
+  two huffman trees. One huffman tree is used for the lit and len values ("ll"),
+  another huffman tree is used for the dist values ("d"). These two trees are
+  stored using their code lengths, and to compress even more these code lengths
+  are also run-length encoded and huffman compressed. This gives a huffman tree
+  of code lengths "cl". The code lenghts used to describe this third tree are
+  the code length code lengths ("clcl").
+  */
+
+  /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/
+  uivector lz77_encoded;
+  HuffmanTree tree_ll; /*tree for lit,len values*/
+  HuffmanTree tree_d; /*tree for distance codes*/
+  HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/
+  uivector frequencies_ll; /*frequency of lit,len codes*/
+  uivector frequencies_d; /*frequency of dist codes*/
+  uivector frequencies_cl; /*frequency of code length codes*/
+  uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/
+  uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/
+  /*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl
+  (these are written as is in the file, it would be crazy to compress these using yet another huffman
+  tree that needs to be represented by yet another set of code lengths)*/
+  uivector bitlen_cl;
+  size_t datasize = dataend - datapos;
+
+  /*
+  Due to the huffman compression of huffman tree representations ("two levels"), there are some anologies:
+  bitlen_lld is to tree_cl what data is to tree_ll and tree_d.
+  bitlen_lld_e is to bitlen_lld what lz77_encoded is to data.
+  bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded.
+  */
+
+  unsigned BFINAL = final;
+  size_t numcodes_ll, numcodes_d, i;
+  unsigned HLIT, HDIST, HCLEN;
+
+  uivector_init(&lz77_encoded);
+  HuffmanTree_init(&tree_ll);
+  HuffmanTree_init(&tree_d);
+  HuffmanTree_init(&tree_cl);
+  uivector_init(&frequencies_ll);
+  uivector_init(&frequencies_d);
+  uivector_init(&frequencies_cl);
+  uivector_init(&bitlen_lld);
+  uivector_init(&bitlen_lld_e);
+  uivector_init(&bitlen_cl);
+
+  /*This while loop never loops due to a break at the end, it is here to
+  allow breaking out of it to the cleanup phase on error conditions.*/
+  while(!error)
+  {
+    if(settings->use_lz77)
+    {
+      error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize,
+                         settings->minmatch, settings->nicematch, settings->lazymatching);
+      if(error) break;
+    }
+    else
+    {
+      if(!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/);
+      for(i = datapos; i < dataend; ++i) lz77_encoded.data[i - datapos] = data[i]; /*no LZ77, but still will be Huffman compressed*/
+    }
+
+    if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83 /*alloc fail*/);
+    if(!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(83 /*alloc fail*/);
+
+    /*Count the frequencies of lit, len and dist codes*/
+    for(i = 0; i != lz77_encoded.size; ++i)
+    {
+      unsigned symbol = lz77_encoded.data[i];
+      ++frequencies_ll.data[symbol];
+      if(symbol > 256)
+      {
+        unsigned dist = lz77_encoded.data[i + 2];
+        ++frequencies_d.data[dist];
+        i += 3;
+      }
+    }
+    frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/
+
+    /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/
+    error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, 257, frequencies_ll.size, 15);
+    if(error) break;
+    /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/
+    error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, 2, frequencies_d.size, 15);
+    if(error) break;
+
+    numcodes_ll = tree_ll.numcodes; if(numcodes_ll > 286) numcodes_ll = 286;
+    numcodes_d = tree_d.numcodes; if(numcodes_d > 30) numcodes_d = 30;
+    /*store the code lengths of both generated trees in bitlen_lld*/
+    for(i = 0; i != numcodes_ll; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i));
+    for(i = 0; i != numcodes_d; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i));
+
+    /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times),
+    17 (3-10 zeroes), 18 (11-138 zeroes)*/
+    for(i = 0; i != (unsigned)bitlen_lld.size; ++i)
+    {
+      unsigned j = 0; /*amount of repititions*/
+      while(i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) ++j;
+
+      if(bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/
+      {
+        ++j; /*include the first zero*/
+        if(j <= 10) /*repeat code 17 supports max 10 zeroes*/
+        {
+          uivector_push_back(&bitlen_lld_e, 17);
+          uivector_push_back(&bitlen_lld_e, j - 3);
+        }
+        else /*repeat code 18 supports max 138 zeroes*/
+        {
+          if(j > 138) j = 138;
+          uivector_push_back(&bitlen_lld_e, 18);
+          uivector_push_back(&bitlen_lld_e, j - 11);
+        }
+        i += (j - 1);
+      }
+      else if(j >= 3) /*repeat code for value other than zero*/
+      {
+        size_t k;
+        unsigned num = j / 6, rest = j % 6;
+        uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]);
+        for(k = 0; k < num; ++k)
+        {
+          uivector_push_back(&bitlen_lld_e, 16);
+          uivector_push_back(&bitlen_lld_e, 6 - 3);
+        }
+        if(rest >= 3)
+        {
+          uivector_push_back(&bitlen_lld_e, 16);
+          uivector_push_back(&bitlen_lld_e, rest - 3);
+        }
+        else j -= rest;
+        i += j;
+      }
+      else /*too short to benefit from repeat code*/
+      {
+        uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]);
+      }
+    }
+
+    /*generate tree_cl, the huffmantree of huffmantrees*/
+
+    if(!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(83 /*alloc fail*/);
+    for(i = 0; i != bitlen_lld_e.size; ++i)
+    {
+      ++frequencies_cl.data[bitlen_lld_e.data[i]];
+      /*after a repeat code come the bits that specify the number of repetitions,
+      those don't need to be in the frequencies_cl calculation*/
+      if(bitlen_lld_e.data[i] >= 16) ++i;
+    }
+
+    error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data,
+                                            frequencies_cl.size, frequencies_cl.size, 7);
+    if(error) break;
+
+    if(!uivector_resize(&bitlen_cl, tree_cl.numcodes)) ERROR_BREAK(83 /*alloc fail*/);
+    for(i = 0; i != tree_cl.numcodes; ++i)
+    {
+      /*lenghts of code length tree is in the order as specified by deflate*/
+      bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]);
+    }
+    while(bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4)
+    {
+      /*remove zeros at the end, but minimum size must be 4*/
+      if(!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(83 /*alloc fail*/);
+    }
+    if(error) break;
+
+    /*
+    Write everything into the output
+
+    After the BFINAL and BTYPE, the dynamic block consists out of the following:
+    - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN
+    - (HCLEN+4)*3 bits code lengths of code length alphabet
+    - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length
+      alphabet, + possible repetition codes 16, 17, 18)
+    - HDIST + 1 code lengths of distance alphabet (encoded using the code length
+      alphabet, + possible repetition codes 16, 17, 18)
+    - compressed data
+    - 256 (end code)
+    */
+
+    /*Write block type*/
+    addBitToStream(bp, out, BFINAL);
+    addBitToStream(bp, out, 0); /*first bit of BTYPE "dynamic"*/
+    addBitToStream(bp, out, 1); /*second bit of BTYPE "dynamic"*/
+
+    /*write the HLIT, HDIST and HCLEN values*/
+    HLIT = (unsigned)(numcodes_ll - 257);
+    HDIST = (unsigned)(numcodes_d - 1);
+    HCLEN = (unsigned)bitlen_cl.size - 4;
+    /*trim zeroes for HCLEN. HLIT and HDIST were already trimmed at tree creation*/
+    while(!bitlen_cl.data[HCLEN + 4 - 1] && HCLEN > 0) --HCLEN;
+    addBitsToStream(bp, out, HLIT, 5);
+    addBitsToStream(bp, out, HDIST, 5);
+    addBitsToStream(bp, out, HCLEN, 4);
+
+    /*write the code lenghts of the code length alphabet*/
+    for(i = 0; i != HCLEN + 4; ++i) addBitsToStream(bp, out, bitlen_cl.data[i], 3);
+
+    /*write the lenghts of the lit/len AND the dist alphabet*/
+    for(i = 0; i != bitlen_lld_e.size; ++i)
+    {
+      addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]),
+                       HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i]));
+      /*extra bits of repeat codes*/
+      if(bitlen_lld_e.data[i] == 16) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 2);
+      else if(bitlen_lld_e.data[i] == 17) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 3);
+      else if(bitlen_lld_e.data[i] == 18) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 7);
+    }
+
+    /*write the compressed data symbols*/
+    writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d);
+    /*error: the length of the end code 256 must be larger than 0*/
+    if(HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64);
+
+    /*write the end code*/
+    addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256));
+
+    break; /*end of error-while*/
+  }
+
+  /*cleanup*/
+  uivector_cleanup(&lz77_encoded);
+  HuffmanTree_cleanup(&tree_ll);
+  HuffmanTree_cleanup(&tree_d);
+  HuffmanTree_cleanup(&tree_cl);
+  uivector_cleanup(&frequencies_ll);
+  uivector_cleanup(&frequencies_d);
+  uivector_cleanup(&frequencies_cl);
+  uivector_cleanup(&bitlen_lld_e);
+  uivector_cleanup(&bitlen_lld);
+  uivector_cleanup(&bitlen_cl);
+
+  return error;
+}
+
+static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash,
+                             const unsigned char* data,
+                             size_t datapos, size_t dataend,
+                             const LodePNGCompressSettings* settings, unsigned final)
+{
+  HuffmanTree tree_ll; /*tree for literal values and length codes*/
+  HuffmanTree tree_d; /*tree for distance codes*/
+
+  unsigned BFINAL = final;
+  unsigned error = 0;
+  size_t i;
+
+  HuffmanTree_init(&tree_ll);
+  HuffmanTree_init(&tree_d);
+
+  generateFixedLitLenTree(&tree_ll);
+  generateFixedDistanceTree(&tree_d);
+
+  addBitToStream(bp, out, BFINAL);
+  addBitToStream(bp, out, 1); /*first bit of BTYPE*/
+  addBitToStream(bp, out, 0); /*second bit of BTYPE*/
+
+  if(settings->use_lz77) /*LZ77 encoded*/
+  {
+    uivector lz77_encoded;
+    uivector_init(&lz77_encoded);
+    error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize,
+                       settings->minmatch, settings->nicematch, settings->lazymatching);
+    if(!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d);
+    uivector_cleanup(&lz77_encoded);
+  }
+  else /*no LZ77, but still will be Huffman compressed*/
+  {
+    for(i = datapos; i < dataend; ++i)
+    {
+      addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i]));
+    }
+  }
+  /*add END code*/
+  if(!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256));
+
+  /*cleanup*/
+  HuffmanTree_cleanup(&tree_ll);
+  HuffmanTree_cleanup(&tree_d);
+
+  return error;
+}
+
+static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize,
+                                 const LodePNGCompressSettings* settings)
+{
+  unsigned error = 0;
+  size_t i, blocksize, numdeflateblocks;
+  size_t bp = 0; /*the bit pointer*/
+  Hash hash;
+
+  if(settings->btype > 2) return 61;
+  else if(settings->btype == 0) return deflateNoCompression(out, in, insize);
+  else if(settings->btype == 1) blocksize = insize;
+  else /*if(settings->btype == 2)*/
+  {
+    /*on PNGs, deflate blocks of 65-262k seem to give most dense encoding*/
+    blocksize = insize / 8 + 8;
+    if(blocksize < 65536) blocksize = 65536;
+    if(blocksize > 262144) blocksize = 262144;
+  }
+
+  numdeflateblocks = (insize + blocksize - 1) / blocksize;
+  if(numdeflateblocks == 0) numdeflateblocks = 1;
+
+  error = hash_init(&hash, settings->windowsize);
+  if(error) return error;
+
+  for(i = 0; i != numdeflateblocks && !error; ++i)
+  {
+    unsigned final = (i == numdeflateblocks - 1);
+    size_t start = i * blocksize;
+    size_t end = start + blocksize;
+    if(end > insize) end = insize;
+
+    if(settings->btype == 1) error = deflateFixed(out, &bp, &hash, in, start, end, settings, final);
+    else if(settings->btype == 2) error = deflateDynamic(out, &bp, &hash, in, start, end, settings, final);
+  }
+
+  hash_cleanup(&hash);
+
+  return error;
+}
+
+unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
+                         const unsigned char* in, size_t insize,
+                         const LodePNGCompressSettings* settings)
+{
+  unsigned error;
+  ucvector v;
+  ucvector_init_buffer(&v, *out, *outsize);
+  error = lodepng_deflatev(&v, in, insize, settings);
+  *out = v.data;
+  *outsize = v.size;
+  return error;
+}
+
+static unsigned deflate(unsigned char** out, size_t* outsize,
+                        const unsigned char* in, size_t insize,
+                        const LodePNGCompressSettings* settings)
+{
+  if(settings->custom_deflate)
+  {
+    return settings->custom_deflate(out, outsize, in, insize, settings);
+  }
+  else
+  {
+    return lodepng_deflate(out, outsize, in, insize, settings);
+  }
+}
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Adler32                                                                  */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len)
+{
+   unsigned s1 = adler & 0xffff;
+   unsigned s2 = (adler >> 16) & 0xffff;
+
+  while(len > 0)
+  {
+    /*at least 5550 sums can be done before the sums overflow, saving a lot of module divisions*/
+    unsigned amount = len > 5550 ? 5550 : len;
+    len -= amount;
+    while(amount > 0)
+    {
+      s1 += (*data++);
+      s2 += s1;
+      --amount;
+    }
+    s1 %= 65521;
+    s2 %= 65521;
+  }
+
+  return (s2 << 16) | s1;
+}
+
+/*Return the adler32 of the bytes data[0..len-1]*/
+static unsigned adler32(const unsigned char* data, unsigned len)
+{
+  return update_adler32(1L, data, len);
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Zlib                                                                   / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                                 size_t insize, const LodePNGDecompressSettings* settings)
+{
+  unsigned error = 0;
+  unsigned CM, CINFO, FDICT;
+
+  if(insize < 2) return 53; /*error, size of zlib data too small*/
+  /*read information from zlib header*/
+  if((in[0] * 256 + in[1]) % 31 != 0)
+  {
+    /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/
+    return 24;
+  }
+
+  CM = in[0] & 15;
+  CINFO = (in[0] >> 4) & 15;
+  /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/
+  FDICT = (in[1] >> 5) & 1;
+  /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/
+
+  if(CM != 8 || CINFO > 7)
+  {
+    /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/
+    return 25;
+  }
+  if(FDICT != 0)
+  {
+    /*error: the specification of PNG says about the zlib stream:
+      "The additional flags shall not specify a preset dictionary."*/
+    return 26;
+  }
+
+  error = inflate(out, outsize, in + 2, insize - 2, settings);
+  if(error) return error;
+
+  if(!settings->ignore_adler32)
+  {
+    unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]);
+    unsigned checksum = adler32(*out, (unsigned)(*outsize));
+    if(checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/
+  }
+
+  return 0; /*no error*/
+}
+
+static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                                size_t insize, const LodePNGDecompressSettings* settings)
+{
+  if(settings->custom_zlib)
+  {
+    return settings->custom_zlib(out, outsize, in, insize, settings);
+  }
+  else
+  {
+    return lodepng_zlib_decompress(out, outsize, in, insize, settings);
+  }
+}
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                               size_t insize, const LodePNGCompressSettings* settings)
+{
+  /*initially, *out must be NULL and outsize 0, if you just give some random *out
+  that's pointing to a non allocated buffer, this'll crash*/
+  ucvector outv;
+  size_t i;
+  unsigned error;
+  unsigned char* deflatedata = 0;
+  size_t deflatesize = 0;
+
+  /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/
+  unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/
+  unsigned FLEVEL = 0;
+  unsigned FDICT = 0;
+  unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64;
+  unsigned FCHECK = 31 - CMFFLG % 31;
+  CMFFLG += FCHECK;
+
+  /*ucvector-controlled version of the output buffer, for dynamic array*/
+  ucvector_init_buffer(&outv, *out, *outsize);
+
+  ucvector_push_back(&outv, (unsigned char)(CMFFLG >> 8));
+  ucvector_push_back(&outv, (unsigned char)(CMFFLG & 255));
+
+  error = deflate(&deflatedata, &deflatesize, in, insize, settings);
+
+  if(!error)
+  {
+    unsigned ADLER32 = adler32(in, (unsigned)insize);
+    for(i = 0; i != deflatesize; ++i) ucvector_push_back(&outv, deflatedata[i]);
+    lodepng_free(deflatedata);
+    lodepng_add32bitInt(&outv, ADLER32);
+  }
+
+  *out = outv.data;
+  *outsize = outv.size;
+
+  return error;
+}
+
+/* compress using the default or custom zlib function */
+static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                              size_t insize, const LodePNGCompressSettings* settings)
+{
+  if(settings->custom_zlib)
+  {
+    return settings->custom_zlib(out, outsize, in, insize, settings);
+  }
+  else
+  {
+    return lodepng_zlib_compress(out, outsize, in, insize, settings);
+  }
+}
+
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#else /*no LODEPNG_COMPILE_ZLIB*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                                size_t insize, const LodePNGDecompressSettings* settings)
+{
+  if(!settings->custom_zlib) return 87; /*no custom zlib function provided */
+  return settings->custom_zlib(out, outsize, in, insize, settings);
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+#ifdef LODEPNG_COMPILE_ENCODER
+static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                              size_t insize, const LodePNGCompressSettings* settings)
+{
+  if(!settings->custom_zlib) return 87; /*no custom zlib function provided */
+  return settings->custom_zlib(out, outsize, in, insize, settings);
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#endif /*LODEPNG_COMPILE_ZLIB*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+/*this is a good tradeoff between speed and compression ratio*/
+#define DEFAULT_WINDOWSIZE 2048
+
+void lodepng_compress_settings_init(LodePNGCompressSettings* settings)
+{
+  /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/
+  settings->btype = 2;
+  settings->use_lz77 = 1;
+  settings->windowsize = DEFAULT_WINDOWSIZE;
+  settings->minmatch = 3;
+  settings->nicematch = 128;
+  settings->lazymatching = 1;
+
+  settings->custom_zlib = 0;
+  settings->custom_deflate = 0;
+  settings->custom_context = 0;
+}
+
+const LodePNGCompressSettings lodepng_default_compress_settings = {2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0};
+
+
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings)
+{
+  settings->ignore_adler32 = 0;
+
+  settings->custom_zlib = 0;
+  settings->custom_inflate = 0;
+  settings->custom_context = 0;
+}
+
+const LodePNGDecompressSettings lodepng_default_decompress_settings = {0, 0, 0, 0};
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* // End of Zlib related code. Begin of PNG related code.                 // */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_PNG
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / CRC32                                                                  / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+
+#ifndef LODEPNG_NO_COMPILE_CRC
+/* CRC polynomial: 0xedb88320 */
+static unsigned lodepng_crc32_table[256] = {
+           0u, 1996959894u, 3993919788u, 2567524794u,  124634137u, 1886057615u, 3915621685u, 2657392035u,
+   249268274u, 2044508324u, 3772115230u, 2547177864u,  162941995u, 2125561021u, 3887607047u, 2428444049u,
+   498536548u, 1789927666u, 4089016648u, 2227061214u,  450548861u, 1843258603u, 4107580753u, 2211677639u,
+   325883990u, 1684777152u, 4251122042u, 2321926636u,  335633487u, 1661365465u, 4195302755u, 2366115317u,
+   997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u,
+   901097722u, 1119000684u, 3686517206u, 2898065728u,  853044451u, 1172266101u, 3705015759u, 2882616665u,
+   651767980u, 1373503546u, 3369554304u, 3218104598u,  565507253u, 1454621731u, 3485111705u, 3099436303u,
+   671266974u, 1594198024u, 3322730930u, 2970347812u,  795835527u, 1483230225u, 3244367275u, 3060149565u,
+  1994146192u,   31158534u, 2563907772u, 4023717930u, 1907459465u,  112637215u, 2680153253u, 3904427059u,
+  2013776290u,  251722036u, 2517215374u, 3775830040u, 2137656763u,  141376813u, 2439277719u, 3865271297u,
+  1802195444u,  476864866u, 2238001368u, 4066508878u, 1812370925u,  453092731u, 2181625025u, 4111451223u,
+  1706088902u,  314042704u, 2344532202u, 4240017532u, 1658658271u,  366619977u, 2362670323u, 4224994405u,
+  1303535960u,  984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u,
+  1131014506u,  879679996u, 2909243462u, 3663771856u, 1141124467u,  855842277u, 2852801631u, 3708648649u,
+  1342533948u,  654459306u, 3188396048u, 3373015174u, 1466479909u,  544179635u, 3110523913u, 3462522015u,
+  1591671054u,  702138776u, 2966460450u, 3352799412u, 1504918807u,  783551873u, 3082640443u, 3233442989u,
+  3988292384u, 2596254646u,   62317068u, 1957810842u, 3939845945u, 2647816111u,   81470997u, 1943803523u,
+  3814918930u, 2489596804u,  225274430u, 2053790376u, 3826175755u, 2466906013u,  167816743u, 2097651377u,
+  4027552580u, 2265490386u,  503444072u, 1762050814u, 4150417245u, 2154129355u,  426522225u, 1852507879u,
+  4275313526u, 2312317920u,  282753626u, 1742555852u, 4189708143u, 2394877945u,  397917763u, 1622183637u,
+  3604390888u, 2714866558u,  953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u,
+  3624741850u, 2936675148u,  906185462u, 1090812512u, 3747672003u, 2825379669u,  829329135u, 1181335161u,
+  3412177804u, 3160834842u,  628085408u, 1382605366u, 3423369109u, 3138078467u,  570562233u, 1426400815u,
+  3317316542u, 2998733608u,  733239954u, 1555261956u, 3268935591u, 3050360625u,  752459403u, 1541320221u,
+  2607071920u, 3965973030u, 1969922972u,   40735498u, 2617837225u, 3943577151u, 1913087877u,   83908371u,
+  2512341634u, 3803740692u, 2075208622u,  213261112u, 2463272603u, 3855990285u, 2094854071u,  198958881u,
+  2262029012u, 4057260610u, 1759359992u,  534414190u, 2176718541u, 4139329115u, 1873836001u,  414664567u,
+  2282248934u, 4279200368u, 1711684554u,  285281116u, 2405801727u, 4167216745u, 1634467795u,  376229701u,
+  2685067896u, 3608007406u, 1308918612u,  956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u,
+  2932959818u, 3654703836u, 1088359270u,  936918000u, 2847714899u, 3736837829u, 1202900863u,  817233897u,
+  3183342108u, 3401237130u, 1404277552u,  615818150u, 3134207493u, 3453421203u, 1423857449u,  601450431u,
+  3009837614u, 3294710456u, 1567103746u,  711928724u, 3020668471u, 3272380065u, 1510334235u,  755167117u
+};
+
+/*Return the CRC of the bytes buf[0..len-1].*/
+unsigned lodepng_crc32(const unsigned char* data, size_t length)
+{
+  unsigned r = 0xffffffffu;
+  size_t i;
+  for(i = 0; i < length; ++i)
+  {
+    r = lodepng_crc32_table[(r ^ data[i]) & 0xff] ^ (r >> 8);
+  }
+  return r ^ 0xffffffffu;
+}
+#else /* !LODEPNG_NO_COMPILE_CRC */
+unsigned lodepng_crc32(const unsigned char* data, size_t length);
+#endif /* !LODEPNG_NO_COMPILE_CRC */
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Reading and writing single bits and bytes from/to stream for LodePNG   / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream)
+{
+  unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1);
+  ++(*bitpointer);
+  return result;
+}
+
+static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits)
+{
+  unsigned result = 0;
+  size_t i;
+  for(i = 0 ; i < nbits; ++i)
+  {
+    result <<= 1;
+    result |= (unsigned)readBitFromReversedStream(bitpointer, bitstream);
+  }
+  return result;
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit)
+{
+  /*the current bit in bitstream must be 0 for this to work*/
+  if(bit)
+  {
+    /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/
+    bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7)));
+  }
+  ++(*bitpointer);
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit)
+{
+  /*the current bit in bitstream may be 0 or 1 for this to work*/
+  if(bit == 0) bitstream[(*bitpointer) >> 3] &=  (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7))));
+  else         bitstream[(*bitpointer) >> 3] |=  (1 << (7 - ((*bitpointer) & 0x7)));
+  ++(*bitpointer);
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / PNG chunks                                                             / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+unsigned lodepng_chunk_length(const unsigned char* chunk)
+{
+  return lodepng_read32bitInt(&chunk[0]);
+}
+
+void lodepng_chunk_type(char type[5], const unsigned char* chunk)
+{
+  unsigned i;
+  for(i = 0; i != 4; ++i) type[i] = (char)chunk[4 + i];
+  type[4] = 0; /*null termination char*/
+}
+
+unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type)
+{
+  if(strlen(type) != 4) return 0;
+  return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]);
+}
+
+unsigned char lodepng_chunk_ancillary(const unsigned char* chunk)
+{
+  return((chunk[4] & 32) != 0);
+}
+
+unsigned char lodepng_chunk_private(const unsigned char* chunk)
+{
+  return((chunk[6] & 32) != 0);
+}
+
+unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk)
+{
+  return((chunk[7] & 32) != 0);
+}
+
+unsigned char* lodepng_chunk_data(unsigned char* chunk)
+{
+  return &chunk[8];
+}
+
+const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk)
+{
+  return &chunk[8];
+}
+
+unsigned lodepng_chunk_check_crc(const unsigned char* chunk)
+{
+  unsigned length = lodepng_chunk_length(chunk);
+  unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]);
+  /*the CRC is taken of the data and the 4 chunk type letters, not the length*/
+  unsigned checksum = lodepng_crc32(&chunk[4], length + 4);
+  if(CRC != checksum) return 1;
+  else return 0;
+}
+
+void lodepng_chunk_generate_crc(unsigned char* chunk)
+{
+  unsigned length = lodepng_chunk_length(chunk);
+  unsigned CRC = lodepng_crc32(&chunk[4], length + 4);
+  lodepng_set32bitInt(chunk + 8 + length, CRC);
+}
+
+unsigned char* lodepng_chunk_next(unsigned char* chunk)
+{
+  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;
+  return &chunk[total_chunk_length];
+}
+
+const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk)
+{
+  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;
+  return &chunk[total_chunk_length];
+}
+
+unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk)
+{
+  unsigned i;
+  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;
+  unsigned char *chunk_start, *new_buffer;
+  size_t new_length = (*outlength) + total_chunk_length;
+  if(new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/
+
+  new_buffer = (unsigned char*)lodepng_realloc(*out, new_length);
+  if(!new_buffer) return 83; /*alloc fail*/
+  (*out) = new_buffer;
+  (*outlength) = new_length;
+  chunk_start = &(*out)[new_length - total_chunk_length];
+
+  for(i = 0; i != total_chunk_length; ++i) chunk_start[i] = chunk[i];
+
+  return 0;
+}
+
+unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
+                              const char* type, const unsigned char* data)
+{
+  unsigned i;
+  unsigned char *chunk, *new_buffer;
+  size_t new_length = (*outlength) + length + 12;
+  if(new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/
+  new_buffer = (unsigned char*)lodepng_realloc(*out, new_length);
+  if(!new_buffer) return 83; /*alloc fail*/
+  (*out) = new_buffer;
+  (*outlength) = new_length;
+  chunk = &(*out)[(*outlength) - length - 12];
+
+  /*1: length*/
+  lodepng_set32bitInt(chunk, (unsigned)length);
+
+  /*2: chunk name (4 letters)*/
+  chunk[4] = (unsigned char)type[0];
+  chunk[5] = (unsigned char)type[1];
+  chunk[6] = (unsigned char)type[2];
+  chunk[7] = (unsigned char)type[3];
+
+  /*3: the data*/
+  for(i = 0; i != length; ++i) chunk[8 + i] = data[i];
+
+  /*4: CRC (of the chunkname characters and the data)*/
+  lodepng_chunk_generate_crc(chunk);
+
+  return 0;
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Color types and such                                                   / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*return type is a LodePNG error code*/
+static unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) /*bd = bitdepth*/
+{
+  switch(colortype)
+  {
+    case 0: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/
+    case 2: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*RGB*/
+    case 3: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8            )) return 37; break; /*palette*/
+    case 4: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/
+    case 6: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*RGBA*/
+    default: return 31;
+  }
+  return 0; /*allowed color type / bits combination*/
+}
+
+static unsigned getNumColorChannels(LodePNGColorType colortype)
+{
+  switch(colortype)
+  {
+    case 0: return 1; /*grey*/
+    case 2: return 3; /*RGB*/
+    case 3: return 1; /*palette*/
+    case 4: return 2; /*grey + alpha*/
+    case 6: return 4; /*RGBA*/
+  }
+  return 0; /*unexisting color type*/
+}
+
+static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth)
+{
+  /*bits per pixel is amount of channels * bits per channel*/
+  return getNumColorChannels(colortype) * bitdepth;
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+void lodepng_color_mode_init(LodePNGColorMode* info)
+{
+  info->key_defined = 0;
+  info->key_r = info->key_g = info->key_b = 0;
+  info->colortype = LCT_RGBA;
+  info->bitdepth = 8;
+  info->palette = 0;
+  info->palettesize = 0;
+}
+
+void lodepng_color_mode_cleanup(LodePNGColorMode* info)
+{
+  lodepng_palette_clear(info);
+}
+
+unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source)
+{
+  size_t i;
+  lodepng_color_mode_cleanup(dest);
+  *dest = *source;
+  if(source->palette)
+  {
+    dest->palette = (unsigned char*)lodepng_malloc(1024);
+    if(!dest->palette && source->palettesize) return 83; /*alloc fail*/
+    for(i = 0; i != source->palettesize * 4; ++i) dest->palette[i] = source->palette[i];
+  }
+  return 0;
+}
+
+static int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b)
+{
+  size_t i;
+  if(a->colortype != b->colortype) return 0;
+  if(a->bitdepth != b->bitdepth) return 0;
+  if(a->key_defined != b->key_defined) return 0;
+  if(a->key_defined)
+  {
+    if(a->key_r != b->key_r) return 0;
+    if(a->key_g != b->key_g) return 0;
+    if(a->key_b != b->key_b) return 0;
+  }
+  /*if one of the palette sizes is 0, then we consider it to be the same as the
+  other: it means that e.g. the palette was not given by the user and should be
+  considered the same as the palette inside the PNG.*/
+  if(1/*a->palettesize != 0 && b->palettesize != 0*/) {
+    if(a->palettesize != b->palettesize) return 0;
+    for(i = 0; i != a->palettesize * 4; ++i)
+    {
+      if(a->palette[i] != b->palette[i]) return 0;
+    }
+  }
+  return 1;
+}
+
+void lodepng_palette_clear(LodePNGColorMode* info)
+{
+  if(info->palette) lodepng_free(info->palette);
+  info->palette = 0;
+  info->palettesize = 0;
+}
+
+unsigned lodepng_palette_add(LodePNGColorMode* info,
+                             unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+  unsigned char* data;
+  /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with
+  the max of 256 colors, it'll have the exact alloc size*/
+  if(!info->palette) /*allocate palette if empty*/
+  {
+    /*room for 256 colors with 4 bytes each*/
+    data = (unsigned char*)lodepng_realloc(info->palette, 1024);
+    if(!data) return 83; /*alloc fail*/
+    else info->palette = data;
+  }
+  info->palette[4 * info->palettesize + 0] = r;
+  info->palette[4 * info->palettesize + 1] = g;
+  info->palette[4 * info->palettesize + 2] = b;
+  info->palette[4 * info->palettesize + 3] = a;
+  ++info->palettesize;
+  return 0;
+}
+
+unsigned lodepng_get_bpp(const LodePNGColorMode* info)
+{
+  /*calculate bits per pixel out of colortype and bitdepth*/
+  return lodepng_get_bpp_lct(info->colortype, info->bitdepth);
+}
+
+unsigned lodepng_get_channels(const LodePNGColorMode* info)
+{
+  return getNumColorChannels(info->colortype);
+}
+
+unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info)
+{
+  return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA;
+}
+
+unsigned lodepng_is_alpha_type(const LodePNGColorMode* info)
+{
+  return (info->colortype & 4) != 0; /*4 or 6*/
+}
+
+unsigned lodepng_is_palette_type(const LodePNGColorMode* info)
+{
+  return info->colortype == LCT_PALETTE;
+}
+
+unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info)
+{
+  size_t i;
+  for(i = 0; i != info->palettesize; ++i)
+  {
+    if(info->palette[i * 4 + 3] < 255) return 1;
+  }
+  return 0;
+}
+
+unsigned lodepng_can_have_alpha(const LodePNGColorMode* info)
+{
+  return info->key_defined
+      || lodepng_is_alpha_type(info)
+      || lodepng_has_palette_alpha(info);
+}
+
+size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color)
+{
+  /*will not overflow for any color type if roughly w * h < 268435455*/
+  size_t bpp = lodepng_get_bpp(color);
+  size_t n = w * h;
+  return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8;
+}
+
+size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth)
+{
+  /*will not overflow for any color type if roughly w * h < 268435455*/
+  size_t bpp = lodepng_get_bpp_lct(colortype, bitdepth);
+  size_t n = w * h;
+  return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8;
+}
+
+
+#ifdef LODEPNG_COMPILE_PNG
+#ifdef LODEPNG_COMPILE_DECODER
+/*in an idat chunk, each scanline is a multiple of 8 bits, unlike the lodepng output buffer*/
+static size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const LodePNGColorMode* color)
+{
+  /*will not overflow for any color type if roughly w * h < 268435455*/
+  size_t bpp = lodepng_get_bpp(color);
+  size_t line = ((w / 8) * bpp) + ((w & 7) * bpp + 7) / 8;
+  return h * line;
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+
+static void LodePNGUnknownChunks_init(LodePNGInfo* info)
+{
+  unsigned i;
+  for(i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0;
+  for(i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0;
+}
+
+static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info)
+{
+  unsigned i;
+  for(i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]);
+}
+
+static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src)
+{
+  unsigned i;
+
+  LodePNGUnknownChunks_cleanup(dest);
+
+  for(i = 0; i != 3; ++i)
+  {
+    size_t j;
+    dest->unknown_chunks_size[i] = src->unknown_chunks_size[i];
+    dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]);
+    if(!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/
+    for(j = 0; j < src->unknown_chunks_size[i]; ++j)
+    {
+      dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j];
+    }
+  }
+
+  return 0;
+}
+
+/******************************************************************************/
+
+static void LodePNGText_init(LodePNGInfo* info)
+{
+  info->text_num = 0;
+  info->text_keys = NULL;
+  info->text_strings = NULL;
+}
+
+static void LodePNGText_cleanup(LodePNGInfo* info)
+{
+  size_t i;
+  for(i = 0; i != info->text_num; ++i)
+  {
+    string_cleanup(&info->text_keys[i]);
+    string_cleanup(&info->text_strings[i]);
+  }
+  lodepng_free(info->text_keys);
+  lodepng_free(info->text_strings);
+}
+
+static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source)
+{
+  size_t i = 0;
+  dest->text_keys = 0;
+  dest->text_strings = 0;
+  dest->text_num = 0;
+  for(i = 0; i != source->text_num; ++i)
+  {
+    CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i]));
+  }
+  return 0;
+}
+
+void lodepng_clear_text(LodePNGInfo* info)
+{
+  LodePNGText_cleanup(info);
+}
+
+unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str)
+{
+  char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1)));
+  char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1)));
+  if(!new_keys || !new_strings)
+  {
+    lodepng_free(new_keys);
+    lodepng_free(new_strings);
+    return 83; /*alloc fail*/
+  }
+
+  ++info->text_num;
+  info->text_keys = new_keys;
+  info->text_strings = new_strings;
+
+  string_init(&info->text_keys[info->text_num - 1]);
+  string_set(&info->text_keys[info->text_num - 1], key);
+
+  string_init(&info->text_strings[info->text_num - 1]);
+  string_set(&info->text_strings[info->text_num - 1], str);
+
+  return 0;
+}
+
+/******************************************************************************/
+
+static void LodePNGIText_init(LodePNGInfo* info)
+{
+  info->itext_num = 0;
+  info->itext_keys = NULL;
+  info->itext_langtags = NULL;
+  info->itext_transkeys = NULL;
+  info->itext_strings = NULL;
+}
+
+static void LodePNGIText_cleanup(LodePNGInfo* info)
+{
+  size_t i;
+  for(i = 0; i != info->itext_num; ++i)
+  {
+    string_cleanup(&info->itext_keys[i]);
+    string_cleanup(&info->itext_langtags[i]);
+    string_cleanup(&info->itext_transkeys[i]);
+    string_cleanup(&info->itext_strings[i]);
+  }
+  lodepng_free(info->itext_keys);
+  lodepng_free(info->itext_langtags);
+  lodepng_free(info->itext_transkeys);
+  lodepng_free(info->itext_strings);
+}
+
+static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source)
+{
+  size_t i = 0;
+  dest->itext_keys = 0;
+  dest->itext_langtags = 0;
+  dest->itext_transkeys = 0;
+  dest->itext_strings = 0;
+  dest->itext_num = 0;
+  for(i = 0; i != source->itext_num; ++i)
+  {
+    CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i],
+                                        source->itext_transkeys[i], source->itext_strings[i]));
+  }
+  return 0;
+}
+
+void lodepng_clear_itext(LodePNGInfo* info)
+{
+  LodePNGIText_cleanup(info);
+}
+
+unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,
+                           const char* transkey, const char* str)
+{
+  char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1)));
+  char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1)));
+  char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1)));
+  char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1)));
+  if(!new_keys || !new_langtags || !new_transkeys || !new_strings)
+  {
+    lodepng_free(new_keys);
+    lodepng_free(new_langtags);
+    lodepng_free(new_transkeys);
+    lodepng_free(new_strings);
+    return 83; /*alloc fail*/
+  }
+
+  ++info->itext_num;
+  info->itext_keys = new_keys;
+  info->itext_langtags = new_langtags;
+  info->itext_transkeys = new_transkeys;
+  info->itext_strings = new_strings;
+
+  string_init(&info->itext_keys[info->itext_num - 1]);
+  string_set(&info->itext_keys[info->itext_num - 1], key);
+
+  string_init(&info->itext_langtags[info->itext_num - 1]);
+  string_set(&info->itext_langtags[info->itext_num - 1], langtag);
+
+  string_init(&info->itext_transkeys[info->itext_num - 1]);
+  string_set(&info->itext_transkeys[info->itext_num - 1], transkey);
+
+  string_init(&info->itext_strings[info->itext_num - 1]);
+  string_set(&info->itext_strings[info->itext_num - 1], str);
+
+  return 0;
+}
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+void lodepng_info_init(LodePNGInfo* info)
+{
+  lodepng_color_mode_init(&info->color);
+  info->interlace_method = 0;
+  info->compression_method = 0;
+  info->filter_method = 0;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  info->background_defined = 0;
+  info->background_r = info->background_g = info->background_b = 0;
+
+  LodePNGText_init(info);
+  LodePNGIText_init(info);
+
+  info->time_defined = 0;
+  info->phys_defined = 0;
+
+  LodePNGUnknownChunks_init(info);
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+}
+
+void lodepng_info_cleanup(LodePNGInfo* info)
+{
+  lodepng_color_mode_cleanup(&info->color);
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  LodePNGText_cleanup(info);
+  LodePNGIText_cleanup(info);
+
+  LodePNGUnknownChunks_cleanup(info);
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+}
+
+unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source)
+{
+  lodepng_info_cleanup(dest);
+  *dest = *source;
+  lodepng_color_mode_init(&dest->color);
+  CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color));
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  CERROR_TRY_RETURN(LodePNGText_copy(dest, source));
+  CERROR_TRY_RETURN(LodePNGIText_copy(dest, source));
+
+  LodePNGUnknownChunks_init(dest);
+  CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source));
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+  return 0;
+}
+
+void lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b)
+{
+  LodePNGInfo temp = *a;
+  *a = *b;
+  *b = temp;
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/
+static void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in)
+{
+  unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/
+  /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/
+  unsigned p = index & m;
+  in &= (1u << bits) - 1u; /*filter out any other bits of the input value*/
+  in = in << (bits * (m - p));
+  if(p == 0) out[index * bits / 8] = in;
+  else out[index * bits / 8] |= in;
+}
+
+typedef struct ColorTree ColorTree;
+
+/*
+One node of a color tree
+This is the data structure used to count the number of unique colors and to get a palette
+index for a color. It's like an octree, but because the alpha channel is used too, each
+node has 16 instead of 8 children.
+*/
+struct ColorTree
+{
+  ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/
+  int index; /*the payload. Only has a meaningful value if this is in the last level*/
+};
+
+static void color_tree_init(ColorTree* tree)
+{
+  int i;
+  for(i = 0; i != 16; ++i) tree->children[i] = 0;
+  tree->index = -1;
+}
+
+static void color_tree_cleanup(ColorTree* tree)
+{
+  int i;
+  for(i = 0; i != 16; ++i)
+  {
+    if(tree->children[i])
+    {
+      color_tree_cleanup(tree->children[i]);
+      lodepng_free(tree->children[i]);
+    }
+  }
+}
+
+/*returns -1 if color not present, its index otherwise*/
+static int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+  int bit = 0;
+  for(bit = 0; bit < 8; ++bit)
+  {
+    int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1);
+    if(!tree->children[i]) return -1;
+    else tree = tree->children[i];
+  }
+  return tree ? tree->index : -1;
+}
+
+#ifdef LODEPNG_COMPILE_ENCODER
+static int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+  return color_tree_get(tree, r, g, b, a) >= 0;
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+/*color is not allowed to already exist.
+Index should be >= 0 (it's signed to be compatible with using -1 for "doesn't exist")*/
+static void color_tree_add(ColorTree* tree,
+                           unsigned char r, unsigned char g, unsigned char b, unsigned char a, unsigned index)
+{
+  int bit;
+  for(bit = 0; bit < 8; ++bit)
+  {
+    int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1);
+    if(!tree->children[i])
+    {
+      tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree));
+      color_tree_init(tree->children[i]);
+    }
+    tree = tree->children[i];
+  }
+  tree->index = (int)index;
+}
+
+/*put a pixel, given its RGBA color, into image of any color type*/
+static unsigned rgba8ToPixel(unsigned char* out, size_t i,
+                             const LodePNGColorMode* mode, ColorTree* tree /*for palette*/,
+                             unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+  if(mode->colortype == LCT_GREY)
+  {
+    unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/;
+    if(mode->bitdepth == 8) out[i] = grey;
+    else if(mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = grey;
+    else
+    {
+      /*take the most significant bits of grey*/
+      grey = (grey >> (8 - mode->bitdepth)) & ((1 << mode->bitdepth) - 1);
+      addColorBits(out, i, mode->bitdepth, grey);
+    }
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    if(mode->bitdepth == 8)
+    {
+      out[i * 3 + 0] = r;
+      out[i * 3 + 1] = g;
+      out[i * 3 + 2] = b;
+    }
+    else
+    {
+      out[i * 6 + 0] = out[i * 6 + 1] = r;
+      out[i * 6 + 2] = out[i * 6 + 3] = g;
+      out[i * 6 + 4] = out[i * 6 + 5] = b;
+    }
+  }
+  else if(mode->colortype == LCT_PALETTE)
+  {
+    int index = color_tree_get(tree, r, g, b, a);
+    if(index < 0) return 82; /*color not in palette*/
+    if(mode->bitdepth == 8) out[i] = index;
+    else addColorBits(out, i, mode->bitdepth, (unsigned)index);
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/;
+    if(mode->bitdepth == 8)
+    {
+      out[i * 2 + 0] = grey;
+      out[i * 2 + 1] = a;
+    }
+    else if(mode->bitdepth == 16)
+    {
+      out[i * 4 + 0] = out[i * 4 + 1] = grey;
+      out[i * 4 + 2] = out[i * 4 + 3] = a;
+    }
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      out[i * 4 + 0] = r;
+      out[i * 4 + 1] = g;
+      out[i * 4 + 2] = b;
+      out[i * 4 + 3] = a;
+    }
+    else
+    {
+      out[i * 8 + 0] = out[i * 8 + 1] = r;
+      out[i * 8 + 2] = out[i * 8 + 3] = g;
+      out[i * 8 + 4] = out[i * 8 + 5] = b;
+      out[i * 8 + 6] = out[i * 8 + 7] = a;
+    }
+  }
+
+  return 0; /*no error*/
+}
+
+/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/
+static void rgba16ToPixel(unsigned char* out, size_t i,
+                         const LodePNGColorMode* mode,
+                         unsigned short r, unsigned short g, unsigned short b, unsigned short a)
+{
+  if(mode->colortype == LCT_GREY)
+  {
+    unsigned short grey = r; /*((unsigned)r + g + b) / 3*/;
+    out[i * 2 + 0] = (grey >> 8) & 255;
+    out[i * 2 + 1] = grey & 255;
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    out[i * 6 + 0] = (r >> 8) & 255;
+    out[i * 6 + 1] = r & 255;
+    out[i * 6 + 2] = (g >> 8) & 255;
+    out[i * 6 + 3] = g & 255;
+    out[i * 6 + 4] = (b >> 8) & 255;
+    out[i * 6 + 5] = b & 255;
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    unsigned short grey = r; /*((unsigned)r + g + b) / 3*/;
+    out[i * 4 + 0] = (grey >> 8) & 255;
+    out[i * 4 + 1] = grey & 255;
+    out[i * 4 + 2] = (a >> 8) & 255;
+    out[i * 4 + 3] = a & 255;
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    out[i * 8 + 0] = (r >> 8) & 255;
+    out[i * 8 + 1] = r & 255;
+    out[i * 8 + 2] = (g >> 8) & 255;
+    out[i * 8 + 3] = g & 255;
+    out[i * 8 + 4] = (b >> 8) & 255;
+    out[i * 8 + 5] = b & 255;
+    out[i * 8 + 6] = (a >> 8) & 255;
+    out[i * 8 + 7] = a & 255;
+  }
+}
+
+/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/
+static void getPixelColorRGBA8(unsigned char* r, unsigned char* g,
+                               unsigned char* b, unsigned char* a,
+                               const unsigned char* in, size_t i,
+                               const LodePNGColorMode* mode)
+{
+  if(mode->colortype == LCT_GREY)
+  {
+    if(mode->bitdepth == 8)
+    {
+      *r = *g = *b = in[i];
+      if(mode->key_defined && *r == mode->key_r) *a = 0;
+      else *a = 255;
+    }
+    else if(mode->bitdepth == 16)
+    {
+      *r = *g = *b = in[i * 2 + 0];
+      if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0;
+      else *a = 255;
+    }
+    else
+    {
+      unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/
+      size_t j = i * mode->bitdepth;
+      unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth);
+      *r = *g = *b = (value * 255) / highest;
+      if(mode->key_defined && value == mode->key_r) *a = 0;
+      else *a = 255;
+    }
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    if(mode->bitdepth == 8)
+    {
+      *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2];
+      if(mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0;
+      else *a = 255;
+    }
+    else
+    {
+      *r = in[i * 6 + 0];
+      *g = in[i * 6 + 2];
+      *b = in[i * 6 + 4];
+      if(mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r
+         && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g
+         && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0;
+      else *a = 255;
+    }
+  }
+  else if(mode->colortype == LCT_PALETTE)
+  {
+    unsigned index;
+    if(mode->bitdepth == 8) index = in[i];
+    else
+    {
+      size_t j = i * mode->bitdepth;
+      index = readBitsFromReversedStream(&j, in, mode->bitdepth);
+    }
+
+    if(index >= mode->palettesize)
+    {
+      /*This is an error according to the PNG spec, but common PNG decoders make it black instead.
+      Done here too, slightly faster due to no error handling needed.*/
+      *r = *g = *b = 0;
+      *a = 255;
+    }
+    else
+    {
+      *r = mode->palette[index * 4 + 0];
+      *g = mode->palette[index * 4 + 1];
+      *b = mode->palette[index * 4 + 2];
+      *a = mode->palette[index * 4 + 3];
+    }
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      *r = *g = *b = in[i * 2 + 0];
+      *a = in[i * 2 + 1];
+    }
+    else
+    {
+      *r = *g = *b = in[i * 4 + 0];
+      *a = in[i * 4 + 2];
+    }
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      *r = in[i * 4 + 0];
+      *g = in[i * 4 + 1];
+      *b = in[i * 4 + 2];
+      *a = in[i * 4 + 3];
+    }
+    else
+    {
+      *r = in[i * 8 + 0];
+      *g = in[i * 8 + 2];
+      *b = in[i * 8 + 4];
+      *a = in[i * 8 + 6];
+    }
+  }
+}
+
+/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color
+mode test cases, optimized to convert the colors much faster, when converting
+to RGBA or RGB with 8 bit per cannel. buffer must be RGBA or RGB output with
+enough memory, if has_alpha is true the output is RGBA. mode has the color mode
+of the input buffer.*/
+static void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels,
+                                unsigned has_alpha, const unsigned char* in,
+                                const LodePNGColorMode* mode)
+{
+  unsigned num_channels = has_alpha ? 4 : 3;
+  size_t i;
+  if(mode->colortype == LCT_GREY)
+  {
+    if(mode->bitdepth == 8)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = buffer[1] = buffer[2] = in[i];
+        if(has_alpha) buffer[3] = mode->key_defined && in[i] == mode->key_r ? 0 : 255;
+      }
+    }
+    else if(mode->bitdepth == 16)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = buffer[1] = buffer[2] = in[i * 2];
+        if(has_alpha) buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255;
+      }
+    }
+    else
+    {
+      unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/
+      size_t j = 0;
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth);
+        buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest;
+        if(has_alpha) buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255;
+      }
+    }
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    if(mode->bitdepth == 8)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = in[i * 3 + 0];
+        buffer[1] = in[i * 3 + 1];
+        buffer[2] = in[i * 3 + 2];
+        if(has_alpha) buffer[3] = mode->key_defined && buffer[0] == mode->key_r
+           && buffer[1]== mode->key_g && buffer[2] == mode->key_b ? 0 : 255;
+      }
+    }
+    else
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = in[i * 6 + 0];
+        buffer[1] = in[i * 6 + 2];
+        buffer[2] = in[i * 6 + 4];
+        if(has_alpha) buffer[3] = mode->key_defined
+           && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r
+           && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g
+           && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255;
+      }
+    }
+  }
+  else if(mode->colortype == LCT_PALETTE)
+  {
+    unsigned index;
+    size_t j = 0;
+    for(i = 0; i != numpixels; ++i, buffer += num_channels)
+    {
+      if(mode->bitdepth == 8) index = in[i];
+      else index = readBitsFromReversedStream(&j, in, mode->bitdepth);
+
+      if(index >= mode->palettesize)
+      {
+        /*This is an error according to the PNG spec, but most PNG decoders make it black instead.
+        Done here too, slightly faster due to no error handling needed.*/
+        buffer[0] = buffer[1] = buffer[2] = 0;
+        if(has_alpha) buffer[3] = 255;
+      }
+      else
+      {
+        buffer[0] = mode->palette[index * 4 + 0];
+        buffer[1] = mode->palette[index * 4 + 1];
+        buffer[2] = mode->palette[index * 4 + 2];
+        if(has_alpha) buffer[3] = mode->palette[index * 4 + 3];
+      }
+    }
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0];
+        if(has_alpha) buffer[3] = in[i * 2 + 1];
+      }
+    }
+    else
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0];
+        if(has_alpha) buffer[3] = in[i * 4 + 2];
+      }
+    }
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = in[i * 4 + 0];
+        buffer[1] = in[i * 4 + 1];
+        buffer[2] = in[i * 4 + 2];
+        if(has_alpha) buffer[3] = in[i * 4 + 3];
+      }
+    }
+    else
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = in[i * 8 + 0];
+        buffer[1] = in[i * 8 + 2];
+        buffer[2] = in[i * 8 + 4];
+        if(has_alpha) buffer[3] = in[i * 8 + 6];
+      }
+    }
+  }
+}
+
+/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with
+given color type, but the given color type must be 16-bit itself.*/
+static void getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a,
+                                const unsigned char* in, size_t i, const LodePNGColorMode* mode)
+{
+  if(mode->colortype == LCT_GREY)
+  {
+    *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1];
+    if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0;
+    else *a = 65535;
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    *r = 256u * in[i * 6 + 0] + in[i * 6 + 1];
+    *g = 256u * in[i * 6 + 2] + in[i * 6 + 3];
+    *b = 256u * in[i * 6 + 4] + in[i * 6 + 5];
+    if(mode->key_defined
+       && 256u * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r
+       && 256u * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g
+       && 256u * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0;
+    else *a = 65535;
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    *r = *g = *b = 256u * in[i * 4 + 0] + in[i * 4 + 1];
+    *a = 256u * in[i * 4 + 2] + in[i * 4 + 3];
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    *r = 256u * in[i * 8 + 0] + in[i * 8 + 1];
+    *g = 256u * in[i * 8 + 2] + in[i * 8 + 3];
+    *b = 256u * in[i * 8 + 4] + in[i * 8 + 5];
+    *a = 256u * in[i * 8 + 6] + in[i * 8 + 7];
+  }
+}
+
+unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
+                         const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
+                         unsigned w, unsigned h)
+{
+  size_t i;
+  ColorTree tree;
+  size_t numpixels = w * h;
+
+  if(lodepng_color_mode_equal(mode_out, mode_in))
+  {
+    size_t numbytes = lodepng_get_raw_size(w, h, mode_in);
+    for(i = 0; i != numbytes; ++i) out[i] = in[i];
+    return 0;
+  }
+
+  if(mode_out->colortype == LCT_PALETTE)
+  {
+    size_t palettesize = mode_out->palettesize;
+    const unsigned char* palette = mode_out->palette;
+    size_t palsize = 1u << mode_out->bitdepth;
+    /*if the user specified output palette but did not give the values, assume
+    they want the values of the input color type (assuming that one is palette).
+    Note that we never create a new palette ourselves.*/
+    if(palettesize == 0)
+    {
+      palettesize = mode_in->palettesize;
+      palette = mode_in->palette;
+    }
+    if(palettesize < palsize) palsize = palettesize;
+    color_tree_init(&tree);
+    for(i = 0; i != palsize; ++i)
+    {
+      const unsigned char* p = &palette[i * 4];
+      color_tree_add(&tree, p[0], p[1], p[2], p[3], i);
+    }
+  }
+
+  if(mode_in->bitdepth == 16 && mode_out->bitdepth == 16)
+  {
+    for(i = 0; i != numpixels; ++i)
+    {
+      unsigned short r = 0, g = 0, b = 0, a = 0;
+      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in);
+      rgba16ToPixel(out, i, mode_out, r, g, b, a);
+    }
+  }
+  else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA)
+  {
+    getPixelColorsRGBA8(out, numpixels, 1, in, mode_in);
+  }
+  else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB)
+  {
+    getPixelColorsRGBA8(out, numpixels, 0, in, mode_in);
+  }
+  else
+  {
+    unsigned char r = 0, g = 0, b = 0, a = 0;
+    for(i = 0; i != numpixels; ++i)
+    {
+      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in);
+      CERROR_TRY_RETURN(rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a));
+    }
+  }
+
+  if(mode_out->colortype == LCT_PALETTE)
+  {
+    color_tree_cleanup(&tree);
+  }
+
+  return 0; /*no error*/
+}
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+void lodepng_color_profile_init(LodePNGColorProfile* profile)
+{
+  profile->colored = 0;
+  profile->key = 0;
+  profile->key_r = profile->key_g = profile->key_b = 0;
+  profile->alpha = 0;
+  profile->numcolors = 0;
+  profile->bits = 1;
+}
+
+/*function used for debug purposes with C++*/
+/*void printColorProfile(LodePNGColorProfile* p)
+{
+  std::cout << "colored: " << (int)p->colored << ", ";
+  std::cout << "key: " << (int)p->key << ", ";
+  std::cout << "key_r: " << (int)p->key_r << ", ";
+  std::cout << "key_g: " << (int)p->key_g << ", ";
+  std::cout << "key_b: " << (int)p->key_b << ", ";
+  std::cout << "alpha: " << (int)p->alpha << ", ";
+  std::cout << "numcolors: " << (int)p->numcolors << ", ";
+  std::cout << "bits: " << (int)p->bits << std::endl;
+}*/
+
+/*Returns how many bits needed to represent given value (max 8 bit)*/
+static unsigned getValueRequiredBits(unsigned char value)
+{
+  if(value == 0 || value == 255) return 1;
+  /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/
+  if(value % 17 == 0) return value % 85 == 0 ? 2 : 4;
+  return 8;
+}
+
+/*profile must already have been inited with mode.
+It's ok to set some parameters of profile to done already.*/
+unsigned lodepng_get_color_profile(LodePNGColorProfile* profile,
+                                   const unsigned char* in, unsigned w, unsigned h,
+                                   const LodePNGColorMode* mode)
+{
+  unsigned error = 0;
+  size_t i;
+  ColorTree tree;
+  size_t numpixels = w * h;
+
+  unsigned colored_done = lodepng_is_greyscale_type(mode) ? 1 : 0;
+  unsigned alpha_done = lodepng_can_have_alpha(mode) ? 0 : 1;
+  unsigned numcolors_done = 0;
+  unsigned bpp = lodepng_get_bpp(mode);
+  unsigned bits_done = bpp == 1 ? 1 : 0;
+  unsigned maxnumcolors = 257;
+  unsigned sixteen = 0;
+  if(bpp <= 8) maxnumcolors = bpp == 1 ? 2 : (bpp == 2 ? 4 : (bpp == 4 ? 16 : 256));
+
+  color_tree_init(&tree);
+
+  /*Check if the 16-bit input is truly 16-bit*/
+  if(mode->bitdepth == 16)
+  {
+    unsigned short r, g, b, a;
+    for(i = 0; i != numpixels; ++i)
+    {
+      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);
+      if((r & 255) != ((r >> 8) & 255) || (g & 255) != ((g >> 8) & 255) ||
+         (b & 255) != ((b >> 8) & 255) || (a & 255) != ((a >> 8) & 255)) /*first and second byte differ*/
+      {
+        sixteen = 1;
+        break;
+      }
+    }
+  }
+
+  if(sixteen)
+  {
+    unsigned short r = 0, g = 0, b = 0, a = 0;
+    profile->bits = 16;
+    bits_done = numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/
+
+    for(i = 0; i != numpixels; ++i)
+    {
+      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);
+
+      if(!colored_done && (r != g || r != b))
+      {
+        profile->colored = 1;
+        colored_done = 1;
+      }
+
+      if(!alpha_done)
+      {
+        unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b);
+        if(a != 65535 && (a != 0 || (profile->key && !matchkey)))
+        {
+          profile->alpha = 1;
+          profile->key = 0;
+          alpha_done = 1;
+        }
+        else if(a == 0 && !profile->alpha && !profile->key)
+        {
+          profile->key = 1;
+          profile->key_r = r;
+          profile->key_g = g;
+          profile->key_b = b;
+        }
+        else if(a == 65535 && profile->key && matchkey)
+        {
+          /* Color key cannot be used if an opaque pixel also has that RGB color. */
+          profile->alpha = 1;
+          profile->key = 0;
+          alpha_done = 1;
+        }
+      }
+      if(alpha_done && numcolors_done && colored_done && bits_done) break;
+    }
+
+    if(profile->key && !profile->alpha)
+    {
+      for(i = 0; i != numpixels; ++i)
+      {
+        getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);
+        if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b)
+        {
+          /* Color key cannot be used if an opaque pixel also has that RGB color. */
+          profile->alpha = 1;
+          profile->key = 0;
+          alpha_done = 1;
+        }
+      }
+    }
+  }
+  else /* < 16-bit */
+  {
+    unsigned char r = 0, g = 0, b = 0, a = 0;
+    for(i = 0; i != numpixels; ++i)
+    {
+      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode);
+
+      if(!bits_done && profile->bits < 8)
+      {
+        /*only r is checked, < 8 bits is only relevant for greyscale*/
+        unsigned bits = getValueRequiredBits(r);
+        if(bits > profile->bits) profile->bits = bits;
+      }
+      bits_done = (profile->bits >= bpp);
+
+      if(!colored_done && (r != g || r != b))
+      {
+        profile->colored = 1;
+        colored_done = 1;
+        if(profile->bits < 8) profile->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/
+      }
+
+      if(!alpha_done)
+      {
+        unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b);
+        if(a != 255 && (a != 0 || (profile->key && !matchkey)))
+        {
+          profile->alpha = 1;
+          profile->key = 0;
+          alpha_done = 1;
+          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
+        }
+        else if(a == 0 && !profile->alpha && !profile->key)
+        {
+          profile->key = 1;
+          profile->key_r = r;
+          profile->key_g = g;
+          profile->key_b = b;
+        }
+        else if(a == 255 && profile->key && matchkey)
+        {
+          /* Color key cannot be used if an opaque pixel also has that RGB color. */
+          profile->alpha = 1;
+          profile->key = 0;
+          alpha_done = 1;
+          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
+        }
+      }
+
+      if(!numcolors_done)
+      {
+        if(!color_tree_has(&tree, r, g, b, a))
+        {
+          color_tree_add(&tree, r, g, b, a, profile->numcolors);
+          if(profile->numcolors < 256)
+          {
+            unsigned char* p = profile->palette;
+            unsigned n = profile->numcolors;
+            p[n * 4 + 0] = r;
+            p[n * 4 + 1] = g;
+            p[n * 4 + 2] = b;
+            p[n * 4 + 3] = a;
+          }
+          ++profile->numcolors;
+          numcolors_done = profile->numcolors >= maxnumcolors;
+        }
+      }
+
+      if(alpha_done && numcolors_done && colored_done && bits_done) break;
+    }
+
+    if(profile->key && !profile->alpha)
+    {
+      for(i = 0; i != numpixels; ++i)
+      {
+        getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode);
+        if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b)
+        {
+          /* Color key cannot be used if an opaque pixel also has that RGB color. */
+          profile->alpha = 1;
+          profile->key = 0;
+          alpha_done = 1;
+          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
+        }
+      }
+    }
+
+    /*make the profile's key always 16-bit for consistency - repeat each byte twice*/
+    profile->key_r += (profile->key_r << 8);
+    profile->key_g += (profile->key_g << 8);
+    profile->key_b += (profile->key_b << 8);
+  }
+
+  color_tree_cleanup(&tree);
+  return error;
+}
+
+/*Automatically chooses color type that gives smallest amount of bits in the
+output image, e.g. grey if there are only greyscale pixels, palette if there
+are less than 256 colors, ...
+Updates values of mode with a potentially smaller color model. mode_out should
+contain the user chosen color model, but will be overwritten with the new chosen one.*/
+unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
+                                   const unsigned char* image, unsigned w, unsigned h,
+                                   const LodePNGColorMode* mode_in)
+{
+  LodePNGColorProfile prof;
+  unsigned error = 0;
+  unsigned i, n, palettebits, palette_ok;
+
+  lodepng_color_profile_init(&prof);
+  error = lodepng_get_color_profile(&prof, image, w, h, mode_in);
+  if(error) return error;
+  mode_out->key_defined = 0;
+
+  if(prof.key && w * h <= 16)
+  {
+    prof.alpha = 1; /*too few pixels to justify tRNS chunk overhead*/
+    prof.key = 0;
+    if(prof.bits < 8) prof.bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
+  }
+  n = prof.numcolors;
+  palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8));
+  palette_ok = n <= 256 && prof.bits <= 8;
+  if(w * h < n * 2) palette_ok = 0; /*don't add palette overhead if image has only a few pixels*/
+  if(!prof.colored && prof.bits <= palettebits) palette_ok = 0; /*grey is less overhead*/
+
+  if(palette_ok)
+  {
+    unsigned char* p = prof.palette;
+    lodepng_palette_clear(mode_out); /*remove potential earlier palette*/
+    for(i = 0; i != prof.numcolors; ++i)
+    {
+      error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]);
+      if(error) break;
+    }
+
+    mode_out->colortype = LCT_PALETTE;
+    mode_out->bitdepth = palettebits;
+
+    if(mode_in->colortype == LCT_PALETTE && mode_in->palettesize >= mode_out->palettesize
+        && mode_in->bitdepth == mode_out->bitdepth)
+    {
+      /*If input should have same palette colors, keep original to preserve its order and prevent conversion*/
+      lodepng_color_mode_cleanup(mode_out);
+      lodepng_color_mode_copy(mode_out, mode_in);
+    }
+  }
+  else /*8-bit or 16-bit per channel*/
+  {
+    mode_out->bitdepth = prof.bits;
+    mode_out->colortype = prof.alpha ? (prof.colored ? LCT_RGBA : LCT_GREY_ALPHA)
+                                     : (prof.colored ? LCT_RGB : LCT_GREY);
+
+    if(prof.key)
+    {
+      unsigned mask = (1u << mode_out->bitdepth) - 1u; /*profile always uses 16-bit, mask converts it*/
+      mode_out->key_r = prof.key_r & mask;
+      mode_out->key_g = prof.key_g & mask;
+      mode_out->key_b = prof.key_b & mask;
+      mode_out->key_defined = 1;
+    }
+  }
+
+  return error;
+}
+
+#endif /* #ifdef LODEPNG_COMPILE_ENCODER */
+
+/*
+Paeth predicter, used by PNG filter type 4
+The parameters are of type short, but should come from unsigned chars, the shorts
+are only needed to make the paeth calculation correct.
+*/
+static unsigned char paethPredictor(short a, short b, short c)
+{
+  short pa = abs(b - c);
+  short pb = abs(a - c);
+  short pc = abs(a + b - c - c);
+
+  if(pc < pa && pc < pb) return (unsigned char)c;
+  else if(pb < pa) return (unsigned char)b;
+  else return (unsigned char)a;
+}
+
+/*shared values used by multiple Adam7 related functions*/
+
+static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/
+static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/
+static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/
+static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/
+
+/*
+Outputs various dimensions and positions in the image related to the Adam7 reduced images.
+passw: output containing the width of the 7 passes
+passh: output containing the height of the 7 passes
+filter_passstart: output containing the index of the start and end of each
+ reduced image with filter bytes
+padded_passstart output containing the index of the start and end of each
+ reduced image when without filter bytes but with padded scanlines
+passstart: output containing the index of the start and end of each reduced
+ image without padding between scanlines, but still padding between the images
+w, h: width and height of non-interlaced image
+bpp: bits per pixel
+"padded" is only relevant if bpp is less than 8 and a scanline or image does not
+ end at a full byte
+*/
+static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8],
+                                size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp)
+{
+  /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/
+  unsigned i;
+
+  /*calculate width and height in pixels of each pass*/
+  for(i = 0; i != 7; ++i)
+  {
+    passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i];
+    passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i];
+    if(passw[i] == 0) passh[i] = 0;
+    if(passh[i] == 0) passw[i] = 0;
+  }
+
+  filter_passstart[0] = padded_passstart[0] = passstart[0] = 0;
+  for(i = 0; i != 7; ++i)
+  {
+    /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/
+    filter_passstart[i + 1] = filter_passstart[i]
+                            + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0);
+    /*bits padded if needed to fill full byte at end of each scanline*/
+    padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8);
+    /*only padded at end of reduced image*/
+    passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8;
+  }
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / PNG Decoder                                                            / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*read the information from the header and store it in the LodePNGInfo. return value is error*/
+unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state,
+                         const unsigned char* in, size_t insize)
+{
+  LodePNGInfo* info = &state->info_png;
+  if(insize == 0 || in == 0)
+  {
+    CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/
+  }
+  if(insize < 33)
+  {
+    CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/
+  }
+
+  /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/
+  lodepng_info_cleanup(info);
+  lodepng_info_init(info);
+
+  if(in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71
+     || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10)
+  {
+    CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/
+  }
+  if(lodepng_chunk_length(in + 8) != 13)
+  {
+    CERROR_RETURN_ERROR(state->error, 94); /*error: header size must be 13 bytes*/
+  }
+  if(!lodepng_chunk_type_equals(in + 8, "IHDR"))
+  {
+    CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/
+  }
+
+  /*read the values given in the header*/
+  *w = lodepng_read32bitInt(&in[16]);
+  *h = lodepng_read32bitInt(&in[20]);
+  info->color.bitdepth = in[24];
+  info->color.colortype = (LodePNGColorType)in[25];
+  info->compression_method = in[26];
+  info->filter_method = in[27];
+  info->interlace_method = in[28];
+
+  if(*w == 0 || *h == 0)
+  {
+    CERROR_RETURN_ERROR(state->error, 93);
+  }
+
+  if(!state->decoder.ignore_crc)
+  {
+    unsigned CRC = lodepng_read32bitInt(&in[29]);
+    unsigned checksum = lodepng_crc32(&in[12], 17);
+    if(CRC != checksum)
+    {
+      CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/
+    }
+  }
+
+  /*error: only compression method 0 is allowed in the specification*/
+  if(info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32);
+  /*error: only filter method 0 is allowed in the specification*/
+  if(info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33);
+  /*error: only interlace methods 0 and 1 exist in the specification*/
+  if(info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34);
+
+  state->error = checkColorValidity(info->color.colortype, info->color.bitdepth);
+  return state->error;
+}
+
+static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon,
+                                 size_t bytewidth, unsigned char filterType, size_t length)
+{
+  /*
+  For PNG filter method 0
+  unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte,
+  the filter works byte per byte (bytewidth = 1)
+  precon is the previous unfiltered scanline, recon the result, scanline the current one
+  the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead
+  recon and scanline MAY be the same memory address! precon must be disjoint.
+  */
+
+  size_t i;
+  switch(filterType)
+  {
+    case 0:
+      for(i = 0; i != length; ++i) recon[i] = scanline[i];
+      break;
+    case 1:
+      for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i];
+      for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth];
+      break;
+    case 2:
+      if(precon)
+      {
+        for(i = 0; i != length; ++i) recon[i] = scanline[i] + precon[i];
+      }
+      else
+      {
+        for(i = 0; i != length; ++i) recon[i] = scanline[i];
+      }
+      break;
+    case 3:
+      if(precon)
+      {
+        for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i] + (precon[i] >> 1);
+        for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) >> 1);
+      }
+      else
+      {
+        for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i];
+        for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + (recon[i - bytewidth] >> 1);
+      }
+      break;
+    case 4:
+      if(precon)
+      {
+        for(i = 0; i != bytewidth; ++i)
+        {
+          recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/
+        }
+        for(i = bytewidth; i < length; ++i)
+        {
+          recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth]));
+        }
+      }
+      else
+      {
+        for(i = 0; i != bytewidth; ++i)
+        {
+          recon[i] = scanline[i];
+        }
+        for(i = bytewidth; i < length; ++i)
+        {
+          /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/
+          recon[i] = (scanline[i] + recon[i - bytewidth]);
+        }
+      }
+      break;
+    default: return 36; /*error: unexisting filter type given*/
+  }
+  return 0;
+}
+
+static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)
+{
+  /*
+  For PNG filter method 0
+  this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times)
+  out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline
+  w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel
+  in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes)
+  */
+
+  unsigned y;
+  unsigned char* prevline = 0;
+
+  /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/
+  size_t bytewidth = (bpp + 7) / 8;
+  size_t linebytes = (w * bpp + 7) / 8;
+
+  for(y = 0; y < h; ++y)
+  {
+    size_t outindex = linebytes * y;
+    size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
+    unsigned char filterType = in[inindex];
+
+    CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes));
+
+    prevline = &out[outindex];
+  }
+
+  return 0;
+}
+
+/*
+in: Adam7 interlaced image, with no padding bits between scanlines, but between
+ reduced images so that each reduced image starts at a byte.
+out: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h
+bpp: bits per pixel
+out has the following size in bits: w * h * bpp.
+in is possibly bigger due to padding bits between reduced images.
+out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation
+(because that's likely a little bit faster)
+NOTE: comments about padding bits are only relevant if bpp < 8
+*/
+static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)
+{
+  unsigned passw[7], passh[7];
+  size_t filter_passstart[8], padded_passstart[8], passstart[8];
+  unsigned i;
+
+  Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
+
+  if(bpp >= 8)
+  {
+    for(i = 0; i != 7; ++i)
+    {
+      unsigned x, y, b;
+      size_t bytewidth = bpp / 8;
+      for(y = 0; y < passh[i]; ++y)
+      for(x = 0; x < passw[i]; ++x)
+      {
+        size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth;
+        size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;
+        for(b = 0; b < bytewidth; ++b)
+        {
+          out[pixeloutstart + b] = in[pixelinstart + b];
+        }
+      }
+    }
+  }
+  else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/
+  {
+    for(i = 0; i != 7; ++i)
+    {
+      unsigned x, y, b;
+      unsigned ilinebits = bpp * passw[i];
+      unsigned olinebits = bpp * w;
+      size_t obp, ibp; /*bit pointers (for out and in buffer)*/
+      for(y = 0; y < passh[i]; ++y)
+      for(x = 0; x < passw[i]; ++x)
+      {
+        ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp);
+        obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;
+        for(b = 0; b < bpp; ++b)
+        {
+          unsigned char bit = readBitFromReversedStream(&ibp, in);
+          /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/
+          setBitOfReversedStream0(&obp, out, bit);
+        }
+      }
+    }
+  }
+}
+
+static void removePaddingBits(unsigned char* out, const unsigned char* in,
+                              size_t olinebits, size_t ilinebits, unsigned h)
+{
+  /*
+  After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need
+  to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers
+  for the Adam7 code, the color convert code and the output to the user.
+  in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must
+  have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits
+  also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7
+  only useful if (ilinebits - olinebits) is a value in the range 1..7
+  */
+  unsigned y;
+  size_t diff = ilinebits - olinebits;
+  size_t ibp = 0, obp = 0; /*input and output bit pointers*/
+  for(y = 0; y < h; ++y)
+  {
+    size_t x;
+    for(x = 0; x < olinebits; ++x)
+    {
+      unsigned char bit = readBitFromReversedStream(&ibp, in);
+      setBitOfReversedStream(&obp, out, bit);
+    }
+    ibp += diff;
+  }
+}
+
+/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from
+the IDAT chunks (with filter index bytes and possible padding bits)
+return value is error*/
+static unsigned postProcessScanlines(unsigned char* out, unsigned char* in,
+                                     unsigned w, unsigned h, const LodePNGInfo* info_png)
+{
+  /*
+  This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype.
+  Steps:
+  *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8)
+  *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace
+  NOTE: the in buffer will be overwritten with intermediate data!
+  */
+  unsigned bpp = lodepng_get_bpp(&info_png->color);
+  if(bpp == 0) return 31; /*error: invalid colortype*/
+
+  if(info_png->interlace_method == 0)
+  {
+    if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8)
+    {
+      CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp));
+      removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h);
+    }
+    /*we can immediately filter into the out buffer, no other steps needed*/
+    else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp));
+  }
+  else /*interlace_method is 1 (Adam7)*/
+  {
+    unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8];
+    unsigned i;
+
+    Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
+
+    for(i = 0; i != 7; ++i)
+    {
+      CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp));
+      /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline,
+      move bytes instead of bits or move not at all*/
+      if(bpp < 8)
+      {
+        /*remove padding bits in scanlines; after this there still may be padding
+        bits between the different reduced images: each reduced image still starts nicely at a byte*/
+        removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp,
+                          ((passw[i] * bpp + 7) / 8) * 8, passh[i]);
+      }
+    }
+
+    Adam7_deinterlace(out, in, w, h, bpp);
+  }
+
+  return 0;
+}
+
+static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength)
+{
+  unsigned pos = 0, i;
+  if(color->palette) lodepng_free(color->palette);
+  color->palettesize = chunkLength / 3;
+  color->palette = (unsigned char*)lodepng_malloc(4 * color->palettesize);
+  if(!color->palette && color->palettesize)
+  {
+    color->palettesize = 0;
+    return 83; /*alloc fail*/
+  }
+  if(color->palettesize > 256) return 38; /*error: palette too big*/
+
+  for(i = 0; i != color->palettesize; ++i)
+  {
+    color->palette[4 * i + 0] = data[pos++]; /*R*/
+    color->palette[4 * i + 1] = data[pos++]; /*G*/
+    color->palette[4 * i + 2] = data[pos++]; /*B*/
+    color->palette[4 * i + 3] = 255; /*alpha*/
+  }
+
+  return 0; /* OK */
+}
+
+static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength)
+{
+  unsigned i;
+  if(color->colortype == LCT_PALETTE)
+  {
+    /*error: more alpha values given than there are palette entries*/
+    if(chunkLength > color->palettesize) return 38;
+
+    for(i = 0; i != chunkLength; ++i) color->palette[4 * i + 3] = data[i];
+  }
+  else if(color->colortype == LCT_GREY)
+  {
+    /*error: this chunk must be 2 bytes for greyscale image*/
+    if(chunkLength != 2) return 30;
+
+    color->key_defined = 1;
+    color->key_r = color->key_g = color->key_b = 256u * data[0] + data[1];
+  }
+  else if(color->colortype == LCT_RGB)
+  {
+    /*error: this chunk must be 6 bytes for RGB image*/
+    if(chunkLength != 6) return 41;
+
+    color->key_defined = 1;
+    color->key_r = 256u * data[0] + data[1];
+    color->key_g = 256u * data[2] + data[3];
+    color->key_b = 256u * data[4] + data[5];
+  }
+  else return 42; /*error: tRNS chunk not allowed for other color models*/
+
+  return 0; /* OK */
+}
+
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+/*background color chunk (bKGD)*/
+static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)
+{
+  if(info->color.colortype == LCT_PALETTE)
+  {
+    /*error: this chunk must be 1 byte for indexed color image*/
+    if(chunkLength != 1) return 43;
+
+    info->background_defined = 1;
+    info->background_r = info->background_g = info->background_b = data[0];
+  }
+  else if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA)
+  {
+    /*error: this chunk must be 2 bytes for greyscale image*/
+    if(chunkLength != 2) return 44;
+
+    info->background_defined = 1;
+    info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1];
+  }
+  else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA)
+  {
+    /*error: this chunk must be 6 bytes for greyscale image*/
+    if(chunkLength != 6) return 45;
+
+    info->background_defined = 1;
+    info->background_r = 256u * data[0] + data[1];
+    info->background_g = 256u * data[2] + data[3];
+    info->background_b = 256u * data[4] + data[5];
+  }
+
+  return 0; /* OK */
+}
+
+/*text chunk (tEXt)*/
+static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)
+{
+  unsigned error = 0;
+  char *key = 0, *str = 0;
+  unsigned i;
+
+  while(!error) /*not really a while loop, only used to break on error*/
+  {
+    unsigned length, string2_begin;
+
+    length = 0;
+    while(length < chunkLength && data[length] != 0) ++length;
+    /*even though it's not allowed by the standard, no error is thrown if
+    there's no null termination char, if the text is empty*/
+    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/
+
+    key = (char*)lodepng_malloc(length + 1);
+    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    key[length] = 0;
+    for(i = 0; i != length; ++i) key[i] = (char)data[i];
+
+    string2_begin = length + 1; /*skip keyword null terminator*/
+
+    length = chunkLength < string2_begin ? 0 : chunkLength - string2_begin;
+    str = (char*)lodepng_malloc(length + 1);
+    if(!str) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    str[length] = 0;
+    for(i = 0; i != length; ++i) str[i] = (char)data[string2_begin + i];
+
+    error = lodepng_add_text(info, key, str);
+
+    break;
+  }
+
+  lodepng_free(key);
+  lodepng_free(str);
+
+  return error;
+}
+
+/*compressed text chunk (zTXt)*/
+static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,
+                               const unsigned char* data, size_t chunkLength)
+{
+  unsigned error = 0;
+  unsigned i;
+
+  unsigned length, string2_begin;
+  char *key = 0;
+  ucvector decoded;
+
+  ucvector_init(&decoded);
+
+  while(!error) /*not really a while loop, only used to break on error*/
+  {
+    for(length = 0; length < chunkLength && data[length] != 0; ++length) ;
+    if(length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/
+    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/
+
+    key = (char*)lodepng_malloc(length + 1);
+    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    key[length] = 0;
+    for(i = 0; i != length; ++i) key[i] = (char)data[i];
+
+    if(data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/
+
+    string2_begin = length + 2;
+    if(string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/
+
+    length = chunkLength - string2_begin;
+    /*will fail if zlib error, e.g. if length is too small*/
+    error = zlib_decompress(&decoded.data, &decoded.size,
+                            (unsigned char*)(&data[string2_begin]),
+                            length, zlibsettings);
+    if(error) break;
+    ucvector_push_back(&decoded, 0);
+
+    error = lodepng_add_text(info, key, (char*)decoded.data);
+
+    break;
+  }
+
+  lodepng_free(key);
+  ucvector_cleanup(&decoded);
+
+  return error;
+}
+
+/*international text chunk (iTXt)*/
+static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,
+                               const unsigned char* data, size_t chunkLength)
+{
+  unsigned error = 0;
+  unsigned i;
+
+  unsigned length, begin, compressed;
+  char *key = 0, *langtag = 0, *transkey = 0;
+  ucvector decoded;
+  ucvector_init(&decoded);
+
+  while(!error) /*not really a while loop, only used to break on error*/
+  {
+    /*Quick check if the chunk length isn't too small. Even without check
+    it'd still fail with other error checks below if it's too short. This just gives a different error code.*/
+    if(chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/
+
+    /*read the key*/
+    for(length = 0; length < chunkLength && data[length] != 0; ++length) ;
+    if(length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/
+    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/
+
+    key = (char*)lodepng_malloc(length + 1);
+    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    key[length] = 0;
+    for(i = 0; i != length; ++i) key[i] = (char)data[i];
+
+    /*read the compression method*/
+    compressed = data[length + 1];
+    if(data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/
+
+    /*even though it's not allowed by the standard, no error is thrown if
+    there's no null termination char, if the text is empty for the next 3 texts*/
+
+    /*read the langtag*/
+    begin = length + 3;
+    length = 0;
+    for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length;
+
+    langtag = (char*)lodepng_malloc(length + 1);
+    if(!langtag) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    langtag[length] = 0;
+    for(i = 0; i != length; ++i) langtag[i] = (char)data[begin + i];
+
+    /*read the transkey*/
+    begin += length + 1;
+    length = 0;
+    for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length;
+
+    transkey = (char*)lodepng_malloc(length + 1);
+    if(!transkey) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    transkey[length] = 0;
+    for(i = 0; i != length; ++i) transkey[i] = (char)data[begin + i];
+
+    /*read the actual text*/
+    begin += length + 1;
+
+    length = chunkLength < begin ? 0 : chunkLength - begin;
+
+    if(compressed)
+    {
+      /*will fail if zlib error, e.g. if length is too small*/
+      error = zlib_decompress(&decoded.data, &decoded.size,
+                              (unsigned char*)(&data[begin]),
+                              length, zlibsettings);
+      if(error) break;
+      if(decoded.allocsize < decoded.size) decoded.allocsize = decoded.size;
+      ucvector_push_back(&decoded, 0);
+    }
+    else
+    {
+      if(!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(error, 83 /*alloc fail*/);
+
+      decoded.data[length] = 0;
+      for(i = 0; i != length; ++i) decoded.data[i] = data[begin + i];
+    }
+
+    error = lodepng_add_itext(info, key, langtag, transkey, (char*)decoded.data);
+
+    break;
+  }
+
+  lodepng_free(key);
+  lodepng_free(langtag);
+  lodepng_free(transkey);
+  ucvector_cleanup(&decoded);
+
+  return error;
+}
+
+static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)
+{
+  if(chunkLength != 7) return 73; /*invalid tIME chunk size*/
+
+  info->time_defined = 1;
+  info->time.year = 256u * data[0] + data[1];
+  info->time.month = data[2];
+  info->time.day = data[3];
+  info->time.hour = data[4];
+  info->time.minute = data[5];
+  info->time.second = data[6];
+
+  return 0; /* OK */
+}
+
+static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)
+{
+  if(chunkLength != 9) return 74; /*invalid pHYs chunk size*/
+
+  info->phys_defined = 1;
+  info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3];
+  info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7];
+  info->phys_unit = data[8];
+
+  return 0; /* OK */
+}
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+/*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/
+static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h,
+                          LodePNGState* state,
+                          const unsigned char* in, size_t insize)
+{
+  unsigned char IEND = 0;
+  const unsigned char* chunk;
+  size_t i;
+  ucvector idat; /*the data from idat chunks*/
+  ucvector scanlines;
+  size_t predict;
+  size_t numpixels;
+  size_t outsize = 0;
+
+  /*for unknown chunk order*/
+  unsigned unknown = 0;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+  /*provide some proper output values if error will happen*/
+  *out = 0;
+
+  state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/
+  if(state->error) return;
+
+  numpixels = *w * *h;
+
+  /*multiplication overflow*/
+  if(*h != 0 && numpixels / *h != *w) CERROR_RETURN(state->error, 92);
+  /*multiplication overflow possible further below. Allows up to 2^31-1 pixel
+  bytes with 16-bit RGBA, the rest is room for filter bytes.*/
+  if(numpixels > 268435455) CERROR_RETURN(state->error, 92);
+
+  ucvector_init(&idat);
+  chunk = &in[33]; /*first byte of the first chunk after the header*/
+
+  /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk.
+  IDAT data is put at the start of the in buffer*/
+  while(!IEND && !state->error)
+  {
+    unsigned chunkLength;
+    const unsigned char* data; /*the data in the chunk*/
+
+    /*error: size of the in buffer too small to contain next chunk*/
+    if((size_t)((chunk - in) + 12) > insize || chunk < in) CERROR_BREAK(state->error, 30);
+
+    /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/
+    chunkLength = lodepng_chunk_length(chunk);
+    /*error: chunk length larger than the max PNG chunk size*/
+    if(chunkLength > 2147483647) CERROR_BREAK(state->error, 63);
+
+    if((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in)
+    {
+      CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/
+    }
+
+    data = lodepng_chunk_data_const(chunk);
+
+    /*IDAT chunk, containing compressed image data*/
+    if(lodepng_chunk_type_equals(chunk, "IDAT"))
+    {
+      size_t oldsize = idat.size;
+      if(!ucvector_resize(&idat, oldsize + chunkLength)) CERROR_BREAK(state->error, 83 /*alloc fail*/);
+      for(i = 0; i != chunkLength; ++i) idat.data[oldsize + i] = data[i];
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+      critical_pos = 3;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    }
+    /*IEND chunk*/
+    else if(lodepng_chunk_type_equals(chunk, "IEND"))
+    {
+      IEND = 1;
+    }
+    /*palette chunk (PLTE)*/
+    else if(lodepng_chunk_type_equals(chunk, "PLTE"))
+    {
+      state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength);
+      if(state->error) break;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+      critical_pos = 2;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    }
+    /*palette transparency chunk (tRNS)*/
+    else if(lodepng_chunk_type_equals(chunk, "tRNS"))
+    {
+      state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength);
+      if(state->error) break;
+    }
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    /*background color chunk (bKGD)*/
+    else if(lodepng_chunk_type_equals(chunk, "bKGD"))
+    {
+      state->error = readChunk_bKGD(&state->info_png, data, chunkLength);
+      if(state->error) break;
+    }
+    /*text chunk (tEXt)*/
+    else if(lodepng_chunk_type_equals(chunk, "tEXt"))
+    {
+      if(state->decoder.read_text_chunks)
+      {
+        state->error = readChunk_tEXt(&state->info_png, data, chunkLength);
+        if(state->error) break;
+      }
+    }
+    /*compressed text chunk (zTXt)*/
+    else if(lodepng_chunk_type_equals(chunk, "zTXt"))
+    {
+      if(state->decoder.read_text_chunks)
+      {
+        state->error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);
+        if(state->error) break;
+      }
+    }
+    /*international text chunk (iTXt)*/
+    else if(lodepng_chunk_type_equals(chunk, "iTXt"))
+    {
+      if(state->decoder.read_text_chunks)
+      {
+        state->error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);
+        if(state->error) break;
+      }
+    }
+    else if(lodepng_chunk_type_equals(chunk, "tIME"))
+    {
+      state->error = readChunk_tIME(&state->info_png, data, chunkLength);
+      if(state->error) break;
+    }
+    else if(lodepng_chunk_type_equals(chunk, "pHYs"))
+    {
+      state->error = readChunk_pHYs(&state->info_png, data, chunkLength);
+      if(state->error) break;
+    }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    else /*it's not an implemented chunk type, so ignore it: skip over the data*/
+    {
+      /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/
+      if(!lodepng_chunk_ancillary(chunk)) CERROR_BREAK(state->error, 69);
+
+      unknown = 1;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+      if(state->decoder.remember_unknown_chunks)
+      {
+        state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1],
+                                            &state->info_png.unknown_chunks_size[critical_pos - 1], chunk);
+        if(state->error) break;
+      }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    }
+
+    if(!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/
+    {
+      if(lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/
+    }
+
+    if(!IEND) chunk = lodepng_chunk_next_const(chunk);
+  }
+
+  ucvector_init(&scanlines);
+  /*predict output size, to allocate exact size for output buffer to avoid more dynamic allocation.
+  If the decompressed size does not match the prediction, the image must be corrupt.*/
+  if(state->info_png.interlace_method == 0)
+  {
+    /*The extra *h is added because this are the filter bytes every scanline starts with*/
+    predict = lodepng_get_raw_size_idat(*w, *h, &state->info_png.color) + *h;
+  }
+  else
+  {
+    /*Adam-7 interlaced: predicted size is the sum of the 7 sub-images sizes*/
+    const LodePNGColorMode* color = &state->info_png.color;
+    predict = 0;
+    predict += lodepng_get_raw_size_idat((*w + 7) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3);
+    if(*w > 4) predict += lodepng_get_raw_size_idat((*w + 3) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3);
+    predict += lodepng_get_raw_size_idat((*w + 3) >> 2, (*h + 3) >> 3, color) + ((*h + 3) >> 3);
+    if(*w > 2) predict += lodepng_get_raw_size_idat((*w + 1) >> 2, (*h + 3) >> 2, color) + ((*h + 3) >> 2);
+    predict += lodepng_get_raw_size_idat((*w + 1) >> 1, (*h + 1) >> 2, color) + ((*h + 1) >> 2);
+    if(*w > 1) predict += lodepng_get_raw_size_idat((*w + 0) >> 1, (*h + 1) >> 1, color) + ((*h + 1) >> 1);
+    predict += lodepng_get_raw_size_idat((*w + 0), (*h + 0) >> 1, color) + ((*h + 0) >> 1);
+  }
+  if(!state->error && !ucvector_reserve(&scanlines, predict)) state->error = 83; /*alloc fail*/
+  if(!state->error)
+  {
+    state->error = zlib_decompress(&scanlines.data, &scanlines.size, idat.data,
+                                   idat.size, &state->decoder.zlibsettings);
+    if(!state->error && scanlines.size != predict) state->error = 91; /*decompressed size doesn't match prediction*/
+  }
+  ucvector_cleanup(&idat);
+
+  if(!state->error)
+  {
+    outsize = lodepng_get_raw_size(*w, *h, &state->info_png.color);
+    *out = (unsigned char*)lodepng_malloc(outsize);
+    if(!*out) state->error = 83; /*alloc fail*/
+  }
+  if(!state->error)
+  {
+    for(i = 0; i < outsize; i++) (*out)[i] = 0;
+    state->error = postProcessScanlines(*out, scanlines.data, *w, *h, &state->info_png);
+  }
+  ucvector_cleanup(&scanlines);
+}
+
+unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
+                        LodePNGState* state,
+                        const unsigned char* in, size_t insize)
+{
+  *out = 0;
+  decodeGeneric(out, w, h, state, in, insize);
+  if(state->error) return state->error;
+  if(!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color))
+  {
+    /*same color type, no copying or converting of data needed*/
+    /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype
+    the raw image has to the end user*/
+    if(!state->decoder.color_convert)
+    {
+      state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color);
+      if(state->error) return state->error;
+    }
+  }
+  else
+  {
+    /*color conversion needed; sort of copy of the data*/
+    unsigned char* data = *out;
+    size_t outsize;
+
+    /*TODO: check if this works according to the statement in the documentation: "The converter can convert
+    from greyscale input color type, to 8-bit greyscale or greyscale with alpha"*/
+    if(!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA)
+       && !(state->info_raw.bitdepth == 8))
+    {
+      return 56; /*unsupported color mode conversion*/
+    }
+
+    outsize = lodepng_get_raw_size(*w, *h, &state->info_raw);
+    *out = (unsigned char*)lodepng_malloc(outsize);
+    if(!(*out))
+    {
+      state->error = 83; /*alloc fail*/
+    }
+    else state->error = lodepng_convert(*out, data, &state->info_raw,
+                                        &state->info_png.color, *w, *h);
+    lodepng_free(data);
+  }
+  return state->error;
+}
+
+unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in,
+                               size_t insize, LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned error;
+  LodePNGState state;
+  lodepng_state_init(&state);
+  state.info_raw.colortype = colortype;
+  state.info_raw.bitdepth = bitdepth;
+  error = lodepng_decode(out, w, h, &state, in, insize);
+  lodepng_state_cleanup(&state);
+  return error;
+}
+
+unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize)
+{
+  return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8);
+}
+
+unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize)
+{
+  return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8);
+}
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename,
+                             LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned char* buffer = 0;
+  size_t buffersize;
+  unsigned error;
+  error = lodepng_load_file(&buffer, &buffersize, filename);
+  if(!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth);
+  lodepng_free(buffer);
+  return error;
+}
+
+unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename)
+{
+  return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8);
+}
+
+unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename)
+{
+  return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8);
+}
+#endif /*LODEPNG_COMPILE_DISK*/
+
+void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings)
+{
+  settings->color_convert = 1;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  settings->read_text_chunks = 1;
+  settings->remember_unknown_chunks = 0;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+  settings->ignore_crc = 0;
+  lodepng_decompress_settings_init(&settings->zlibsettings);
+}
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)
+
+void lodepng_state_init(LodePNGState* state)
+{
+#ifdef LODEPNG_COMPILE_DECODER
+  lodepng_decoder_settings_init(&state->decoder);
+#endif /*LODEPNG_COMPILE_DECODER*/
+#ifdef LODEPNG_COMPILE_ENCODER
+  lodepng_encoder_settings_init(&state->encoder);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+  lodepng_color_mode_init(&state->info_raw);
+  lodepng_info_init(&state->info_png);
+  state->error = 1;
+}
+
+void lodepng_state_cleanup(LodePNGState* state)
+{
+  lodepng_color_mode_cleanup(&state->info_raw);
+  lodepng_info_cleanup(&state->info_png);
+}
+
+void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source)
+{
+  lodepng_state_cleanup(dest);
+  *dest = *source;
+  lodepng_color_mode_init(&dest->info_raw);
+  lodepng_info_init(&dest->info_png);
+  dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if(dest->error) return;
+  dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if(dest->error) return;
+}
+
+#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / PNG Encoder                                                            / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*chunkName must be string of 4 characters*/
+static unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length)
+{
+  CERROR_TRY_RETURN(lodepng_chunk_create(&out->data, &out->size, (unsigned)length, chunkName, data));
+  out->allocsize = out->size; /*fix the allocsize again*/
+  return 0;
+}
+
+static void writeSignature(ucvector* out)
+{
+  /*8 bytes PNG signature, aka the magic bytes*/
+  ucvector_push_back(out, 137);
+  ucvector_push_back(out, 80);
+  ucvector_push_back(out, 78);
+  ucvector_push_back(out, 71);
+  ucvector_push_back(out, 13);
+  ucvector_push_back(out, 10);
+  ucvector_push_back(out, 26);
+  ucvector_push_back(out, 10);
+}
+
+static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h,
+                              LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method)
+{
+  unsigned error = 0;
+  ucvector header;
+  ucvector_init(&header);
+
+  lodepng_add32bitInt(&header, w); /*width*/
+  lodepng_add32bitInt(&header, h); /*height*/
+  ucvector_push_back(&header, (unsigned char)bitdepth); /*bit depth*/
+  ucvector_push_back(&header, (unsigned char)colortype); /*color type*/
+  ucvector_push_back(&header, 0); /*compression method*/
+  ucvector_push_back(&header, 0); /*filter method*/
+  ucvector_push_back(&header, interlace_method); /*interlace method*/
+
+  error = addChunk(out, "IHDR", header.data, header.size);
+  ucvector_cleanup(&header);
+
+  return error;
+}
+
+static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info)
+{
+  unsigned error = 0;
+  size_t i;
+  ucvector PLTE;
+  ucvector_init(&PLTE);
+  for(i = 0; i != info->palettesize * 4; ++i)
+  {
+    /*add all channels except alpha channel*/
+    if(i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]);
+  }
+  error = addChunk(out, "PLTE", PLTE.data, PLTE.size);
+  ucvector_cleanup(&PLTE);
+
+  return error;
+}
+
+static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info)
+{
+  unsigned error = 0;
+  size_t i;
+  ucvector tRNS;
+  ucvector_init(&tRNS);
+  if(info->colortype == LCT_PALETTE)
+  {
+    size_t amount = info->palettesize;
+    /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/
+    for(i = info->palettesize; i != 0; --i)
+    {
+      if(info->palette[4 * (i - 1) + 3] == 255) --amount;
+      else break;
+    }
+    /*add only alpha channel*/
+    for(i = 0; i != amount; ++i) ucvector_push_back(&tRNS, info->palette[4 * i + 3]);
+  }
+  else if(info->colortype == LCT_GREY)
+  {
+    if(info->key_defined)
+    {
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255));
+    }
+  }
+  else if(info->colortype == LCT_RGB)
+  {
+    if(info->key_defined)
+    {
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_g >> 8));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_g & 255));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_b >> 8));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_b & 255));
+    }
+  }
+
+  error = addChunk(out, "tRNS", tRNS.data, tRNS.size);
+  ucvector_cleanup(&tRNS);
+
+  return error;
+}
+
+static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize,
+                              LodePNGCompressSettings* zlibsettings)
+{
+  ucvector zlibdata;
+  unsigned error = 0;
+
+  /*compress with the Zlib compressor*/
+  ucvector_init(&zlibdata);
+  error = zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings);
+  if(!error) error = addChunk(out, "IDAT", zlibdata.data, zlibdata.size);
+  ucvector_cleanup(&zlibdata);
+
+  return error;
+}
+
+static unsigned addChunk_IEND(ucvector* out)
+{
+  unsigned error = 0;
+  error = addChunk(out, "IEND", 0, 0);
+  return error;
+}
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+
+static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring)
+{
+  unsigned error = 0;
+  size_t i;
+  ucvector text;
+  ucvector_init(&text);
+  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)keyword[i]);
+  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
+  ucvector_push_back(&text, 0); /*0 termination char*/
+  for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)textstring[i]);
+  error = addChunk(out, "tEXt", text.data, text.size);
+  ucvector_cleanup(&text);
+
+  return error;
+}
+
+static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring,
+                              LodePNGCompressSettings* zlibsettings)
+{
+  unsigned error = 0;
+  ucvector data, compressed;
+  size_t i, textsize = strlen(textstring);
+
+  ucvector_init(&data);
+  ucvector_init(&compressed);
+  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]);
+  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
+  ucvector_push_back(&data, 0); /*0 termination char*/
+  ucvector_push_back(&data, 0); /*compression method: 0*/
+
+  error = zlib_compress(&compressed.data, &compressed.size,
+                        (unsigned char*)textstring, textsize, zlibsettings);
+  if(!error)
+  {
+    for(i = 0; i != compressed.size; ++i) ucvector_push_back(&data, compressed.data[i]);
+    error = addChunk(out, "zTXt", data.data, data.size);
+  }
+
+  ucvector_cleanup(&compressed);
+  ucvector_cleanup(&data);
+  return error;
+}
+
+static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag,
+                              const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings)
+{
+  unsigned error = 0;
+  ucvector data;
+  size_t i, textsize = strlen(textstring);
+
+  ucvector_init(&data);
+
+  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]);
+  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
+  ucvector_push_back(&data, 0); /*null termination char*/
+  ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/
+  ucvector_push_back(&data, 0); /*compression method*/
+  for(i = 0; langtag[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)langtag[i]);
+  ucvector_push_back(&data, 0); /*null termination char*/
+  for(i = 0; transkey[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)transkey[i]);
+  ucvector_push_back(&data, 0); /*null termination char*/
+
+  if(compressed)
+  {
+    ucvector compressed_data;
+    ucvector_init(&compressed_data);
+    error = zlib_compress(&compressed_data.data, &compressed_data.size,
+                          (unsigned char*)textstring, textsize, zlibsettings);
+    if(!error)
+    {
+      for(i = 0; i != compressed_data.size; ++i) ucvector_push_back(&data, compressed_data.data[i]);
+    }
+    ucvector_cleanup(&compressed_data);
+  }
+  else /*not compressed*/
+  {
+    for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)textstring[i]);
+  }
+
+  if(!error) error = addChunk(out, "iTXt", data.data, data.size);
+  ucvector_cleanup(&data);
+  return error;
+}
+
+static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info)
+{
+  unsigned error = 0;
+  ucvector bKGD;
+  ucvector_init(&bKGD);
+  if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA)
+  {
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255));
+  }
+  else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA)
+  {
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_g >> 8));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_g & 255));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_b >> 8));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_b & 255));
+  }
+  else if(info->color.colortype == LCT_PALETTE)
+  {
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); /*palette index*/
+  }
+
+  error = addChunk(out, "bKGD", bKGD.data, bKGD.size);
+  ucvector_cleanup(&bKGD);
+
+  return error;
+}
+
+static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time)
+{
+  unsigned error = 0;
+  unsigned char* data = (unsigned char*)lodepng_malloc(7);
+  if(!data) return 83; /*alloc fail*/
+  data[0] = (unsigned char)(time->year >> 8);
+  data[1] = (unsigned char)(time->year & 255);
+  data[2] = (unsigned char)time->month;
+  data[3] = (unsigned char)time->day;
+  data[4] = (unsigned char)time->hour;
+  data[5] = (unsigned char)time->minute;
+  data[6] = (unsigned char)time->second;
+  error = addChunk(out, "tIME", data, 7);
+  lodepng_free(data);
+  return error;
+}
+
+static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info)
+{
+  unsigned error = 0;
+  ucvector data;
+  ucvector_init(&data);
+
+  lodepng_add32bitInt(&data, info->phys_x);
+  lodepng_add32bitInt(&data, info->phys_y);
+  ucvector_push_back(&data, info->phys_unit);
+
+  error = addChunk(out, "pHYs", data.data, data.size);
+  ucvector_cleanup(&data);
+
+  return error;
+}
+
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline,
+                           size_t length, size_t bytewidth, unsigned char filterType)
+{
+  size_t i;
+  switch(filterType)
+  {
+    case 0: /*None*/
+      for(i = 0; i != length; ++i) out[i] = scanline[i];
+      break;
+    case 1: /*Sub*/
+      for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];
+      for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth];
+      break;
+    case 2: /*Up*/
+      if(prevline)
+      {
+        for(i = 0; i != length; ++i) out[i] = scanline[i] - prevline[i];
+      }
+      else
+      {
+        for(i = 0; i != length; ++i) out[i] = scanline[i];
+      }
+      break;
+    case 3: /*Average*/
+      if(prevline)
+      {
+        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i] - (prevline[i] >> 1);
+        for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) >> 1);
+      }
+      else
+      {
+        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];
+        for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - (scanline[i - bytewidth] >> 1);
+      }
+      break;
+    case 4: /*Paeth*/
+      if(prevline)
+      {
+        /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/
+        for(i = 0; i != bytewidth; ++i) out[i] = (scanline[i] - prevline[i]);
+        for(i = bytewidth; i < length; ++i)
+        {
+          out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth]));
+        }
+      }
+      else
+      {
+        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];
+        /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/
+        for(i = bytewidth; i < length; ++i) out[i] = (scanline[i] - scanline[i - bytewidth]);
+      }
+      break;
+    default: return; /*unexisting filter type given*/
+  }
+}
+
+/* log2 approximation. A slight bit faster than std::log. */
+static float flog2(float f)
+{
+  float result = 0;
+  while(f > 32) { result += 4; f /= 16; }
+  while(f > 2) { ++result; f /= 2; }
+  return result + 1.442695f * (f * f * f / 3 - 3 * f * f / 2 + 3 * f - 1.83333f);
+}
+
+static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h,
+                       const LodePNGColorMode* info, const LodePNGEncoderSettings* settings)
+{
+  /*
+  For PNG filter method 0
+  out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are
+  the scanlines with 1 extra byte per scanline
+  */
+
+  unsigned bpp = lodepng_get_bpp(info);
+  /*the width of a scanline in bytes, not including the filter type*/
+  size_t linebytes = (w * bpp + 7) / 8;
+  /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/
+  size_t bytewidth = (bpp + 7) / 8;
+  const unsigned char* prevline = 0;
+  unsigned x, y;
+  unsigned error = 0;
+  LodePNGFilterStrategy strategy = settings->filter_strategy;
+
+  /*
+  There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard:
+   *  If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e.
+      use fixed filtering, with the filter None).
+   * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is
+     not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply
+     all five filters and select the filter that produces the smallest sum of absolute values per row.
+  This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true.
+
+  If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed,
+  but for "the other case", whatever strategy filter_strategy is set to instead of the minimum sum
+  heuristic is used.
+  */
+  if(settings->filter_palette_zero &&
+     (info->colortype == LCT_PALETTE || info->bitdepth < 8)) strategy = LFS_ZERO;
+
+  if(bpp == 0) return 31; /*error: invalid color type*/
+
+  if(strategy == LFS_ZERO)
+  {
+    for(y = 0; y != h; ++y)
+    {
+      size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
+      size_t inindex = linebytes * y;
+      out[outindex] = 0; /*filter type byte*/
+      filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, 0);
+      prevline = &in[inindex];
+    }
+  }
+  else if(strategy == LFS_MINSUM)
+  {
+    /*adaptive filtering*/
+    size_t sum[5];
+    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/
+    size_t smallest = 0;
+    unsigned char type, bestType = 0;
+
+    for(type = 0; type != 5; ++type)
+    {
+      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);
+      if(!attempt[type]) return 83; /*alloc fail*/
+    }
+
+    if(!error)
+    {
+      for(y = 0; y != h; ++y)
+      {
+        /*try the 5 filter types*/
+        for(type = 0; type != 5; ++type)
+        {
+          filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);
+
+          /*calculate the sum of the result*/
+          sum[type] = 0;
+          if(type == 0)
+          {
+            for(x = 0; x != linebytes; ++x) sum[type] += (unsigned char)(attempt[type][x]);
+          }
+          else
+          {
+            for(x = 0; x != linebytes; ++x)
+            {
+              /*For differences, each byte should be treated as signed, values above 127 are negative
+              (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there.
+              This means filtertype 0 is almost never chosen, but that is justified.*/
+              unsigned char s = attempt[type][x];
+              sum[type] += s < 128 ? s : (255U - s);
+            }
+          }
+
+          /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/
+          if(type == 0 || sum[type] < smallest)
+          {
+            bestType = type;
+            smallest = sum[type];
+          }
+        }
+
+        prevline = &in[y * linebytes];
+
+        /*now fill the out values*/
+        out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
+        for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];
+      }
+    }
+
+    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);
+  }
+  else if(strategy == LFS_ENTROPY)
+  {
+    float sum[5];
+    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/
+    float smallest = 0;
+    unsigned type, bestType = 0;
+    unsigned count[256];
+
+    for(type = 0; type != 5; ++type)
+    {
+      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);
+      if(!attempt[type]) return 83; /*alloc fail*/
+    }
+
+    for(y = 0; y != h; ++y)
+    {
+      /*try the 5 filter types*/
+      for(type = 0; type != 5; ++type)
+      {
+        filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);
+        for(x = 0; x != 256; ++x) count[x] = 0;
+        for(x = 0; x != linebytes; ++x) ++count[attempt[type][x]];
+        ++count[type]; /*the filter type itself is part of the scanline*/
+        sum[type] = 0;
+        for(x = 0; x != 256; ++x)
+        {
+          float p = count[x] / (float)(linebytes + 1);
+          sum[type] += count[x] == 0 ? 0 : flog2(1 / p) * p;
+        }
+        /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/
+        if(type == 0 || sum[type] < smallest)
+        {
+          bestType = type;
+          smallest = sum[type];
+        }
+      }
+
+      prevline = &in[y * linebytes];
+
+      /*now fill the out values*/
+      out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
+      for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];
+    }
+
+    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);
+  }
+  else if(strategy == LFS_PREDEFINED)
+  {
+    for(y = 0; y != h; ++y)
+    {
+      size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
+      size_t inindex = linebytes * y;
+      unsigned char type = settings->predefined_filters[y];
+      out[outindex] = type; /*filter type byte*/
+      filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type);
+      prevline = &in[inindex];
+    }
+  }
+  else if(strategy == LFS_BRUTE_FORCE)
+  {
+    /*brute force filter chooser.
+    deflate the scanline after every filter attempt to see which one deflates best.
+    This is very slow and gives only slightly smaller, sometimes even larger, result*/
+    size_t size[5];
+    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/
+    size_t smallest = 0;
+    unsigned type = 0, bestType = 0;
+    unsigned char* dummy;
+    LodePNGCompressSettings zlibsettings = settings->zlibsettings;
+    /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose,
+    to simulate the true case where the tree is the same for the whole image. Sometimes it gives
+    better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare
+    cases better compression. It does make this a bit less slow, so it's worth doing this.*/
+    zlibsettings.btype = 1;
+    /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG
+    images only, so disable it*/
+    zlibsettings.custom_zlib = 0;
+    zlibsettings.custom_deflate = 0;
+    for(type = 0; type != 5; ++type)
+    {
+      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);
+      if(!attempt[type]) return 83; /*alloc fail*/
+    }
+    for(y = 0; y != h; ++y) /*try the 5 filter types*/
+    {
+      for(type = 0; type != 5; ++type)
+      {
+        unsigned testsize = linebytes;
+        /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/
+
+        filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);
+        size[type] = 0;
+        dummy = 0;
+        zlib_compress(&dummy, &size[type], attempt[type], testsize, &zlibsettings);
+        lodepng_free(dummy);
+        /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/
+        if(type == 0 || size[type] < smallest)
+        {
+          bestType = type;
+          smallest = size[type];
+        }
+      }
+      prevline = &in[y * linebytes];
+      out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
+      for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];
+    }
+    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);
+  }
+  else return 88; /* unknown filter strategy */
+
+  return error;
+}
+
+static void addPaddingBits(unsigned char* out, const unsigned char* in,
+                           size_t olinebits, size_t ilinebits, unsigned h)
+{
+  /*The opposite of the removePaddingBits function
+  olinebits must be >= ilinebits*/
+  unsigned y;
+  size_t diff = olinebits - ilinebits;
+  size_t obp = 0, ibp = 0; /*bit pointers*/
+  for(y = 0; y != h; ++y)
+  {
+    size_t x;
+    for(x = 0; x < ilinebits; ++x)
+    {
+      unsigned char bit = readBitFromReversedStream(&ibp, in);
+      setBitOfReversedStream(&obp, out, bit);
+    }
+    /*obp += diff; --> no, fill in some value in the padding bits too, to avoid
+    "Use of uninitialised value of size ###" warning from valgrind*/
+    for(x = 0; x != diff; ++x) setBitOfReversedStream(&obp, out, 0);
+  }
+}
+
+/*
+in: non-interlaced image with size w*h
+out: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with
+ no padding bits between scanlines, but between reduced images so that each
+ reduced image starts at a byte.
+bpp: bits per pixel
+there are no padding bits, not between scanlines, not between reduced images
+in has the following size in bits: w * h * bpp.
+out is possibly bigger due to padding bits between reduced images
+NOTE: comments about padding bits are only relevant if bpp < 8
+*/
+static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)
+{
+  unsigned passw[7], passh[7];
+  size_t filter_passstart[8], padded_passstart[8], passstart[8];
+  unsigned i;
+
+  Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
+
+  if(bpp >= 8)
+  {
+    for(i = 0; i != 7; ++i)
+    {
+      unsigned x, y, b;
+      size_t bytewidth = bpp / 8;
+      for(y = 0; y < passh[i]; ++y)
+      for(x = 0; x < passw[i]; ++x)
+      {
+        size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;
+        size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth;
+        for(b = 0; b < bytewidth; ++b)
+        {
+          out[pixeloutstart + b] = in[pixelinstart + b];
+        }
+      }
+    }
+  }
+  else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/
+  {
+    for(i = 0; i != 7; ++i)
+    {
+      unsigned x, y, b;
+      unsigned ilinebits = bpp * passw[i];
+      unsigned olinebits = bpp * w;
+      size_t obp, ibp; /*bit pointers (for out and in buffer)*/
+      for(y = 0; y < passh[i]; ++y)
+      for(x = 0; x < passw[i]; ++x)
+      {
+        ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;
+        obp = (8 * passstart[i]) + (y * ilinebits + x * bpp);
+        for(b = 0; b < bpp; ++b)
+        {
+          unsigned char bit = readBitFromReversedStream(&ibp, in);
+          setBitOfReversedStream(&obp, out, bit);
+        }
+      }
+    }
+  }
+}
+
+/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image.
+return value is error**/
+static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in,
+                                    unsigned w, unsigned h,
+                                    const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings)
+{
+  /*
+  This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps:
+  *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter
+  *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter
+  */
+  unsigned bpp = lodepng_get_bpp(&info_png->color);
+  unsigned error = 0;
+
+  if(info_png->interlace_method == 0)
+  {
+    *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/
+    *out = (unsigned char*)lodepng_malloc(*outsize);
+    if(!(*out) && (*outsize)) error = 83; /*alloc fail*/
+
+    if(!error)
+    {
+      /*non multiple of 8 bits per scanline, padding bits needed per scanline*/
+      if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8)
+      {
+        unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7) / 8));
+        if(!padded) error = 83; /*alloc fail*/
+        if(!error)
+        {
+          addPaddingBits(padded, in, ((w * bpp + 7) / 8) * 8, w * bpp, h);
+          error = filter(*out, padded, w, h, &info_png->color, settings);
+        }
+        lodepng_free(padded);
+      }
+      else
+      {
+        /*we can immediately filter into the out buffer, no other steps needed*/
+        error = filter(*out, in, w, h, &info_png->color, settings);
+      }
+    }
+  }
+  else /*interlace_method is 1 (Adam7)*/
+  {
+    unsigned passw[7], passh[7];
+    size_t filter_passstart[8], padded_passstart[8], passstart[8];
+    unsigned char* adam7;
+
+    Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
+
+    *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/
+    *out = (unsigned char*)lodepng_malloc(*outsize);
+    if(!(*out)) error = 83; /*alloc fail*/
+
+    adam7 = (unsigned char*)lodepng_malloc(passstart[7]);
+    if(!adam7 && passstart[7]) error = 83; /*alloc fail*/
+
+    if(!error)
+    {
+      unsigned i;
+
+      Adam7_interlace(adam7, in, w, h, bpp);
+      for(i = 0; i != 7; ++i)
+      {
+        if(bpp < 8)
+        {
+          unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]);
+          if(!padded) ERROR_BREAK(83); /*alloc fail*/
+          addPaddingBits(padded, &adam7[passstart[i]],
+                         ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]);
+          error = filter(&(*out)[filter_passstart[i]], padded,
+                         passw[i], passh[i], &info_png->color, settings);
+          lodepng_free(padded);
+        }
+        else
+        {
+          error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]],
+                         passw[i], passh[i], &info_png->color, settings);
+        }
+
+        if(error) break;
+      }
+    }
+
+    lodepng_free(adam7);
+  }
+
+  return error;
+}
+
+/*
+palette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA...
+returns 0 if the palette is opaque,
+returns 1 if the palette has a single color with alpha 0 ==> color key
+returns 2 if the palette is semi-translucent.
+*/
+static unsigned getPaletteTranslucency(const unsigned char* palette, size_t palettesize)
+{
+  size_t i;
+  unsigned key = 0;
+  unsigned r = 0, g = 0, b = 0; /*the value of the color with alpha 0, so long as color keying is possible*/
+  for(i = 0; i != palettesize; ++i)
+  {
+    if(!key && palette[4 * i + 3] == 0)
+    {
+      r = palette[4 * i + 0]; g = palette[4 * i + 1]; b = palette[4 * i + 2];
+      key = 1;
+      i = (size_t)(-1); /*restart from beginning, to detect earlier opaque colors with key's value*/
+    }
+    else if(palette[4 * i + 3] != 255) return 2;
+    /*when key, no opaque RGB may have key's RGB*/
+    else if(key && r == palette[i * 4 + 0] && g == palette[i * 4 + 1] && b == palette[i * 4 + 2]) return 2;
+  }
+  return key;
+}
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize)
+{
+  unsigned char* inchunk = data;
+  while((size_t)(inchunk - data) < datasize)
+  {
+    CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk));
+    out->allocsize = out->size; /*fix the allocsize again*/
+    inchunk = lodepng_chunk_next(inchunk);
+  }
+  return 0;
+}
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+unsigned lodepng_encode(unsigned char** out, size_t* outsize,
+                        const unsigned char* image, unsigned w, unsigned h,
+                        LodePNGState* state)
+{
+  LodePNGInfo info;
+  ucvector outv;
+  unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/
+  size_t datasize = 0;
+
+  /*provide some proper output values if error will happen*/
+  *out = 0;
+  *outsize = 0;
+  state->error = 0;
+
+  lodepng_info_init(&info);
+  lodepng_info_copy(&info, &state->info_png);
+
+  if((info.color.colortype == LCT_PALETTE || state->encoder.force_palette)
+      && (info.color.palettesize == 0 || info.color.palettesize > 256))
+  {
+    state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/
+    return state->error;
+  }
+
+  if(state->encoder.auto_convert)
+  {
+    state->error = lodepng_auto_choose_color(&info.color, image, w, h, &state->info_raw);
+  }
+  if(state->error) return state->error;
+
+  if(state->encoder.zlibsettings.btype > 2)
+  {
+    CERROR_RETURN_ERROR(state->error, 61); /*error: unexisting btype*/
+  }
+  if(state->info_png.interlace_method > 1)
+  {
+    CERROR_RETURN_ERROR(state->error, 71); /*error: unexisting interlace mode*/
+  }
+
+  state->error = checkColorValidity(info.color.colortype, info.color.bitdepth);
+  if(state->error) return state->error; /*error: unexisting color type given*/
+  state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth);
+  if(state->error) return state->error; /*error: unexisting color type given*/
+
+  if(!lodepng_color_mode_equal(&state->info_raw, &info.color))
+  {
+    unsigned char* converted;
+    size_t size = (w * h * (size_t)lodepng_get_bpp(&info.color) + 7) / 8;
+
+    converted = (unsigned char*)lodepng_malloc(size);
+    if(!converted && size) state->error = 83; /*alloc fail*/
+    if(!state->error)
+    {
+      state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h);
+    }
+    if(!state->error) preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder);
+    lodepng_free(converted);
+  }
+  else preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder);
+
+  ucvector_init(&outv);
+  while(!state->error) /*while only executed once, to break on error*/
+  {
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    size_t i;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    /*write signature and chunks*/
+    writeSignature(&outv);
+    /*IHDR*/
+    addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method);
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    /*unknown chunks between IHDR and PLTE*/
+    if(info.unknown_chunks_data[0])
+    {
+      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]);
+      if(state->error) break;
+    }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    /*PLTE*/
+    if(info.color.colortype == LCT_PALETTE)
+    {
+      addChunk_PLTE(&outv, &info.color);
+    }
+    if(state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA))
+    {
+      addChunk_PLTE(&outv, &info.color);
+    }
+    /*tRNS*/
+    if(info.color.colortype == LCT_PALETTE && getPaletteTranslucency(info.color.palette, info.color.palettesize) != 0)
+    {
+      addChunk_tRNS(&outv, &info.color);
+    }
+    if((info.color.colortype == LCT_GREY || info.color.colortype == LCT_RGB) && info.color.key_defined)
+    {
+      addChunk_tRNS(&outv, &info.color);
+    }
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    /*bKGD (must come between PLTE and the IDAt chunks*/
+    if(info.background_defined) addChunk_bKGD(&outv, &info);
+    /*pHYs (must come before the IDAT chunks)*/
+    if(info.phys_defined) addChunk_pHYs(&outv, &info);
+
+    /*unknown chunks between PLTE and IDAT*/
+    if(info.unknown_chunks_data[1])
+    {
+      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]);
+      if(state->error) break;
+    }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    /*IDAT (multiple IDAT chunks must be consecutive)*/
+    state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings);
+    if(state->error) break;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    /*tIME*/
+    if(info.time_defined) addChunk_tIME(&outv, &info.time);
+    /*tEXt and/or zTXt*/
+    for(i = 0; i != info.text_num; ++i)
+    {
+      if(strlen(info.text_keys[i]) > 79)
+      {
+        state->error = 66; /*text chunk too large*/
+        break;
+      }
+      if(strlen(info.text_keys[i]) < 1)
+      {
+        state->error = 67; /*text chunk too small*/
+        break;
+      }
+      if(state->encoder.text_compression)
+      {
+        addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings);
+      }
+      else
+      {
+        addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]);
+      }
+    }
+    /*LodePNG version id in text chunk*/
+    if(state->encoder.add_id)
+    {
+      unsigned alread_added_id_text = 0;
+      for(i = 0; i != info.text_num; ++i)
+      {
+        if(!strcmp(info.text_keys[i], "LodePNG"))
+        {
+          alread_added_id_text = 1;
+          break;
+        }
+      }
+      if(alread_added_id_text == 0)
+      {
+        addChunk_tEXt(&outv, "LodePNG", LODEPNG_VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/
+      }
+    }
+    /*iTXt*/
+    for(i = 0; i != info.itext_num; ++i)
+    {
+      if(strlen(info.itext_keys[i]) > 79)
+      {
+        state->error = 66; /*text chunk too large*/
+        break;
+      }
+      if(strlen(info.itext_keys[i]) < 1)
+      {
+        state->error = 67; /*text chunk too small*/
+        break;
+      }
+      addChunk_iTXt(&outv, state->encoder.text_compression,
+                    info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i],
+                    &state->encoder.zlibsettings);
+    }
+
+    /*unknown chunks between IDAT and IEND*/
+    if(info.unknown_chunks_data[2])
+    {
+      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]);
+      if(state->error) break;
+    }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    addChunk_IEND(&outv);
+
+    break; /*this isn't really a while loop; no error happened so break out now!*/
+  }
+
+  lodepng_info_cleanup(&info);
+  lodepng_free(data);
+  /*instead of cleaning the vector up, give it to the output*/
+  *out = outv.data;
+  *outsize = outv.size;
+
+  return state->error;
+}
+
+unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image,
+                               unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned error;
+  LodePNGState state;
+  lodepng_state_init(&state);
+  state.info_raw.colortype = colortype;
+  state.info_raw.bitdepth = bitdepth;
+  state.info_png.color.colortype = colortype;
+  state.info_png.color.bitdepth = bitdepth;
+  lodepng_encode(out, outsize, image, w, h, &state);
+  error = state.error;
+  lodepng_state_cleanup(&state);
+  return error;
+}
+
+unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)
+{
+  return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8);
+}
+
+unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)
+{
+  return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8);
+}
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h,
+                             LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned char* buffer;
+  size_t buffersize;
+  unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth);
+  if(!error) error = lodepng_save_file(buffer, buffersize, filename);
+  lodepng_free(buffer);
+  return error;
+}
+
+unsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h)
+{
+  return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8);
+}
+
+unsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h)
+{
+  return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8);
+}
+#endif /*LODEPNG_COMPILE_DISK*/
+
+void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings)
+{
+  lodepng_compress_settings_init(&settings->zlibsettings);
+  settings->filter_palette_zero = 1;
+  settings->filter_strategy = LFS_MINSUM;
+  settings->auto_convert = 1;
+  settings->force_palette = 0;
+  settings->predefined_filters = 0;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  settings->add_id = 0;
+  settings->text_compression = 1;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+}
+
+#endif /*LODEPNG_COMPILE_ENCODER*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+#ifdef LODEPNG_COMPILE_ERROR_TEXT
+/*
+This returns the description of a numerical error code in English. This is also
+the documentation of all the error codes.
+*/
+const char* lodepng_error_text(unsigned code)
+{
+  switch(code)
+  {
+    case 0: return "no error, everything went ok";
+    case 1: return "nothing done yet"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/
+    case 10: return "end of input memory reached without huffman end code"; /*while huffman decoding*/
+    case 11: return "error in code tree made it jump outside of huffman tree"; /*while huffman decoding*/
+    case 13: return "problem while processing dynamic deflate block";
+    case 14: return "problem while processing dynamic deflate block";
+    case 15: return "problem while processing dynamic deflate block";
+    case 16: return "unexisting code while processing dynamic deflate block";
+    case 17: return "end of out buffer memory reached while inflating";
+    case 18: return "invalid distance code while inflating";
+    case 19: return "end of out buffer memory reached while inflating";
+    case 20: return "invalid deflate block BTYPE encountered while decoding";
+    case 21: return "NLEN is not ones complement of LEN in a deflate block";
+     /*end of out buffer memory reached while inflating:
+     This can happen if the inflated deflate data is longer than the amount of bytes required to fill up
+     all the pixels of the image, given the color depth and image dimensions. Something that doesn't
+     happen in a normal, well encoded, PNG image.*/
+    case 22: return "end of out buffer memory reached while inflating";
+    case 23: return "end of in buffer memory reached while inflating";
+    case 24: return "invalid FCHECK in zlib header";
+    case 25: return "invalid compression method in zlib header";
+    case 26: return "FDICT encountered in zlib header while it's not used for PNG";
+    case 27: return "PNG file is smaller than a PNG header";
+    /*Checks the magic file header, the first 8 bytes of the PNG file*/
+    case 28: return "incorrect PNG signature, it's no PNG or corrupted";
+    case 29: return "first chunk is not the header chunk";
+    case 30: return "chunk length too large, chunk broken off at end of file";
+    case 31: return "illegal PNG color type or bpp";
+    case 32: return "illegal PNG compression method";
+    case 33: return "illegal PNG filter method";
+    case 34: return "illegal PNG interlace method";
+    case 35: return "chunk length of a chunk is too large or the chunk too small";
+    case 36: return "illegal PNG filter type encountered";
+    case 37: return "illegal bit depth for this color type given";
+    case 38: return "the palette is too big"; /*more than 256 colors*/
+    case 39: return "more palette alpha values given in tRNS chunk than there are colors in the palette";
+    case 40: return "tRNS chunk has wrong size for greyscale image";
+    case 41: return "tRNS chunk has wrong size for RGB image";
+    case 42: return "tRNS chunk appeared while it was not allowed for this color type";
+    case 43: return "bKGD chunk has wrong size for palette image";
+    case 44: return "bKGD chunk has wrong size for greyscale image";
+    case 45: return "bKGD chunk has wrong size for RGB image";
+    case 48: return "empty input buffer given to decoder. Maybe caused by non-existing file?";
+    case 49: return "jumped past memory while generating dynamic huffman tree";
+    case 50: return "jumped past memory while generating dynamic huffman tree";
+    case 51: return "jumped past memory while inflating huffman block";
+    case 52: return "jumped past memory while inflating";
+    case 53: return "size of zlib data too small";
+    case 54: return "repeat symbol in tree while there was no value symbol yet";
+    /*jumped past tree while generating huffman tree, this could be when the
+    tree will have more leaves than symbols after generating it out of the
+    given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/
+    case 55: return "jumped past tree while generating huffman tree";
+    case 56: return "given output image colortype or bitdepth not supported for color conversion";
+    case 57: return "invalid CRC encountered (checking CRC can be disabled)";
+    case 58: return "invalid ADLER32 encountered (checking ADLER32 can be disabled)";
+    case 59: return "requested color conversion not supported";
+    case 60: return "invalid window size given in the settings of the encoder (must be 0-32768)";
+    case 61: return "invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)";
+    /*LodePNG leaves the choice of RGB to greyscale conversion formula to the user.*/
+    case 62: return "conversion from color to greyscale not supported";
+    case 63: return "length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk"; /*(2^31-1)*/
+    /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/
+    case 64: return "the length of the END symbol 256 in the Huffman tree is 0";
+    case 66: return "the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes";
+    case 67: return "the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte";
+    case 68: return "tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors";
+    case 69: return "unknown chunk type with 'critical' flag encountered by the decoder";
+    case 71: return "unexisting interlace mode given to encoder (must be 0 or 1)";
+    case 72: return "while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)";
+    case 73: return "invalid tIME chunk size";
+    case 74: return "invalid pHYs chunk size";
+    /*length could be wrong, or data chopped off*/
+    case 75: return "no null termination char found while decoding text chunk";
+    case 76: return "iTXt chunk too short to contain required bytes";
+    case 77: return "integer overflow in buffer size";
+    case 78: return "failed to open file for reading"; /*file doesn't exist or couldn't be opened for reading*/
+    case 79: return "failed to open file for writing";
+    case 80: return "tried creating a tree of 0 symbols";
+    case 81: return "lazy matching at pos 0 is impossible";
+    case 82: return "color conversion to palette requested while a color isn't in palette";
+    case 83: return "memory allocation failed";
+    case 84: return "given image too small to contain all pixels to be encoded";
+    case 86: return "impossible offset in lz77 encoding (internal bug)";
+    case 87: return "must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined";
+    case 88: return "invalid filter strategy given for LodePNGEncoderSettings.filter_strategy";
+    case 89: return "text chunk keyword too short or long: must have size 1-79";
+    /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/
+    case 90: return "windowsize must be a power of two";
+    case 91: return "invalid decompressed idat size";
+    case 92: return "too many pixels, not supported";
+    case 93: return "zero width or height is invalid";
+    case 94: return "header chunk must have a size of 13 bytes";
+  }
+  return "unknown error code";
+}
+#endif /*LODEPNG_COMPILE_ERROR_TEXT*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* // C++ Wrapper                                                          // */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_CPP
+namespace lodepng
+{
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename)
+{
+  long size = lodepng_filesize(filename.c_str());
+  if(size < 0) return 78;
+  buffer.resize((size_t)size);
+  return size == 0 ? 0 : lodepng_buffer_file(&buffer[0], (size_t)size, filename.c_str());
+}
+
+/*write given buffer to the file, overwriting the file, it doesn't append to it.*/
+unsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename)
+{
+  return lodepng_save_file(buffer.empty() ? 0 : &buffer[0], buffer.size(), filename.c_str());
+}
+#endif /* LODEPNG_COMPILE_DISK */
+
+#ifdef LODEPNG_COMPILE_ZLIB
+#ifdef LODEPNG_COMPILE_DECODER
+unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
+                    const LodePNGDecompressSettings& settings)
+{
+  unsigned char* buffer = 0;
+  size_t buffersize = 0;
+  unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings);
+  if(buffer)
+  {
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
+                    const LodePNGDecompressSettings& settings)
+{
+  return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings);
+}
+#endif /* LODEPNG_COMPILE_DECODER */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
+                  const LodePNGCompressSettings& settings)
+{
+  unsigned char* buffer = 0;
+  size_t buffersize = 0;
+  unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings);
+  if(buffer)
+  {
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
+                  const LodePNGCompressSettings& settings)
+{
+  return compress(out, in.empty() ? 0 : &in[0], in.size(), settings);
+}
+#endif /* LODEPNG_COMPILE_ENCODER */
+#endif /* LODEPNG_COMPILE_ZLIB */
+
+
+#ifdef LODEPNG_COMPILE_PNG
+
+State::State()
+{
+  lodepng_state_init(this);
+}
+
+State::State(const State& other)
+{
+  lodepng_state_init(this);
+  lodepng_state_copy(this, &other);
+}
+
+State::~State()
+{
+  lodepng_state_cleanup(this);
+}
+
+State& State::operator=(const State& other)
+{
+  lodepng_state_copy(this, &other);
+  return *this;
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const unsigned char* in,
+                size_t insize, LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned char* buffer;
+  unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth);
+  if(buffer && !error)
+  {
+    State state;
+    state.info_raw.colortype = colortype;
+    state.info_raw.bitdepth = bitdepth;
+    size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                const std::vector<unsigned char>& in, LodePNGColorType colortype, unsigned bitdepth)
+{
+  return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth);
+}
+
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                State& state,
+                const unsigned char* in, size_t insize)
+{
+  unsigned char* buffer = NULL;
+  unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize);
+  if(buffer && !error)
+  {
+    size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+  }
+  lodepng_free(buffer);
+  return error;
+}
+
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                State& state,
+                const std::vector<unsigned char>& in)
+{
+  return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size());
+}
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const std::string& filename,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  std::vector<unsigned char> buffer;
+  unsigned error = load_file(buffer, filename);
+  if(error) return error;
+  return decode(out, w, h, buffer, colortype, bitdepth);
+}
+#endif /* LODEPNG_COMPILE_DECODER */
+#endif /* LODEPNG_COMPILE_DISK */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+unsigned encode(std::vector<unsigned char>& out, const unsigned char* in, unsigned w, unsigned h,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned char* buffer;
+  size_t buffersize;
+  unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth);
+  if(buffer)
+  {
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned encode(std::vector<unsigned char>& out,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;
+  return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);
+}
+
+unsigned encode(std::vector<unsigned char>& out,
+                const unsigned char* in, unsigned w, unsigned h,
+                State& state)
+{
+  unsigned char* buffer;
+  size_t buffersize;
+  unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state);
+  if(buffer)
+  {
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned encode(std::vector<unsigned char>& out,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                State& state)
+{
+  if(lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84;
+  return encode(out, in.empty() ? 0 : &in[0], w, h, state);
+}
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned encode(const std::string& filename,
+                const unsigned char* in, unsigned w, unsigned h,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  std::vector<unsigned char> buffer;
+  unsigned error = encode(buffer, in, w, h, colortype, bitdepth);
+  if(!error) error = save_file(buffer, filename);
+  return error;
+}
+
+unsigned encode(const std::string& filename,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;
+  return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);
+}
+#endif /* LODEPNG_COMPILE_DISK */
+#endif /* LODEPNG_COMPILE_ENCODER */
+#endif /* LODEPNG_COMPILE_PNG */
+} /* namespace lodepng */
+#endif /*LODEPNG_COMPILE_CPP*/
\ No newline at end of file
diff --git a/lodepng.h b/lodepng.h
new file mode 100644
index 0000000000000000000000000000000000000000..65b97e9a4261a07d2e188c91ad3eaa0db84ccbf4
--- /dev/null
+++ b/lodepng.h
@@ -0,0 +1,1761 @@
+/*
+LodePNG version 20161127
+
+Copyright (c) 2005-2016 Lode Vandevenne
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+    1. The origin of this software must not be misrepresented; you must not
+    claim that you wrote the original software. If you use this software
+    in a product, an acknowledgment in the product documentation would be
+    appreciated but is not required.
+
+    2. Altered source versions must be plainly marked as such, and must not be
+    misrepresented as being the original software.
+
+    3. This notice may not be removed or altered from any source
+    distribution.
+*/
+
+#ifndef LODEPNG_H
+#define LODEPNG_H
+
+#include <string.h> /*for size_t*/
+
+extern const char* LODEPNG_VERSION_STRING;
+
+/*
+The following #defines are used to create code sections. They can be disabled
+to disable code sections, which can give faster compile time and smaller binary.
+The "NO_COMPILE" defines are designed to be used to pass as defines to the
+compiler command to disable them without modifying this header, e.g.
+-DLODEPNG_NO_COMPILE_ZLIB for gcc.
+In addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to
+allow implementing a custom lodepng_crc32.
+*/
+/*deflate & zlib. If disabled, you must specify alternative zlib functions in
+the custom_zlib field of the compress and decompress settings*/
+#ifndef LODEPNG_NO_COMPILE_ZLIB
+#define LODEPNG_COMPILE_ZLIB
+#endif
+/*png encoder and png decoder*/
+#ifndef LODEPNG_NO_COMPILE_PNG
+#define LODEPNG_COMPILE_PNG
+#endif
+/*deflate&zlib decoder and png decoder*/
+#ifndef LODEPNG_NO_COMPILE_DECODER
+#define LODEPNG_COMPILE_DECODER
+#endif
+/*deflate&zlib encoder and png encoder*/
+#ifndef LODEPNG_NO_COMPILE_ENCODER
+#define LODEPNG_COMPILE_ENCODER
+#endif
+/*the optional built in harddisk file loading and saving functions*/
+#ifndef LODEPNG_NO_COMPILE_DISK
+#define LODEPNG_COMPILE_DISK
+#endif
+/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/
+#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS
+#define LODEPNG_COMPILE_ANCILLARY_CHUNKS
+#endif
+/*ability to convert error numerical codes to English text string*/
+#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT
+#define LODEPNG_COMPILE_ERROR_TEXT
+#endif
+/*Compile the default allocators (C's free, malloc and realloc). If you disable this,
+you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your
+source files with custom allocators.*/
+#ifndef LODEPNG_NO_COMPILE_ALLOCATORS
+#define LODEPNG_COMPILE_ALLOCATORS
+#endif
+/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/
+#ifdef __cplusplus
+#ifndef LODEPNG_NO_COMPILE_CPP
+#define LODEPNG_COMPILE_CPP
+#endif
+#endif
+
+#ifdef LODEPNG_COMPILE_CPP
+#include <vector>
+#include <string>
+#endif /*LODEPNG_COMPILE_CPP*/
+
+#ifdef LODEPNG_COMPILE_PNG
+/*The PNG color types (also used for raw).*/
+typedef enum LodePNGColorType
+{
+  LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/
+  LCT_RGB = 2, /*RGB: 8,16 bit*/
+  LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/
+  LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/
+  LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/
+} LodePNGColorType;
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*
+Converts PNG data in memory to raw pixel data.
+out: Output parameter. Pointer to buffer that will contain the raw pixel data.
+     After decoding, its size is w * h * (bytes per pixel) bytes larger than
+     initially. Bytes per pixel depends on colortype and bitdepth.
+     Must be freed after usage with free(*out).
+     Note: for 16-bit per channel colors, uses big endian format like PNG does.
+w: Output parameter. Pointer to width of pixel data.
+h: Output parameter. Pointer to height of pixel data.
+in: Memory buffer with the PNG file.
+insize: size of the in buffer.
+colortype: the desired color type for the raw output image. See explanation on PNG color types.
+bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types.
+Return value: LodePNG error code (0 means no error).
+*/
+unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h,
+                               const unsigned char* in, size_t insize,
+                               LodePNGColorType colortype, unsigned bitdepth);
+
+/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/
+unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h,
+                          const unsigned char* in, size_t insize);
+
+/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/
+unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h,
+                          const unsigned char* in, size_t insize);
+
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Load PNG from disk, from file with given name.
+Same as the other decode functions, but instead takes a filename as input.
+*/
+unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h,
+                             const char* filename,
+                             LodePNGColorType colortype, unsigned bitdepth);
+
+/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/
+unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h,
+                               const char* filename);
+
+/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/
+unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h,
+                               const char* filename);
+#endif /*LODEPNG_COMPILE_DISK*/
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*
+Converts raw pixel data into a PNG image in memory. The colortype and bitdepth
+  of the output PNG image cannot be chosen, they are automatically determined
+  by the colortype, bitdepth and content of the input pixel data.
+  Note: for 16-bit per channel colors, needs big endian format like PNG does.
+out: Output parameter. Pointer to buffer that will contain the PNG image data.
+     Must be freed after usage with free(*out).
+outsize: Output parameter. Pointer to the size in bytes of the out buffer.
+image: The raw pixel data to encode. The size of this buffer should be
+       w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth.
+w: width of the raw pixel data in pixels.
+h: height of the raw pixel data in pixels.
+colortype: the color type of the raw input image. See explanation on PNG color types.
+bitdepth: the bit depth of the raw input image. See explanation on PNG color types.
+Return value: LodePNG error code (0 means no error).
+*/
+unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize,
+                               const unsigned char* image, unsigned w, unsigned h,
+                               LodePNGColorType colortype, unsigned bitdepth);
+
+/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/
+unsigned lodepng_encode32(unsigned char** out, size_t* outsize,
+                          const unsigned char* image, unsigned w, unsigned h);
+
+/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/
+unsigned lodepng_encode24(unsigned char** out, size_t* outsize,
+                          const unsigned char* image, unsigned w, unsigned h);
+
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Converts raw pixel data into a PNG file on disk.
+Same as the other encode functions, but instead takes a filename as output.
+NOTE: This overwrites existing files without warning!
+*/
+unsigned lodepng_encode_file(const char* filename,
+                             const unsigned char* image, unsigned w, unsigned h,
+                             LodePNGColorType colortype, unsigned bitdepth);
+
+/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/
+unsigned lodepng_encode32_file(const char* filename,
+                               const unsigned char* image, unsigned w, unsigned h);
+
+/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/
+unsigned lodepng_encode24_file(const char* filename,
+                               const unsigned char* image, unsigned w, unsigned h);
+#endif /*LODEPNG_COMPILE_DISK*/
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+
+#ifdef LODEPNG_COMPILE_CPP
+namespace lodepng
+{
+#ifdef LODEPNG_COMPILE_DECODER
+/*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype
+is the format to output the pixels to. Default is RGBA 8-bit per channel.*/
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                const unsigned char* in, size_t insize,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                const std::vector<unsigned char>& in,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Converts PNG file from disk to raw pixel data in memory.
+Same as the other decode functions, but instead takes a filename as input.
+*/
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                const std::string& filename,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+#endif /* LODEPNG_COMPILE_DISK */
+#endif /* LODEPNG_COMPILE_DECODER */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*Same as lodepng_encode_memory, but encodes to an std::vector. colortype
+is that of the raw input data. The output PNG color type will be auto chosen.*/
+unsigned encode(std::vector<unsigned char>& out,
+                const unsigned char* in, unsigned w, unsigned h,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+unsigned encode(std::vector<unsigned char>& out,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Converts 32-bit RGBA raw pixel data into a PNG file on disk.
+Same as the other encode functions, but instead takes a filename as output.
+NOTE: This overwrites existing files without warning!
+*/
+unsigned encode(const std::string& filename,
+                const unsigned char* in, unsigned w, unsigned h,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+unsigned encode(const std::string& filename,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+#endif /* LODEPNG_COMPILE_DISK */
+#endif /* LODEPNG_COMPILE_ENCODER */
+} /* namespace lodepng */
+#endif /*LODEPNG_COMPILE_CPP*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+#ifdef LODEPNG_COMPILE_ERROR_TEXT
+/*Returns an English description of the numerical error code.*/
+const char* lodepng_error_text(unsigned code);
+#endif /*LODEPNG_COMPILE_ERROR_TEXT*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*Settings for zlib decompression*/
+typedef struct LodePNGDecompressSettings LodePNGDecompressSettings;
+struct LodePNGDecompressSettings
+{
+  unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/
+
+  /*use custom zlib decoder instead of built in one (default: null)*/
+  unsigned (*custom_zlib)(unsigned char**, size_t*,
+                          const unsigned char*, size_t,
+                          const LodePNGDecompressSettings*);
+  /*use custom deflate decoder instead of built in one (default: null)
+  if custom_zlib is used, custom_deflate is ignored since only the built in
+  zlib function will call custom_deflate*/
+  unsigned (*custom_inflate)(unsigned char**, size_t*,
+                             const unsigned char*, size_t,
+                             const LodePNGDecompressSettings*);
+
+  const void* custom_context; /*optional custom settings for custom functions*/
+};
+
+extern const LodePNGDecompressSettings lodepng_default_decompress_settings;
+void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*
+Settings for zlib compression. Tweaking these settings tweaks the balance
+between speed and compression ratio.
+*/
+typedef struct LodePNGCompressSettings LodePNGCompressSettings;
+struct LodePNGCompressSettings /*deflate = compress*/
+{
+  /*LZ77 related settings*/
+  unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/
+  unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/
+  unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/
+  unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/
+  unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/
+  unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/
+
+  /*use custom zlib encoder instead of built in one (default: null)*/
+  unsigned (*custom_zlib)(unsigned char**, size_t*,
+                          const unsigned char*, size_t,
+                          const LodePNGCompressSettings*);
+  /*use custom deflate encoder instead of built in one (default: null)
+  if custom_zlib is used, custom_deflate is ignored since only the built in
+  zlib function will call custom_deflate*/
+  unsigned (*custom_deflate)(unsigned char**, size_t*,
+                             const unsigned char*, size_t,
+                             const LodePNGCompressSettings*);
+
+  const void* custom_context; /*optional custom settings for custom functions*/
+};
+
+extern const LodePNGCompressSettings lodepng_default_compress_settings;
+void lodepng_compress_settings_init(LodePNGCompressSettings* settings);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#ifdef LODEPNG_COMPILE_PNG
+/*
+Color mode of an image. Contains all information required to decode the pixel
+bits to RGBA colors. This information is the same as used in the PNG file
+format, and is used both for PNG and raw image data in LodePNG.
+*/
+typedef struct LodePNGColorMode
+{
+  /*header (IHDR)*/
+  LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/
+  unsigned bitdepth;  /*bits per sample, see PNG standard or documentation further in this header file*/
+
+  /*
+  palette (PLTE and tRNS)
+
+  Dynamically allocated with the colors of the palette, including alpha.
+  When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use
+  lodepng_palette_clear, then for each color use lodepng_palette_add.
+  If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette.
+
+  When decoding, by default you can ignore this palette, since LodePNG already
+  fills the palette colors in the pixels of the raw RGBA output.
+
+  The palette is only supported for color type 3.
+  */
+  unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/
+  size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/
+
+  /*
+  transparent color key (tRNS)
+
+  This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit.
+  For greyscale PNGs, r, g and b will all 3 be set to the same.
+
+  When decoding, by default you can ignore this information, since LodePNG sets
+  pixels with this key to transparent already in the raw RGBA output.
+
+  The color key is only supported for color types 0 and 2.
+  */
+  unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/
+  unsigned key_r;       /*red/greyscale component of color key*/
+  unsigned key_g;       /*green component of color key*/
+  unsigned key_b;       /*blue component of color key*/
+} LodePNGColorMode;
+
+/*init, cleanup and copy functions to use with this struct*/
+void lodepng_color_mode_init(LodePNGColorMode* info);
+void lodepng_color_mode_cleanup(LodePNGColorMode* info);
+/*return value is error code (0 means no error)*/
+unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source);
+
+void lodepng_palette_clear(LodePNGColorMode* info);
+/*add 1 color to the palette*/
+unsigned lodepng_palette_add(LodePNGColorMode* info,
+                             unsigned char r, unsigned char g, unsigned char b, unsigned char a);
+
+/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/
+unsigned lodepng_get_bpp(const LodePNGColorMode* info);
+/*get the amount of color channels used, based on colortype in the struct.
+If a palette is used, it counts as 1 channel.*/
+unsigned lodepng_get_channels(const LodePNGColorMode* info);
+/*is it a greyscale type? (only colortype 0 or 4)*/
+unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info);
+/*has it got an alpha channel? (only colortype 2 or 6)*/
+unsigned lodepng_is_alpha_type(const LodePNGColorMode* info);
+/*has it got a palette? (only colortype 3)*/
+unsigned lodepng_is_palette_type(const LodePNGColorMode* info);
+/*only returns true if there is a palette and there is a value in the palette with alpha < 255.
+Loops through the palette to check this.*/
+unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info);
+/*
+Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image.
+Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels).
+Returns false if the image can only have opaque pixels.
+In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values,
+or if "key_defined" is true.
+*/
+unsigned lodepng_can_have_alpha(const LodePNGColorMode* info);
+/*Returns the byte size of a raw image buffer with given width, height and color mode*/
+size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color);
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+/*The information of a Time chunk in PNG.*/
+typedef struct LodePNGTime
+{
+  unsigned year;    /*2 bytes used (0-65535)*/
+  unsigned month;   /*1-12*/
+  unsigned day;     /*1-31*/
+  unsigned hour;    /*0-23*/
+  unsigned minute;  /*0-59*/
+  unsigned second;  /*0-60 (to allow for leap seconds)*/
+} LodePNGTime;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+/*Information about the PNG image, except pixels, width and height.*/
+typedef struct LodePNGInfo
+{
+  /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/
+  unsigned compression_method;/*compression method of the original file. Always 0.*/
+  unsigned filter_method;     /*filter method of the original file*/
+  unsigned interlace_method;  /*interlace method of the original file*/
+  LodePNGColorMode color;     /*color type and bits, palette and transparency of the PNG file*/
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  /*
+  suggested background color chunk (bKGD)
+  This color uses the same color mode as the PNG (except alpha channel), which can be 1-bit to 16-bit.
+
+  For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding
+  the encoder writes the red one. For palette PNGs: When decoding, the RGB value
+  will be stored, not a palette index. But when encoding, specify the index of
+  the palette in background_r, the other two are then ignored.
+
+  The decoder does not use this background color to edit the color of pixels.
+  */
+  unsigned background_defined; /*is a suggested background color given?*/
+  unsigned background_r;       /*red component of suggested background color*/
+  unsigned background_g;       /*green component of suggested background color*/
+  unsigned background_b;       /*blue component of suggested background color*/
+
+  /*
+  non-international text chunks (tEXt and zTXt)
+
+  The char** arrays each contain num strings. The actual messages are in
+  text_strings, while text_keys are keywords that give a short description what
+  the actual text represents, e.g. Title, Author, Description, or anything else.
+
+  A keyword is minimum 1 character and maximum 79 characters long. It's
+  discouraged to use a single line length longer than 79 characters for texts.
+
+  Don't allocate these text buffers yourself. Use the init/cleanup functions
+  correctly and use lodepng_add_text and lodepng_clear_text.
+  */
+  size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/
+  char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/
+  char** text_strings; /*the actual text*/
+
+  /*
+  international text chunks (iTXt)
+  Similar to the non-international text chunks, but with additional strings
+  "langtags" and "transkeys".
+  */
+  size_t itext_num; /*the amount of international texts in this PNG*/
+  char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/
+  char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/
+  char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/
+  char** itext_strings; /*the actual international text - UTF-8 string*/
+
+  /*time chunk (tIME)*/
+  unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/
+  LodePNGTime time;
+
+  /*phys chunk (pHYs)*/
+  unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/
+  unsigned phys_x; /*pixels per unit in x direction*/
+  unsigned phys_y; /*pixels per unit in y direction*/
+  unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/
+
+  /*
+  unknown chunks
+  There are 3 buffers, one for each position in the PNG where unknown chunks can appear
+  each buffer contains all unknown chunks for that position consecutively
+  The 3 buffers are the unknown chunks between certain critical chunks:
+  0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND
+  Do not allocate or traverse this data yourself. Use the chunk traversing functions declared
+  later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct.
+  */
+  unsigned char* unknown_chunks_data[3];
+  size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+} LodePNGInfo;
+
+/*init, cleanup and copy functions to use with this struct*/
+void lodepng_info_init(LodePNGInfo* info);
+void lodepng_info_cleanup(LodePNGInfo* info);
+/*return value is error code (0 means no error)*/
+unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source);
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/
+unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/
+
+void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/
+unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,
+                           const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+/*
+Converts raw buffer from one color type to another color type, based on
+LodePNGColorMode structs to describe the input and output color type.
+See the reference manual at the end of this header file to see which color conversions are supported.
+return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported)
+The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel
+of the output color type (lodepng_get_bpp).
+For < 8 bpp images, there should not be padding bits at the end of scanlines.
+For 16-bit per channel colors, uses big endian format like PNG does.
+Return value is LodePNG error code
+*/
+unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
+                         const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
+                         unsigned w, unsigned h);
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*
+Settings for the decoder. This contains settings for the PNG and the Zlib
+decoder, but not the Info settings from the Info structs.
+*/
+typedef struct LodePNGDecoderSettings
+{
+  LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/
+
+  unsigned ignore_crc; /*ignore CRC checksums*/
+
+  unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/
+  /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/
+  unsigned remember_unknown_chunks;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+} LodePNGDecoderSettings;
+
+void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/
+typedef enum LodePNGFilterStrategy
+{
+  /*every filter at zero*/
+  LFS_ZERO,
+  /*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/
+  LFS_MINSUM,
+  /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending
+  on the image, this is better or worse than minsum.*/
+  LFS_ENTROPY,
+  /*
+  Brute-force-search PNG filters by compressing each filter for each scanline.
+  Experimental, very slow, and only rarely gives better compression than MINSUM.
+  */
+  LFS_BRUTE_FORCE,
+  /*use predefined_filters buffer: you specify the filter type for each scanline*/
+  LFS_PREDEFINED
+} LodePNGFilterStrategy;
+
+/*Gives characteristics about the colors of the image, which helps decide which color model to use for encoding.
+Used internally by default if "auto_convert" is enabled. Public because it's useful for custom algorithms.*/
+typedef struct LodePNGColorProfile
+{
+  unsigned colored; /*not greyscale*/
+  unsigned key; /*image is not opaque and color key is possible instead of full alpha*/
+  unsigned short key_r; /*key values, always as 16-bit, in 8-bit case the byte is duplicated, e.g. 65535 means 255*/
+  unsigned short key_g;
+  unsigned short key_b;
+  unsigned alpha; /*image is not opaque and alpha channel or alpha palette required*/
+  unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/
+  unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/
+  unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for greyscale only. 16 if 16-bit per channel required.*/
+} LodePNGColorProfile;
+
+void lodepng_color_profile_init(LodePNGColorProfile* profile);
+
+/*Get a LodePNGColorProfile of the image.*/
+unsigned lodepng_get_color_profile(LodePNGColorProfile* profile,
+                                   const unsigned char* image, unsigned w, unsigned h,
+                                   const LodePNGColorMode* mode_in);
+/*The function LodePNG uses internally to decide the PNG color with auto_convert.
+Chooses an optimal color model, e.g. grey if only grey pixels, palette if < 256 colors, ...*/
+unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
+                                   const unsigned char* image, unsigned w, unsigned h,
+                                   const LodePNGColorMode* mode_in);
+
+/*Settings for the encoder.*/
+typedef struct LodePNGEncoderSettings
+{
+  LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/
+
+  unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/
+
+  /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than
+  8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to
+  completely follow the official PNG heuristic, filter_palette_zero must be true and
+  filter_strategy must be LFS_MINSUM*/
+  unsigned filter_palette_zero;
+  /*Which filter strategy to use when not using zeroes due to filter_palette_zero.
+  Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/
+  LodePNGFilterStrategy filter_strategy;
+  /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with
+  the same length as the amount of scanlines in the image, and each value must <= 5. You
+  have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero
+  must be set to 0 to ensure this is also used on palette or low bitdepth images.*/
+  const unsigned char* predefined_filters;
+
+  /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette).
+  If colortype is 3, PLTE is _always_ created.*/
+  unsigned force_palette;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  /*add LodePNG identifier and version as a text chunk, for debugging*/
+  unsigned add_id;
+  /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/
+  unsigned text_compression;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+} LodePNGEncoderSettings;
+
+void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+
+#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)
+/*The settings, state and information for extended encoding and decoding.*/
+typedef struct LodePNGState
+{
+#ifdef LODEPNG_COMPILE_DECODER
+  LodePNGDecoderSettings decoder; /*the decoding settings*/
+#endif /*LODEPNG_COMPILE_DECODER*/
+#ifdef LODEPNG_COMPILE_ENCODER
+  LodePNGEncoderSettings encoder; /*the encoding settings*/
+#endif /*LODEPNG_COMPILE_ENCODER*/
+  LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/
+  LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/
+  unsigned error;
+#ifdef LODEPNG_COMPILE_CPP
+  /* For the lodepng::State subclass. */
+  virtual ~LodePNGState(){}
+#endif
+} LodePNGState;
+
+/*init, cleanup and copy functions to use with this struct*/
+void lodepng_state_init(LodePNGState* state);
+void lodepng_state_cleanup(LodePNGState* state);
+void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source);
+#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*
+Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and
+getting much more information about the PNG image and color mode.
+*/
+unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
+                        LodePNGState* state,
+                        const unsigned char* in, size_t insize);
+
+/*
+Read the PNG header, but not the actual data. This returns only the information
+that is in the header chunk of the PNG, such as width, height and color type. The
+information is placed in the info_png field of the LodePNGState.
+*/
+unsigned lodepng_inspect(unsigned* w, unsigned* h,
+                         LodePNGState* state,
+                         const unsigned char* in, size_t insize);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/
+unsigned lodepng_encode(unsigned char** out, size_t* outsize,
+                        const unsigned char* image, unsigned w, unsigned h,
+                        LodePNGState* state);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+/*
+The lodepng_chunk functions are normally not needed, except to traverse the
+unknown chunks stored in the LodePNGInfo struct, or add new ones to it.
+It also allows traversing the chunks of an encoded PNG file yourself.
+
+PNG standard chunk naming conventions:
+First byte: uppercase = critical, lowercase = ancillary
+Second byte: uppercase = public, lowercase = private
+Third byte: must be uppercase
+Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy
+*/
+
+/*
+Gets the length of the data of the chunk. Total chunk length has 12 bytes more.
+There must be at least 4 bytes to read from. If the result value is too large,
+it may be corrupt data.
+*/
+unsigned lodepng_chunk_length(const unsigned char* chunk);
+
+/*puts the 4-byte type in null terminated string*/
+void lodepng_chunk_type(char type[5], const unsigned char* chunk);
+
+/*check if the type is the given type*/
+unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type);
+
+/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/
+unsigned char lodepng_chunk_ancillary(const unsigned char* chunk);
+
+/*0: public, 1: private (see PNG standard)*/
+unsigned char lodepng_chunk_private(const unsigned char* chunk);
+
+/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/
+unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk);
+
+/*get pointer to the data of the chunk, where the input points to the header of the chunk*/
+unsigned char* lodepng_chunk_data(unsigned char* chunk);
+const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk);
+
+/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/
+unsigned lodepng_chunk_check_crc(const unsigned char* chunk);
+
+/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/
+void lodepng_chunk_generate_crc(unsigned char* chunk);
+
+/*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/
+unsigned char* lodepng_chunk_next(unsigned char* chunk);
+const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk);
+
+/*
+Appends chunk to the data in out. The given chunk should already have its chunk header.
+The out variable and outlength are updated to reflect the new reallocated buffer.
+Returns error code (0 if it went ok)
+*/
+unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk);
+
+/*
+Appends new chunk to out. The chunk to append is given by giving its length, type
+and data separately. The type is a 4-letter string.
+The out variable and outlength are updated to reflect the new reallocated buffer.
+Returne error code (0 if it went ok)
+*/
+unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
+                              const char* type, const unsigned char* data);
+
+
+/*Calculate CRC32 of buffer*/
+unsigned lodepng_crc32(const unsigned char* buf, size_t len);
+#endif /*LODEPNG_COMPILE_PNG*/
+
+
+#ifdef LODEPNG_COMPILE_ZLIB
+/*
+This zlib part can be used independently to zlib compress and decompress a
+buffer. It cannot be used to create gzip files however, and it only supports the
+part of zlib that is required for PNG, it does not support dictionaries.
+*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/
+unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
+                         const unsigned char* in, size_t insize,
+                         const LodePNGDecompressSettings* settings);
+
+/*
+Decompresses Zlib data. Reallocates the out buffer and appends the data. The
+data must be according to the zlib specification.
+Either, *out must be NULL and *outsize must be 0, or, *out must be a valid
+buffer and *outsize its size in bytes. out must be freed by user after usage.
+*/
+unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize,
+                                 const unsigned char* in, size_t insize,
+                                 const LodePNGDecompressSettings* settings);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*
+Compresses data with Zlib. Reallocates the out buffer and appends the data.
+Zlib adds a small header and trailer around the deflate data.
+The data is output in the format of the zlib specification.
+Either, *out must be NULL and *outsize must be 0, or, *out must be a valid
+buffer and *outsize its size in bytes. out must be freed by user after usage.
+*/
+unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize,
+                               const unsigned char* in, size_t insize,
+                               const LodePNGCompressSettings* settings);
+
+/*
+Find length-limited Huffman code for given frequencies. This function is in the
+public interface only for tests, it's used internally by lodepng_deflate.
+*/
+unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,
+                                      size_t numcodes, unsigned maxbitlen);
+
+/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/
+unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
+                         const unsigned char* in, size_t insize,
+                         const LodePNGCompressSettings* settings);
+
+#endif /*LODEPNG_COMPILE_ENCODER*/
+#endif /*LODEPNG_COMPILE_ZLIB*/
+
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Load a file from disk into buffer. The function allocates the out buffer, and
+after usage you should free it.
+out: output parameter, contains pointer to loaded buffer.
+outsize: output parameter, size of the allocated out buffer
+filename: the path to the file to load
+return value: error code (0 means ok)
+*/
+unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename);
+
+/*
+Save a file from buffer to disk. Warning, if it exists, this function overwrites
+the file without warning!
+buffer: the buffer to write
+buffersize: size of the buffer to write
+filename: the path to the file to save to
+return value: error code (0 means ok)
+*/
+unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename);
+#endif /*LODEPNG_COMPILE_DISK*/
+
+#ifdef LODEPNG_COMPILE_CPP
+/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */
+namespace lodepng
+{
+#ifdef LODEPNG_COMPILE_PNG
+class State : public LodePNGState
+{
+  public:
+    State();
+    State(const State& other);
+    virtual ~State();
+    State& operator=(const State& other);
+};
+
+#ifdef LODEPNG_COMPILE_DECODER
+/* Same as other lodepng::decode, but using a State for more settings and information. */
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                State& state,
+                const unsigned char* in, size_t insize);
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                State& state,
+                const std::vector<unsigned char>& in);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/* Same as other lodepng::encode, but using a State for more settings and information. */
+unsigned encode(std::vector<unsigned char>& out,
+                const unsigned char* in, unsigned w, unsigned h,
+                State& state);
+unsigned encode(std::vector<unsigned char>& out,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                State& state);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Load a file from disk into an std::vector.
+return value: error code (0 means ok)
+*/
+unsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename);
+
+/*
+Save the binary data in an std::vector to a file on disk. The file is overwritten
+without warning.
+*/
+unsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename);
+#endif /* LODEPNG_COMPILE_DISK */
+#endif /* LODEPNG_COMPILE_PNG */
+
+#ifdef LODEPNG_COMPILE_ZLIB
+#ifdef LODEPNG_COMPILE_DECODER
+/* Zlib-decompress an unsigned char buffer */
+unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
+                    const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
+
+/* Zlib-decompress an std::vector */
+unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
+                    const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
+#endif /* LODEPNG_COMPILE_DECODER */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/* Zlib-compress an unsigned char buffer */
+unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
+                  const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
+
+/* Zlib-compress an std::vector */
+unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
+                  const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
+#endif /* LODEPNG_COMPILE_ENCODER */
+#endif /* LODEPNG_COMPILE_ZLIB */
+} /* namespace lodepng */
+#endif /*LODEPNG_COMPILE_CPP*/
+
+/*
+TODO:
+[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often
+[.] check compatibility with various compilers  - done but needs to be redone for every newer version
+[X] converting color to 16-bit per channel types
+[ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values)
+[ ] make sure encoder generates no chunks with size > (2^31)-1
+[ ] partial decoding (stream processing)
+[X] let the "isFullyOpaque" function check color keys and transparent palettes too
+[X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl"
+[ ] don't stop decoding on errors like 69, 57, 58 (make warnings)
+[ ] make warnings like: oob palette, checksum fail, data after iend, wrong/unknown crit chunk, no null terminator in text, ...
+[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes
+[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ...
+[ ] allow user to give data (void*) to custom allocator
+*/
+
+#endif /*LODEPNG_H inclusion guard*/
+
+/*
+LodePNG Documentation
+---------------------
+
+0. table of contents
+--------------------
+
+  1. about
+   1.1. supported features
+   1.2. features not supported
+  2. C and C++ version
+  3. security
+  4. decoding
+  5. encoding
+  6. color conversions
+    6.1. PNG color types
+    6.2. color conversions
+    6.3. padding bits
+    6.4. A note about 16-bits per channel and endianness
+  7. error values
+  8. chunks and PNG editing
+  9. compiler support
+  10. examples
+   10.1. decoder C++ example
+   10.2. decoder C example
+  11. state settings reference
+  12. changes
+  13. contact information
+
+
+1. about
+--------
+
+PNG is a file format to store raster images losslessly with good compression,
+supporting different color types and alpha channel.
+
+LodePNG is a PNG codec according to the Portable Network Graphics (PNG)
+Specification (Second Edition) - W3C Recommendation 10 November 2003.
+
+The specifications used are:
+
+*) Portable Network Graphics (PNG) Specification (Second Edition):
+     http://www.w3.org/TR/2003/REC-PNG-20031110
+*) RFC 1950 ZLIB Compressed Data Format version 3.3:
+     http://www.gzip.org/zlib/rfc-zlib.html
+*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3:
+     http://www.gzip.org/zlib/rfc-deflate.html
+
+The most recent version of LodePNG can currently be found at
+http://lodev.org/lodepng/
+
+LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds
+extra functionality.
+
+LodePNG exists out of two files:
+-lodepng.h: the header file for both C and C++
+-lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage
+
+If you want to start using LodePNG right away without reading this doc, get the
+examples from the LodePNG website to see how to use it in code, or check the
+smaller examples in chapter 13 here.
+
+LodePNG is simple but only supports the basic requirements. To achieve
+simplicity, the following design choices were made: There are no dependencies
+on any external library. There are functions to decode and encode a PNG with
+a single function call, and extended versions of these functions taking a
+LodePNGState struct allowing to specify or get more information. By default
+the colors of the raw image are always RGB or RGBA, no matter what color type
+the PNG file uses. To read and write files, there are simple functions to
+convert the files to/from buffers in memory.
+
+This all makes LodePNG suitable for loading textures in games, demos and small
+programs, ... It's less suitable for full fledged image editors, loading PNGs
+over network (it requires all the image data to be available before decoding can
+begin), life-critical systems, ...
+
+1.1. supported features
+-----------------------
+
+The following features are supported by the decoder:
+
+*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image,
+   or the same color type as the PNG
+*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image
+*) Adam7 interlace and deinterlace for any color type
+*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk
+*) support for alpha channels, including RGBA color model, translucent palettes and color keying
+*) zlib decompression (inflate)
+*) zlib compression (deflate)
+*) CRC32 and ADLER32 checksums
+*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks.
+*) the following chunks are supported (generated/interpreted) by both encoder and decoder:
+    IHDR: header information
+    PLTE: color palette
+    IDAT: pixel data
+    IEND: the final chunk
+    tRNS: transparency for palettized images
+    tEXt: textual information
+    zTXt: compressed textual information
+    iTXt: international textual information
+    bKGD: suggested background color
+    pHYs: physical dimensions
+    tIME: modification time
+
+1.2. features not supported
+---------------------------
+
+The following features are _not_ supported:
+
+*) some features needed to make a conformant PNG-Editor might be still missing.
+*) partial loading/stream processing. All data must be available and is processed in one call.
+*) The following public chunks are not supported but treated as unknown chunks by LodePNG
+    cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT
+   Some of these are not supported on purpose: LodePNG wants to provide the RGB values
+   stored in the pixels, not values modified by system dependent gamma or color models.
+
+
+2. C and C++ version
+--------------------
+
+The C version uses buffers allocated with alloc that you need to free()
+yourself. You need to use init and cleanup functions for each struct whenever
+using a struct from the C version to avoid exploits and memory leaks.
+
+The C++ version has extra functions with std::vectors in the interface and the
+lodepng::State class which is a LodePNGState with constructor and destructor.
+
+These files work without modification for both C and C++ compilers because all
+the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers
+ignore it, and the C code is made to compile both with strict ISO C90 and C++.
+
+To use the C++ version, you need to rename the source file to lodepng.cpp
+(instead of lodepng.c), and compile it with a C++ compiler.
+
+To use the C version, you need to rename the source file to lodepng.c (instead
+of lodepng.cpp), and compile it with a C compiler.
+
+
+3. Security
+-----------
+
+Even if carefully designed, it's always possible that LodePNG contains possible
+exploits. If you discover one, please let me know, and it will be fixed.
+
+When using LodePNG, care has to be taken with the C version of LodePNG, as well
+as the C-style structs when working with C++. The following conventions are used
+for all C-style structs:
+
+-if a struct has a corresponding init function, always call the init function when making a new one
+-if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks
+-if a struct has a corresponding copy function, use the copy function instead of "=".
+ The destination must also be inited already.
+
+
+4. Decoding
+-----------
+
+Decoding converts a PNG compressed image to a raw pixel buffer.
+
+Most documentation on using the decoder is at its declarations in the header
+above. For C, simple decoding can be done with functions such as
+lodepng_decode32, and more advanced decoding can be done with the struct
+LodePNGState and lodepng_decode. For C++, all decoding can be done with the
+various lodepng::decode functions, and lodepng::State can be used for advanced
+features.
+
+When using the LodePNGState, it uses the following fields for decoding:
+*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here
+*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get
+*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use
+
+LodePNGInfo info_png
+--------------------
+
+After decoding, this contains extra information of the PNG image, except the actual
+pixels, width and height because these are already gotten directly from the decoder
+functions.
+
+It contains for example the original color type of the PNG image, text comments,
+suggested background color, etc... More details about the LodePNGInfo struct are
+at its declaration documentation.
+
+LodePNGColorMode info_raw
+-------------------------
+
+When decoding, here you can specify which color type you want
+the resulting raw image to be. If this is different from the colortype of the
+PNG, then the decoder will automatically convert the result. This conversion
+always works, except if you want it to convert a color PNG to greyscale or to
+a palette with missing colors.
+
+By default, 32-bit color is used for the result.
+
+LodePNGDecoderSettings decoder
+------------------------------
+
+The settings can be used to ignore the errors created by invalid CRC and Adler32
+chunks, and to disable the decoding of tEXt chunks.
+
+There's also a setting color_convert, true by default. If false, no conversion
+is done, the resulting data will be as it was in the PNG (after decompression)
+and you'll have to puzzle the colors of the pixels together yourself using the
+color type information in the LodePNGInfo.
+
+
+5. Encoding
+-----------
+
+Encoding converts a raw pixel buffer to a PNG compressed image.
+
+Most documentation on using the encoder is at its declarations in the header
+above. For C, simple encoding can be done with functions such as
+lodepng_encode32, and more advanced decoding can be done with the struct
+LodePNGState and lodepng_encode. For C++, all encoding can be done with the
+various lodepng::encode functions, and lodepng::State can be used for advanced
+features.
+
+Like the decoder, the encoder can also give errors. However it gives less errors
+since the encoder input is trusted, the decoder input (a PNG image that could
+be forged by anyone) is not trusted.
+
+When using the LodePNGState, it uses the following fields for encoding:
+*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be.
+*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has
+*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use
+
+LodePNGInfo info_png
+--------------------
+
+When encoding, you use this the opposite way as when decoding: for encoding,
+you fill in the values you want the PNG to have before encoding. By default it's
+not needed to specify a color type for the PNG since it's automatically chosen,
+but it's possible to choose it yourself given the right settings.
+
+The encoder will not always exactly match the LodePNGInfo struct you give,
+it tries as close as possible. Some things are ignored by the encoder. The
+encoder uses, for example, the following settings from it when applicable:
+colortype and bitdepth, text chunks, time chunk, the color key, the palette, the
+background color, the interlace method, unknown chunks, ...
+
+When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk.
+If the palette contains any colors for which the alpha channel is not 255 (so
+there are translucent colors in the palette), it'll add a tRNS chunk.
+
+LodePNGColorMode info_raw
+-------------------------
+
+You specify the color type of the raw image that you give to the input here,
+including a possible transparent color key and palette you happen to be using in
+your raw image data.
+
+By default, 32-bit color is assumed, meaning your input has to be in RGBA
+format with 4 bytes (unsigned chars) per pixel.
+
+LodePNGEncoderSettings encoder
+------------------------------
+
+The following settings are supported (some are in sub-structs):
+*) auto_convert: when this option is enabled, the encoder will
+automatically choose the smallest possible color mode (including color key) that
+can encode the colors of all pixels without information loss.
+*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree,
+   2 = dynamic huffman tree (best compression). Should be 2 for proper
+   compression.
+*) use_lz77: whether or not to use LZ77 for compressed block types. Should be
+   true for proper compression.
+*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value
+   2048 by default, but can be set to 32768 for better, but slow, compression.
+*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE
+   chunk if force_palette is true. This can used as suggested palette to convert
+   to by viewers that don't support more than 256 colors (if those still exist)
+*) add_id: add text chunk "Encoder: LodePNG <version>" to the image.
+*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks.
+  zTXt chunks use zlib compression on the text. This gives a smaller result on
+  large texts but a larger result on small texts (such as a single program name).
+  It's all tEXt or all zTXt though, there's no separate setting per text yet.
+
+
+6. color conversions
+--------------------
+
+An important thing to note about LodePNG, is that the color type of the PNG, and
+the color type of the raw image, are completely independent. By default, when
+you decode a PNG, you get the result as a raw image in the color type you want,
+no matter whether the PNG was encoded with a palette, greyscale or RGBA color.
+And if you encode an image, by default LodePNG will automatically choose the PNG
+color type that gives good compression based on the values of colors and amount
+of colors in the image. It can be configured to let you control it instead as
+well, though.
+
+To be able to do this, LodePNG does conversions from one color mode to another.
+It can convert from almost any color type to any other color type, except the
+following conversions: RGB to greyscale is not supported, and converting to a
+palette when the palette doesn't have a required color is not supported. This is
+not supported on purpose: this is information loss which requires a color
+reduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey
+is easy, but there are multiple ways if you want to give some channels more
+weight).
+
+By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB
+color, no matter what color type the PNG has. And by default when encoding,
+LodePNG automatically picks the best color model for the output PNG, and expects
+the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control
+the color format of the images yourself, you can skip this chapter.
+
+6.1. PNG color types
+--------------------
+
+A PNG image can have many color types, ranging from 1-bit color to 64-bit color,
+as well as palettized color modes. After the zlib decompression and unfiltering
+in the PNG image is done, the raw pixel data will have that color type and thus
+a certain amount of bits per pixel. If you want the output raw image after
+decoding to have another color type, a conversion is done by LodePNG.
+
+The PNG specification gives the following color types:
+
+0: greyscale, bit depths 1, 2, 4, 8, 16
+2: RGB, bit depths 8 and 16
+3: palette, bit depths 1, 2, 4 and 8
+4: greyscale with alpha, bit depths 8 and 16
+6: RGBA, bit depths 8 and 16
+
+Bit depth is the amount of bits per pixel per color channel. So the total amount
+of bits per pixel is: amount of channels * bitdepth.
+
+6.2. color conversions
+----------------------
+
+As explained in the sections about the encoder and decoder, you can specify
+color types and bit depths in info_png and info_raw to change the default
+behaviour.
+
+If, when decoding, you want the raw image to be something else than the default,
+you need to set the color type and bit depth you want in the LodePNGColorMode,
+or the parameters colortype and bitdepth of the simple decoding function.
+
+If, when encoding, you use another color type than the default in the raw input
+image, you need to specify its color type and bit depth in the LodePNGColorMode
+of the raw image, or use the parameters colortype and bitdepth of the simple
+encoding function.
+
+If, when encoding, you don't want LodePNG to choose the output PNG color type
+but control it yourself, you need to set auto_convert in the encoder settings
+to false, and specify the color type you want in the LodePNGInfo of the
+encoder (including palette: it can generate a palette if auto_convert is true,
+otherwise not).
+
+If the input and output color type differ (whether user chosen or auto chosen),
+LodePNG will do a color conversion, which follows the rules below, and may
+sometimes result in an error.
+
+To avoid some confusion:
+-the decoder converts from PNG to raw image
+-the encoder converts from raw image to PNG
+-the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image
+-the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG
+-when encoding, the color type in LodePNGInfo is ignored if auto_convert
+ is enabled, it is automatically generated instead
+-when decoding, the color type in LodePNGInfo is set by the decoder to that of the original
+ PNG image, but it can be ignored since the raw image has the color type you requested instead
+-if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion
+ between the color types is done if the color types are supported. If it is not
+ supported, an error is returned. If the types are the same, no conversion is done.
+-even though some conversions aren't supported, LodePNG supports loading PNGs from any
+ colortype and saving PNGs to any colortype, sometimes it just requires preparing
+ the raw image correctly before encoding.
+-both encoder and decoder use the same color converter.
+
+Non supported color conversions:
+-color to greyscale: no error is thrown, but the result will look ugly because
+only the red channel is taken
+-anything to palette when that palette does not have that color in it: in this
+case an error is thrown
+
+Supported color conversions:
+-anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA
+-any grey or grey+alpha, to grey or grey+alpha
+-anything to a palette, as long as the palette has the requested colors in it
+-removing alpha channel
+-higher to smaller bitdepth, and vice versa
+
+If you want no color conversion to be done (e.g. for speed or control):
+-In the encoder, you can make it save a PNG with any color type by giving the
+raw color mode and LodePNGInfo the same color mode, and setting auto_convert to
+false.
+-In the decoder, you can make it store the pixel data in the same color type
+as the PNG has, by setting the color_convert setting to false. Settings in
+info_raw are then ignored.
+
+The function lodepng_convert does the color conversion. It is available in the
+interface but normally isn't needed since the encoder and decoder already call
+it.
+
+6.3. padding bits
+-----------------
+
+In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines
+have a bit amount that isn't a multiple of 8, then padding bits are used so that each
+scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output.
+The raw input image you give to the encoder, and the raw output image you get from the decoder
+will NOT have these padding bits, e.g. in the case of a 1-bit image with a width
+of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte,
+not the first bit of a new byte.
+
+6.4. A note about 16-bits per channel and endianness
+----------------------------------------------------
+
+LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like
+for any other color format. The 16-bit values are stored in big endian (most
+significant byte first) in these arrays. This is the opposite order of the
+little endian used by x86 CPU's.
+
+LodePNG always uses big endian because the PNG file format does so internally.
+Conversions to other formats than PNG uses internally are not supported by
+LodePNG on purpose, there are myriads of formats, including endianness of 16-bit
+colors, the order in which you store R, G, B and A, and so on. Supporting and
+converting to/from all that is outside the scope of LodePNG.
+
+This may mean that, depending on your use case, you may want to convert the big
+endian output of LodePNG to little endian with a for loop. This is certainly not
+always needed, many applications and libraries support big endian 16-bit colors
+anyway, but it means you cannot simply cast the unsigned char* buffer to an
+unsigned short* buffer on x86 CPUs.
+
+
+7. error values
+---------------
+
+All functions in LodePNG that return an error code, return 0 if everything went
+OK, or a non-zero code if there was an error.
+
+The meaning of the LodePNG error values can be retrieved with the function
+lodepng_error_text: given the numerical error code, it returns a description
+of the error in English as a string.
+
+Check the implementation of lodepng_error_text to see the meaning of each code.
+
+
+8. chunks and PNG editing
+-------------------------
+
+If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG
+editor that should follow the rules about handling of unknown chunks, or if your
+program is able to read other types of chunks than the ones handled by LodePNG,
+then that's possible with the chunk functions of LodePNG.
+
+A PNG chunk has the following layout:
+
+4 bytes length
+4 bytes type name
+length bytes data
+4 bytes CRC
+
+8.1. iterating through chunks
+-----------------------------
+
+If you have a buffer containing the PNG image data, then the first chunk (the
+IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the
+signature of the PNG and are not part of a chunk. But if you start at byte 8
+then you have a chunk, and can check the following things of it.
+
+NOTE: none of these functions check for memory buffer boundaries. To avoid
+exploits, always make sure the buffer contains all the data of the chunks.
+When using lodepng_chunk_next, make sure the returned value is within the
+allocated memory.
+
+unsigned lodepng_chunk_length(const unsigned char* chunk):
+
+Get the length of the chunk's data. The total chunk length is this length + 12.
+
+void lodepng_chunk_type(char type[5], const unsigned char* chunk):
+unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type):
+
+Get the type of the chunk or compare if it's a certain type
+
+unsigned char lodepng_chunk_critical(const unsigned char* chunk):
+unsigned char lodepng_chunk_private(const unsigned char* chunk):
+unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk):
+
+Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are).
+Check if the chunk is private (public chunks are part of the standard, private ones not).
+Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical
+chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your
+program doesn't handle that type of unknown chunk.
+
+unsigned char* lodepng_chunk_data(unsigned char* chunk):
+const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk):
+
+Get a pointer to the start of the data of the chunk.
+
+unsigned lodepng_chunk_check_crc(const unsigned char* chunk):
+void lodepng_chunk_generate_crc(unsigned char* chunk):
+
+Check if the crc is correct or generate a correct one.
+
+unsigned char* lodepng_chunk_next(unsigned char* chunk):
+const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk):
+
+Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these
+functions do no boundary checking of the allocated data whatsoever, so make sure there is enough
+data available in the buffer to be able to go to the next chunk.
+
+unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk):
+unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
+                              const char* type, const unsigned char* data):
+
+These functions are used to create new chunks that are appended to the data in *out that has
+length *outlength. The append function appends an existing chunk to the new data. The create
+function creates a new chunk with the given parameters and appends it. Type is the 4-letter
+name of the chunk.
+
+8.2. chunks in info_png
+-----------------------
+
+The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3
+buffers (each with size) to contain 3 types of unknown chunks:
+the ones that come before the PLTE chunk, the ones that come between the PLTE
+and the IDAT chunks, and the ones that come after the IDAT chunks.
+It's necessary to make the distionction between these 3 cases because the PNG
+standard forces to keep the ordering of unknown chunks compared to the critical
+chunks, but does not force any other ordering rules.
+
+info_png.unknown_chunks_data[0] is the chunks before PLTE
+info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT
+info_png.unknown_chunks_data[2] is the chunks after IDAT
+
+The chunks in these 3 buffers can be iterated through and read by using the same
+way described in the previous subchapter.
+
+When using the decoder to decode a PNG, you can make it store all unknown chunks
+if you set the option settings.remember_unknown_chunks to 1. By default, this
+option is off (0).
+
+The encoder will always encode unknown chunks that are stored in the info_png.
+If you need it to add a particular chunk that isn't known by LodePNG, you can
+use lodepng_chunk_append or lodepng_chunk_create to the chunk data in
+info_png.unknown_chunks_data[x].
+
+Chunks that are known by LodePNG should not be added in that way. E.g. to make
+LodePNG add a bKGD chunk, set background_defined to true and add the correct
+parameters there instead.
+
+
+9. compiler support
+-------------------
+
+No libraries other than the current standard C library are needed to compile
+LodePNG. For the C++ version, only the standard C++ library is needed on top.
+Add the files lodepng.c(pp) and lodepng.h to your project, include
+lodepng.h where needed, and your program can read/write PNG files.
+
+It is compatible with C90 and up, and C++03 and up.
+
+If performance is important, use optimization when compiling! For both the
+encoder and decoder, this makes a large difference.
+
+Make sure that LodePNG is compiled with the same compiler of the same version
+and with the same settings as the rest of the program, or the interfaces with
+std::vectors and std::strings in C++ can be incompatible.
+
+CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets.
+
+*) gcc and g++
+
+LodePNG is developed in gcc so this compiler is natively supported. It gives no
+warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++
+version 4.7.1 on Linux, 32-bit and 64-bit.
+
+*) Clang
+
+Fully supported and warning-free.
+
+*) Mingw
+
+The Mingw compiler (a port of gcc for Windows) should be fully supported by
+LodePNG.
+
+*) Visual Studio and Visual C++ Express Edition
+
+LodePNG should be warning-free with warning level W4. Two warnings were disabled
+with pragmas though: warning 4244 about implicit conversions, and warning 4996
+where it wants to use a non-standard function fopen_s instead of the standard C
+fopen.
+
+Visual Studio may want "stdafx.h" files to be included in each source file and
+give an error "unexpected end of file while looking for precompiled header".
+This is not standard C++ and will not be added to the stock LodePNG. You can
+disable it for lodepng.cpp only by right clicking it, Properties, C/C++,
+Precompiled Headers, and set it to Not Using Precompiled Headers there.
+
+NOTE: Modern versions of VS should be fully supported, but old versions, e.g.
+VS6, are not guaranteed to work.
+
+*) Compilers on Macintosh
+
+LodePNG has been reported to work both with gcc and LLVM for Macintosh, both for
+C and C++.
+
+*) Other Compilers
+
+If you encounter problems on any compilers, feel free to let me know and I may
+try to fix it if the compiler is modern and standards complient.
+
+
+10. examples
+------------
+
+This decoder example shows the most basic usage of LodePNG. More complex
+examples can be found on the LodePNG website.
+
+10.1. decoder C++ example
+-------------------------
+
+#include "lodepng.h"
+#include <iostream>
+
+int main(int argc, char *argv[])
+{
+  const char* filename = argc > 1 ? argv[1] : "test.png";
+
+  //load and decode
+  std::vector<unsigned char> image;
+  unsigned width, height;
+  unsigned error = lodepng::decode(image, width, height, filename);
+
+  //if there's an error, display it
+  if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl;
+
+  //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ...
+}
+
+10.2. decoder C example
+-----------------------
+
+#include "lodepng.h"
+
+int main(int argc, char *argv[])
+{
+  unsigned error;
+  unsigned char* image;
+  size_t width, height;
+  const char* filename = argc > 1 ? argv[1] : "test.png";
+
+  error = lodepng_decode32_file(&image, &width, &height, filename);
+
+  if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error));
+
+  / * use image here * /
+
+  free(image);
+  return 0;
+}
+
+11. state settings reference
+----------------------------
+
+A quick reference of some settings to set on the LodePNGState
+
+For decoding:
+
+state.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums
+state.decoder.zlibsettings.custom_...: use custom inflate function
+state.decoder.ignore_crc: ignore CRC checksums
+state.decoder.color_convert: convert internal PNG color to chosen one
+state.decoder.read_text_chunks: whether to read in text metadata chunks
+state.decoder.remember_unknown_chunks: whether to read in unknown chunks
+state.info_raw.colortype: desired color type for decoded image
+state.info_raw.bitdepth: desired bit depth for decoded image
+state.info_raw....: more color settings, see struct LodePNGColorMode
+state.info_png....: no settings for decoder but ouput, see struct LodePNGInfo
+
+For encoding:
+
+state.encoder.zlibsettings.btype: disable compression by setting it to 0
+state.encoder.zlibsettings.use_lz77: use LZ77 in compression
+state.encoder.zlibsettings.windowsize: tweak LZ77 windowsize
+state.encoder.zlibsettings.minmatch: tweak min LZ77 length to match
+state.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching
+state.encoder.zlibsettings.lazymatching: try one more LZ77 matching
+state.encoder.zlibsettings.custom_...: use custom deflate function
+state.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png
+state.encoder.filter_palette_zero: PNG filter strategy for palette
+state.encoder.filter_strategy: PNG filter strategy to encode with
+state.encoder.force_palette: add palette even if not encoding to one
+state.encoder.add_id: add LodePNG identifier and version as a text chunk
+state.encoder.text_compression: use compressed text chunks for metadata
+state.info_raw.colortype: color type of raw input image you provide
+state.info_raw.bitdepth: bit depth of raw input image you provide
+state.info_raw: more color settings, see struct LodePNGColorMode
+state.info_png.color.colortype: desired color type if auto_convert is false
+state.info_png.color.bitdepth: desired bit depth if auto_convert is false
+state.info_png.color....: more color settings, see struct LodePNGColorMode
+state.info_png....: more PNG related settings, see struct LodePNGInfo
+
+
+12. changes
+-----------
+
+The version number of LodePNG is the date of the change given in the format
+yyyymmdd.
+
+Some changes aren't backwards compatible. Those are indicated with a (!)
+symbol.
+
+*) 27 nov 2016: grey+alpha auto color model detection bugfix
+*) 18 apr 2016: Changed qsort to custom stable sort (for platforms w/o qsort).
+*) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within
+   the limits of pure C90).
+*) 08 dec 2015: Made load_file function return error if file can't be opened.
+*) 24 okt 2015: Bugfix with decoding to palette output.
+*) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding.
+*) 23 aug 2014: Reduced needless memory usage of decoder.
+*) 28 jun 2014: Removed fix_png setting, always support palette OOB for
+    simplicity. Made ColorProfile public.
+*) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization.
+*) 22 dec 2013: Power of two windowsize required for optimization.
+*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key.
+*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png).
+*) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_"
+    prefix for the custom allocators and made it possible with a new #define to
+    use custom ones in your project without needing to change lodepng's code.
+*) 28 jan 2013: Bugfix with color key.
+*) 27 okt 2012: Tweaks in text chunk keyword length error handling.
+*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode.
+    (no palette). Better deflate tree encoding. New compression tweak settings.
+    Faster color conversions while decoding. Some internal cleanups.
+*) 23 sep 2012: Reduced warnings in Visual Studio a little bit.
+*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions
+    and made it work with function pointers instead.
+*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc
+    and free functions and toggle #defines from compiler flags. Small fixes.
+*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible.
+*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed
+    redundant C++ codec classes. Reduced amount of structs. Everything changed,
+    but it is cleaner now imho and functionality remains the same. Also fixed
+    several bugs and shrunk the implementation code. Made new samples.
+*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best
+    PNG color model and bit depth, based on the amount and type of colors of the
+    raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color.
+*) 9 okt 2011: simpler hash chain implementation for the encoder.
+*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching.
+*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking.
+    A bug with the PNG filtertype heuristic was fixed, so that it chooses much
+    better ones (it's quite significant). A setting to do an experimental, slow,
+    brute force search for PNG filter types is added.
+*) 17 aug 2011 (!): changed some C zlib related function names.
+*) 16 aug 2011: made the code less wide (max 120 characters per line).
+*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors.
+*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled.
+*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman
+    to optimize long sequences of zeros.
+*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and
+    LodePNG_InfoColor_canHaveAlpha functions for convenience.
+*) 7 nov 2010: added LodePNG_error_text function to get error code description.
+*) 30 okt 2010: made decoding slightly faster
+*) 26 okt 2010: (!) changed some C function and struct names (more consistent).
+     Reorganized the documentation and the declaration order in the header.
+*) 08 aug 2010: only changed some comments and external samples.
+*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version.
+*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers.
+*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could
+    read by ignoring the problem but windows apps couldn't.
+*) 06 jun 2008: added more error checks for out of memory cases.
+*) 26 apr 2008: added a few more checks here and there to ensure more safety.
+*) 06 mar 2008: crash with encoding of strings fixed
+*) 02 feb 2008: support for international text chunks added (iTXt)
+*) 23 jan 2008: small cleanups, and #defines to divide code in sections
+*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor.
+*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder.
+*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added
+    Also various fixes, such as in the deflate and the padding bits code.
+*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved
+    filtering code of encoder.
+*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A
+    C++ wrapper around this provides an interface almost identical to before.
+    Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code
+    are together in these files but it works both for C and C++ compilers.
+*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks
+*) 30 aug 2007: bug fixed which makes this Borland C++ compatible
+*) 09 aug 2007: some VS2005 warnings removed again
+*) 21 jul 2007: deflate code placed in new namespace separate from zlib code
+*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images
+*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing
+    invalid std::vector element [0] fixed, and level 3 and 4 warnings removed
+*) 02 jun 2007: made the encoder add a tag with version by default
+*) 27 may 2007: zlib and png code separated (but still in the same file),
+    simple encoder/decoder functions added for more simple usage cases
+*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69),
+    moved some examples from here to lodepng_examples.cpp
+*) 12 may 2007: palette decoding bug fixed
+*) 24 apr 2007: changed the license from BSD to the zlib license
+*) 11 mar 2007: very simple addition: ability to encode bKGD chunks.
+*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding
+    palettized PNG images. Plus little interface change with palette and texts.
+*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes.
+    Fixed a bug where the end code of a block had length 0 in the Huffman tree.
+*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented
+    and supported by the encoder, resulting in smaller PNGs at the output.
+*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone.
+*) 24 jan 2007: gave encoder an error interface. Added color conversion from any
+    greyscale type to 8-bit greyscale with or without alpha.
+*) 21 jan 2007: (!) Totally changed the interface. It allows more color types
+    to convert to and is more uniform. See the manual for how it works now.
+*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days:
+    encode/decode custom tEXt chunks, separate classes for zlib & deflate, and
+    at last made the decoder give errors for incorrect Adler32 or Crc.
+*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel.
+*) 29 dec 2006: Added support for encoding images without alpha channel, and
+    cleaned out code as well as making certain parts faster.
+*) 28 dec 2006: Added "Settings" to the encoder.
+*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now.
+    Removed some code duplication in the decoder. Fixed little bug in an example.
+*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter.
+    Fixed a bug of the decoder with 16-bit per color.
+*) 15 okt 2006: Changed documentation structure
+*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the
+    given image buffer, however for now it's not compressed.
+*) 08 sep 2006: (!) Changed to interface with a Decoder class
+*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different
+    way. Renamed decodePNG to decodePNGGeneric.
+*) 29 jul 2006: (!) Changed the interface: image info is now returned as a
+    struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy.
+*) 28 jul 2006: Cleaned the code and added new error checks.
+    Corrected terminology "deflate" into "inflate".
+*) 23 jun 2006: Added SDL example in the documentation in the header, this
+    example allows easy debugging by displaying the PNG and its transparency.
+*) 22 jun 2006: (!) Changed way to obtain error value. Added
+    loadFile function for convenience. Made decodePNG32 faster.
+*) 21 jun 2006: (!) Changed type of info vector to unsigned.
+    Changed position of palette in info vector. Fixed an important bug that
+    happened on PNGs with an uncompressed block.
+*) 16 jun 2006: Internally changed unsigned into unsigned where
+    needed, and performed some optimizations.
+*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them
+    in LodePNG namespace. Changed the order of the parameters. Rewrote the
+    documentation in the header. Renamed files to lodepng.cpp and lodepng.h
+*) 22 apr 2006: Optimized and improved some code
+*) 07 sep 2005: (!) Changed to std::vector interface
+*) 12 aug 2005: Initial release (C++, decoder only)
+
+
+13. contact information
+-----------------------
+
+Feel free to contact me with suggestions, problems, comments, ... concerning
+LodePNG. If you encounter a PNG image that doesn't work properly with this
+decoder, feel free to send it and I'll use it to find and fix the problem.
+
+My email address is (puzzle the account and domain together with an @ symbol):
+Domain: gmail dot com.
+Account: lode dot vandevenne.
+
+
+Copyright (c) 2005-2016 Lode Vandevenne
+*/#pragma once
diff --git a/pch.h b/pch.h
index 7e942adaad1edc57d5a14a1d59b59322e8c52cdd..777e3f335c2071a2a2f9cadc1fdfd07203ec3260 100644
--- a/pch.h
+++ b/pch.h
@@ -35,13 +35,19 @@
 #include "AccountListItem.h"
 #include "AccountListItemsViewModel.h"
 #include "AccountsViewModel.h"
+#include "Call.h"
 #include "Contact.h"
 #include "ContactListModel.h"
 #include "Conversation.h"
+#include "RingDevice.h"
+#include "RingDeviceItem.h"
+#include "RingDeviceItemsViewModel.h"
 #include "UserModel.h"
 #include "MainPage.xaml.h"
 #include "SmartPanelItem.h"
 #include "SmartPanelItemsViewModel.h"
+#include "ContactRequestItem.h"
+#include "ContactRequestItemsViewModel.h"
 
 /* ensure to be accessed from anywhere */
 #include "RingD.h"
@@ -49,6 +55,7 @@
 #include "Utils.h"
 #include "UserPreferences.h"
 #include "VCardUtils.h"
+#include "ResourceManager.h"
 
 /* video */
 #include "Video.h"
@@ -57,4 +64,7 @@
 #include "VideoRendererManager.h"
 
 /* audio */
-#include "Ringtone.h"
\ No newline at end of file
+#include "Ringtone.h"
+
+/* custom controls */
+#include "TextBlockExtension.h"
\ No newline at end of file
diff --git a/resource.h b/resource.h
new file mode 100644
index 0000000000000000000000000000000000000000..82699c5981ad18572ec29eddc0c26d8bb7729d06
--- /dev/null
+++ b/resource.h
@@ -0,0 +1,14 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by ring-client-uwp.rc
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        101
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1001
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
diff --git a/ring-client-uwp.rc b/ring-client-uwp.rc
new file mode 100644
index 0000000000000000000000000000000000000000..15f6baff57c8b6631c71d4a068b6ecee5864028e
Binary files /dev/null and b/ring-client-uwp.rc differ
diff --git a/ring-client-uwp.sln b/ring-client-uwp.sln
index c6a0c18dd03071b1bbab9cadb12cd8df32df9a3c..2e3a3b1f2c99b2a5606fe4ba05cf86d3d99c3781 100644
--- a/ring-client-uwp.sln
+++ b/ring-client-uwp.sln
@@ -175,6 +175,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpjproject", "..\ring-dae
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libyuv", "..\ring-daemon\contrib\build\pjproject\third_party\build\yuv\libyuv.vcxproj", "{6AC9B65F-0862-4A5C-8A9D-141516993130}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "argon", "argon", "{2D82BD63-5C7C-4552-8118-D261E785C994}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2Ref", "..\ring-daemon\contrib\build\argon2\vs2015\Argon2Ref\Argon2Ref.vcxproj", "{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|ARM = Debug|ARM
@@ -231,8 +235,11 @@ Global
 		ReleaseLTO|ARM = ReleaseLTO|ARM
 		ReleaseLTO|x64 = ReleaseLTO|x64
 		ReleaseLTO|x86 = ReleaseLTO|x86
+		ReleaseStatic|ARM = ReleaseStatic|ARM
 		Release-Static|ARM = Release-Static|ARM
+		ReleaseStatic|x64 = ReleaseStatic|x64
 		Release-Static|x64 = Release-Static|x64
+		ReleaseStatic|x86 = ReleaseStatic|x86
 		Release-Static|x86 = Release-Static|x86
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
@@ -398,12 +405,21 @@ Global
 		{90928671-346F-42E4-934F-7A7A512A2D11}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{90928671-346F-42E4-934F-7A7A512A2D11}.ReleaseLTO|x86.Build.0 = Release|Win32
 		{90928671-346F-42E4-934F-7A7A512A2D11}.ReleaseLTO|x86.Deploy.0 = Release|Win32
+		{90928671-346F-42E4-934F-7A7A512A2D11}.ReleaseStatic|ARM.ActiveCfg = Release|ARM
+		{90928671-346F-42E4-934F-7A7A512A2D11}.ReleaseStatic|ARM.Build.0 = Release|ARM
+		{90928671-346F-42E4-934F-7A7A512A2D11}.ReleaseStatic|ARM.Deploy.0 = Release|ARM
 		{90928671-346F-42E4-934F-7A7A512A2D11}.Release-Static|ARM.ActiveCfg = Release|ARM
 		{90928671-346F-42E4-934F-7A7A512A2D11}.Release-Static|ARM.Build.0 = Release|ARM
 		{90928671-346F-42E4-934F-7A7A512A2D11}.Release-Static|ARM.Deploy.0 = Release|ARM
+		{90928671-346F-42E4-934F-7A7A512A2D11}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{90928671-346F-42E4-934F-7A7A512A2D11}.ReleaseStatic|x64.Build.0 = Release|x64
+		{90928671-346F-42E4-934F-7A7A512A2D11}.ReleaseStatic|x64.Deploy.0 = Release|x64
 		{90928671-346F-42E4-934F-7A7A512A2D11}.Release-Static|x64.ActiveCfg = Release|x64
 		{90928671-346F-42E4-934F-7A7A512A2D11}.Release-Static|x64.Build.0 = Release|x64
 		{90928671-346F-42E4-934F-7A7A512A2D11}.Release-Static|x64.Deploy.0 = Release|x64
+		{90928671-346F-42E4-934F-7A7A512A2D11}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{90928671-346F-42E4-934F-7A7A512A2D11}.ReleaseStatic|x86.Build.0 = Release|Win32
+		{90928671-346F-42E4-934F-7A7A512A2D11}.ReleaseStatic|x86.Deploy.0 = Release|Win32
 		{90928671-346F-42E4-934F-7A7A512A2D11}.Release-Static|x86.ActiveCfg = Release|Win32
 		{90928671-346F-42E4-934F-7A7A512A2D11}.Release-Static|x86.Build.0 = Release|Win32
 		{90928671-346F-42E4-934F-7A7A512A2D11}.Release-Static|x86.Deploy.0 = Release|Win32
@@ -511,10 +527,16 @@ Global
 		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.ReleaseLTO|x64.Build.0 = ReleaseLib|x64
 		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.ReleaseLTO|x86.ActiveCfg = ReleaseLib|Win32
 		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.ReleaseLTO|x86.Build.0 = ReleaseLib|Win32
+		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.ReleaseStatic|ARM.ActiveCfg = Release|x64
+		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.ReleaseStatic|ARM.Build.0 = Release|x64
 		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.Release-Static|ARM.ActiveCfg = ReleaseLib|x64
 		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.Release-Static|ARM.Build.0 = ReleaseLib|x64
+		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.ReleaseStatic|x64.Build.0 = Release|x64
 		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.Release-Static|x64.ActiveCfg = ReleaseLib|x64
 		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.Release-Static|x64.Build.0 = ReleaseLib|x64
+		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.Release-Static|x86.ActiveCfg = ReleaseLib|Win32
 		{79F8DE42-595D-49D9-A66F-55244FD9DCC3}.Release-Static|x86.Build.0 = ReleaseLib|Win32
 		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -620,9 +642,15 @@ Global
 		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.Release-Static|x64.Build.0 = Release-Static|x64
+		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{DA0E03ED-53A7-4050-8A85-90541C5509F8}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -729,10 +757,16 @@ Global
 		{6227F51A-1498-4C4A-B213-F6FDED605125}.ReleaseLTO|x64.Build.0 = ReleaseDLL|x64
 		{6227F51A-1498-4C4A-B213-F6FDED605125}.ReleaseLTO|x86.ActiveCfg = ReleaseDLL|Win32
 		{6227F51A-1498-4C4A-B213-F6FDED605125}.ReleaseLTO|x86.Build.0 = ReleaseDLL|Win32
+		{6227F51A-1498-4C4A-B213-F6FDED605125}.ReleaseStatic|ARM.ActiveCfg = ReleaseDLL|Win32
+		{6227F51A-1498-4C4A-B213-F6FDED605125}.ReleaseStatic|ARM.Build.0 = ReleaseDLL|Win32
 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Release-Static|ARM.ActiveCfg = DebugDLL|x64
 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Release-Static|ARM.Build.0 = DebugDLL|x64
+		{6227F51A-1498-4C4A-B213-F6FDED605125}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{6227F51A-1498-4C4A-B213-F6FDED605125}.ReleaseStatic|x64.Build.0 = Release|x64
 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Release-Static|x64.ActiveCfg = ReleaseDLL|x64
 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Release-Static|x64.Build.0 = ReleaseDLL|x64
+		{6227F51A-1498-4C4A-B213-F6FDED605125}.ReleaseStatic|x86.ActiveCfg = ReleaseDLL|Win32
+		{6227F51A-1498-4C4A-B213-F6FDED605125}.ReleaseStatic|x86.Build.0 = ReleaseDLL|Win32
 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Release-Static|x86.ActiveCfg = ReleaseDLL|Win32
 		{6227F51A-1498-4C4A-B213-F6FDED605125}.Release-Static|x86.Build.0 = ReleaseDLL|Win32
 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -839,10 +873,16 @@ Global
 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.ReleaseLTO|x64.Build.0 = ReleaseDLL|x64
 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.ReleaseLTO|x86.ActiveCfg = ReleaseDLL|Win32
 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.ReleaseLTO|x86.Build.0 = ReleaseDLL|Win32
+		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.ReleaseStatic|ARM.ActiveCfg = ReleaseDLL|Win32
+		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.ReleaseStatic|ARM.Build.0 = ReleaseDLL|Win32
 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Release-Static|ARM.ActiveCfg = DebugDLL|x64
 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Release-Static|ARM.Build.0 = DebugDLL|x64
+		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.ReleaseStatic|x64.Build.0 = Release|x64
 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Release-Static|x64.ActiveCfg = ReleaseDLL|x64
 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Release-Static|x64.Build.0 = ReleaseDLL|x64
+		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.ReleaseStatic|x86.ActiveCfg = ReleaseDLL|Win32
+		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.ReleaseStatic|x86.Build.0 = ReleaseDLL|Win32
 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Release-Static|x86.ActiveCfg = ReleaseDLL|Win32
 		{9C2C266D-35A3-465F-A297-0E21D54E5C89}.Release-Static|x86.Build.0 = ReleaseDLL|Win32
 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -949,10 +989,16 @@ Global
 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.ReleaseLTO|x64.Build.0 = ReleaseDLL|x64
 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.ReleaseLTO|x86.ActiveCfg = ReleaseDLL|Win32
 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.ReleaseLTO|x86.Build.0 = ReleaseDLL|Win32
+		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.ReleaseStatic|ARM.ActiveCfg = ReleaseDLL|Win32
+		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.ReleaseStatic|ARM.Build.0 = ReleaseDLL|Win32
 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Release-Static|ARM.ActiveCfg = DebugDLL|x64
 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Release-Static|ARM.Build.0 = DebugDLL|x64
+		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.ReleaseStatic|x64.Build.0 = Release|x64
 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Release-Static|x64.ActiveCfg = ReleaseDLL|x64
 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Release-Static|x64.Build.0 = ReleaseDLL|x64
+		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.ReleaseStatic|x86.ActiveCfg = ReleaseDLL|Win32
+		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.ReleaseStatic|x86.Build.0 = ReleaseDLL|Win32
 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Release-Static|x86.ActiveCfg = ReleaseDLL|Win32
 		{1D3EEF7A-D248-48C0-B6B5-ECA229FE4B3D}.Release-Static|x86.Build.0 = ReleaseDLL|Win32
 		{C00D492D-9474-4F78-80BF-86F6F337E81B}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -1061,10 +1107,16 @@ Global
 		{C00D492D-9474-4F78-80BF-86F6F337E81B}.ReleaseLTO|x64.Build.0 = Release|x64
 		{C00D492D-9474-4F78-80BF-86F6F337E81B}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{C00D492D-9474-4F78-80BF-86F6F337E81B}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{C00D492D-9474-4F78-80BF-86F6F337E81B}.ReleaseStatic|ARM.ActiveCfg = Release|Win32
+		{C00D492D-9474-4F78-80BF-86F6F337E81B}.ReleaseStatic|ARM.Build.0 = Release|Win32
 		{C00D492D-9474-4F78-80BF-86F6F337E81B}.Release-Static|ARM.ActiveCfg = Release|x64
 		{C00D492D-9474-4F78-80BF-86F6F337E81B}.Release-Static|ARM.Build.0 = Release|x64
+		{C00D492D-9474-4F78-80BF-86F6F337E81B}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{C00D492D-9474-4F78-80BF-86F6F337E81B}.ReleaseStatic|x64.Build.0 = Release|x64
 		{C00D492D-9474-4F78-80BF-86F6F337E81B}.Release-Static|x64.ActiveCfg = Release|x64
 		{C00D492D-9474-4F78-80BF-86F6F337E81B}.Release-Static|x64.Build.0 = Release|x64
+		{C00D492D-9474-4F78-80BF-86F6F337E81B}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{C00D492D-9474-4F78-80BF-86F6F337E81B}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{C00D492D-9474-4F78-80BF-86F6F337E81B}.Release-Static|x86.ActiveCfg = Release|Win32
 		{C00D492D-9474-4F78-80BF-86F6F337E81B}.Release-Static|x86.Build.0 = Release|Win32
 		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -1173,10 +1225,16 @@ Global
 		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.ReleaseLTO|x64.Build.0 = Release|x64
 		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.ReleaseStatic|ARM.ActiveCfg = Release|Win32
+		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.ReleaseStatic|ARM.Build.0 = Release|Win32
 		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.Release-Static|ARM.ActiveCfg = Release|x64
 		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.Release-Static|ARM.Build.0 = Release|x64
+		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.ReleaseStatic|x64.Build.0 = Release|x64
 		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.Release-Static|x64.ActiveCfg = Release|x64
 		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.Release-Static|x64.Build.0 = Release|x64
+		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.Release-Static|x86.ActiveCfg = Release|Win32
 		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893}.Release-Static|x86.Build.0 = Release|Win32
 		{711397CE-E5D5-467D-9457-8716C047E50C}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -1285,10 +1343,16 @@ Global
 		{711397CE-E5D5-467D-9457-8716C047E50C}.ReleaseLTO|x64.Build.0 = Release|x64
 		{711397CE-E5D5-467D-9457-8716C047E50C}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{711397CE-E5D5-467D-9457-8716C047E50C}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{711397CE-E5D5-467D-9457-8716C047E50C}.ReleaseStatic|ARM.ActiveCfg = Release|Win32
+		{711397CE-E5D5-467D-9457-8716C047E50C}.ReleaseStatic|ARM.Build.0 = Release|Win32
 		{711397CE-E5D5-467D-9457-8716C047E50C}.Release-Static|ARM.ActiveCfg = Release|x64
 		{711397CE-E5D5-467D-9457-8716C047E50C}.Release-Static|ARM.Build.0 = Release|x64
+		{711397CE-E5D5-467D-9457-8716C047E50C}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{711397CE-E5D5-467D-9457-8716C047E50C}.ReleaseStatic|x64.Build.0 = Release|x64
 		{711397CE-E5D5-467D-9457-8716C047E50C}.Release-Static|x64.ActiveCfg = Release|x64
 		{711397CE-E5D5-467D-9457-8716C047E50C}.Release-Static|x64.Build.0 = Release|x64
+		{711397CE-E5D5-467D-9457-8716C047E50C}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{711397CE-E5D5-467D-9457-8716C047E50C}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{711397CE-E5D5-467D-9457-8716C047E50C}.Release-Static|x86.ActiveCfg = Release|Win32
 		{711397CE-E5D5-467D-9457-8716C047E50C}.Release-Static|x86.Build.0 = Release|Win32
 		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -1397,10 +1461,16 @@ Global
 		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.ReleaseLTO|x64.Build.0 = Release|x64
 		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.ReleaseStatic|ARM.ActiveCfg = Release|Win32
+		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.ReleaseStatic|ARM.Build.0 = Release|Win32
 		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.Release-Static|ARM.ActiveCfg = Release|x64
 		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.Release-Static|ARM.Build.0 = Release|x64
+		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.ReleaseStatic|x64.Build.0 = Release|x64
 		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.Release-Static|x64.ActiveCfg = Release|x64
 		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.Release-Static|x64.Build.0 = Release|x64
+		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.Release-Static|x86.ActiveCfg = Release|Win32
 		{2B85EA05-086B-4DF6-A140-DF52BDAEEEEA}.Release-Static|x86.Build.0 = Release|Win32
 		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -1509,10 +1579,16 @@ Global
 		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.ReleaseLTO|x64.Build.0 = Release|x64
 		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.ReleaseStatic|ARM.ActiveCfg = Release|Win32
+		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.ReleaseStatic|ARM.Build.0 = Release|Win32
 		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.Release-Static|ARM.ActiveCfg = Release|x64
 		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.Release-Static|ARM.Build.0 = Release|x64
+		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.ReleaseStatic|x64.Build.0 = Release|x64
 		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.Release-Static|x64.ActiveCfg = Release|x64
 		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.Release-Static|x64.Build.0 = Release|x64
+		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.Release-Static|x86.ActiveCfg = Release|Win32
 		{36A40B5B-FBAD-4830-9F74-7B4E5788B7A6}.Release-Static|x86.Build.0 = Release|Win32
 		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -1618,10 +1694,16 @@ Global
 		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseLTO|x64.Build.0 = ReleaseLTO|x64
 		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseLTO|x86.ActiveCfg = ReleaseLTO|Win32
 		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseLTO|x86.Build.0 = ReleaseLTO|Win32
+		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseStatic|ARM.ActiveCfg = ReleaseLTO|x64
+		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseStatic|ARM.Build.0 = ReleaseLTO|x64
 		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.Release-Static|ARM.ActiveCfg = DebugDLL|x64
 		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.Release-Static|ARM.Build.0 = DebugDLL|x64
+		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseStatic|x64.ActiveCfg = ReleaseLTO|x64
+		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseStatic|x64.Build.0 = ReleaseLTO|x64
 		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.Release-Static|x64.ActiveCfg = ReleaseLTO|x64
 		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.Release-Static|x64.Build.0 = ReleaseLTO|x64
+		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseStatic|x86.ActiveCfg = ReleaseDLL|Win32
+		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseStatic|x86.Build.0 = ReleaseDLL|Win32
 		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.Release-Static|x86.ActiveCfg = ReleaseLTO|Win32
 		{02B94302-23D6-43EF-8865-95CDE99D5DC2}.Release-Static|x86.Build.0 = ReleaseLTO|Win32
 		{6F610EE8-7F59-4191-AB88-F63843267C02}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -1725,10 +1807,16 @@ Global
 		{6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseLTO|x64.Build.0 = ReleaseLTO|x64
 		{6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseLTO|x86.ActiveCfg = ReleaseLTO|Win32
 		{6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseLTO|x86.Build.0 = ReleaseLTO|Win32
+		{6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseStatic|ARM.ActiveCfg = ReleaseDLLStaticDeps|x64
+		{6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseStatic|ARM.Build.0 = ReleaseDLLStaticDeps|x64
 		{6F610EE8-7F59-4191-AB88-F63843267C02}.Release-Static|ARM.ActiveCfg = DebugDLL|x64
 		{6F610EE8-7F59-4191-AB88-F63843267C02}.Release-Static|ARM.Build.0 = DebugDLL|x64
+		{6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseStatic|x64.ActiveCfg = ReleaseDLLStaticDeps|x64
+		{6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseStatic|x64.Build.0 = ReleaseDLLStaticDeps|x64
 		{6F610EE8-7F59-4191-AB88-F63843267C02}.Release-Static|x64.ActiveCfg = ReleaseLTO|x64
 		{6F610EE8-7F59-4191-AB88-F63843267C02}.Release-Static|x64.Build.0 = ReleaseLTO|x64
+		{6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseStatic|x86.ActiveCfg = ReleaseDLLStaticDeps|Win32
+		{6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseStatic|x86.Build.0 = ReleaseDLLStaticDeps|Win32
 		{6F610EE8-7F59-4191-AB88-F63843267C02}.Release-Static|x86.ActiveCfg = ReleaseLTO|Win32
 		{6F610EE8-7F59-4191-AB88-F63843267C02}.Release-Static|x86.Build.0 = ReleaseLTO|Win32
 		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -1834,10 +1922,16 @@ Global
 		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseLTO|x64.Build.0 = ReleaseLTO|x64
 		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseLTO|x86.ActiveCfg = ReleaseLTO|Win32
 		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseLTO|x86.Build.0 = ReleaseLTO|Win32
+		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseStatic|ARM.ActiveCfg = ReleaseLTO|x64
+		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseStatic|ARM.Build.0 = ReleaseLTO|x64
 		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Release-Static|ARM.ActiveCfg = DebugDLL|x64
 		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Release-Static|ARM.Build.0 = DebugDLL|x64
+		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseStatic|x64.ActiveCfg = ReleaseLTO|x64
+		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseStatic|x64.Build.0 = ReleaseLTO|x64
 		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Release-Static|x64.ActiveCfg = ReleaseLTO|x64
 		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Release-Static|x64.Build.0 = ReleaseLTO|x64
+		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseStatic|x86.ActiveCfg = ReleaseDLL|Win32
+		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseStatic|x86.Build.0 = ReleaseDLL|Win32
 		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Release-Static|x86.ActiveCfg = ReleaseLTO|Win32
 		{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Release-Static|x86.Build.0 = ReleaseLTO|Win32
 		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -1943,10 +2037,16 @@ Global
 		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseLTO|x64.Build.0 = ReleaseLTO|x64
 		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseLTO|x86.ActiveCfg = ReleaseLTO|Win32
 		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseLTO|x86.Build.0 = ReleaseLTO|Win32
+		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseStatic|ARM.ActiveCfg = ReleaseLTO|x64
+		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseStatic|ARM.Build.0 = ReleaseLTO|x64
 		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Release-Static|ARM.ActiveCfg = DebugDLL|x64
 		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Release-Static|ARM.Build.0 = DebugDLL|x64
+		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseStatic|x64.ActiveCfg = ReleaseLTO|x64
+		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseStatic|x64.Build.0 = ReleaseLTO|x64
 		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Release-Static|x64.ActiveCfg = ReleaseLTO|x64
 		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Release-Static|x64.Build.0 = ReleaseLTO|x64
+		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseStatic|x86.ActiveCfg = ReleaseDLL|Win32
+		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseStatic|x86.Build.0 = ReleaseDLL|Win32
 		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Release-Static|x86.ActiveCfg = ReleaseLTO|Win32
 		{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Release-Static|x86.Build.0 = ReleaseLTO|Win32
 		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -2050,10 +2150,16 @@ Global
 		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseLTO|x64.Build.0 = ReleaseLTO|x64
 		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseLTO|x86.ActiveCfg = ReleaseLTO|Win32
 		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseLTO|x86.Build.0 = ReleaseLTO|Win32
+		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseStatic|ARM.ActiveCfg = ReleaseDLLStaticDeps|x64
+		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseStatic|ARM.Build.0 = ReleaseDLLStaticDeps|x64
 		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Release-Static|ARM.ActiveCfg = DebugDLL|x64
 		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Release-Static|ARM.Build.0 = DebugDLL|x64
+		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseStatic|x64.ActiveCfg = ReleaseDLLStaticDeps|x64
+		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseStatic|x64.Build.0 = ReleaseDLLStaticDeps|x64
 		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Release-Static|x64.ActiveCfg = ReleaseLTO|x64
 		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Release-Static|x64.Build.0 = ReleaseLTO|x64
+		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseStatic|x86.ActiveCfg = ReleaseDLLStaticDeps|Win32
+		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseStatic|x86.Build.0 = ReleaseDLLStaticDeps|Win32
 		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Release-Static|x86.ActiveCfg = ReleaseLTO|Win32
 		{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Release-Static|x86.Build.0 = ReleaseLTO|Win32
 		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -2159,10 +2265,16 @@ Global
 		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.ReleaseLTO|x64.Build.0 = ReleaseLTO|x64
 		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.ReleaseLTO|x86.ActiveCfg = ReleaseLTO|Win32
 		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.ReleaseLTO|x86.Build.0 = ReleaseLTO|Win32
+		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.ReleaseStatic|ARM.ActiveCfg = ReleaseLTO|x64
+		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.ReleaseStatic|ARM.Build.0 = ReleaseLTO|x64
 		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.Release-Static|ARM.ActiveCfg = DebugDLL|x64
 		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.Release-Static|ARM.Build.0 = DebugDLL|x64
+		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.ReleaseStatic|x64.ActiveCfg = ReleaseLTO|x64
+		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.ReleaseStatic|x64.Build.0 = ReleaseLTO|x64
 		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.Release-Static|x64.ActiveCfg = ReleaseLTO|x64
 		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.Release-Static|x64.Build.0 = ReleaseLTO|x64
+		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.ReleaseStatic|x86.ActiveCfg = ReleaseDLL|Win32
+		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.ReleaseStatic|x86.Build.0 = ReleaseDLL|Win32
 		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.Release-Static|x86.ActiveCfg = ReleaseLTO|Win32
 		{CB8BB76F-D3FF-434E-A85E-7FFC0893EC9B}.Release-Static|x86.Build.0 = ReleaseLTO|Win32
 		{122A2EA4-B283-4241-9655-786DE78283B2}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -2271,10 +2383,16 @@ Global
 		{122A2EA4-B283-4241-9655-786DE78283B2}.ReleaseLTO|x64.Build.0 = Release|x64
 		{122A2EA4-B283-4241-9655-786DE78283B2}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{122A2EA4-B283-4241-9655-786DE78283B2}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{122A2EA4-B283-4241-9655-786DE78283B2}.ReleaseStatic|ARM.ActiveCfg = Release|Win32
+		{122A2EA4-B283-4241-9655-786DE78283B2}.ReleaseStatic|ARM.Build.0 = Release|Win32
 		{122A2EA4-B283-4241-9655-786DE78283B2}.Release-Static|ARM.ActiveCfg = Release|x64
 		{122A2EA4-B283-4241-9655-786DE78283B2}.Release-Static|ARM.Build.0 = Release|x64
+		{122A2EA4-B283-4241-9655-786DE78283B2}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{122A2EA4-B283-4241-9655-786DE78283B2}.ReleaseStatic|x64.Build.0 = Release|x64
 		{122A2EA4-B283-4241-9655-786DE78283B2}.Release-Static|x64.ActiveCfg = Release|x64
 		{122A2EA4-B283-4241-9655-786DE78283B2}.Release-Static|x64.Build.0 = Release|x64
+		{122A2EA4-B283-4241-9655-786DE78283B2}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{122A2EA4-B283-4241-9655-786DE78283B2}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{122A2EA4-B283-4241-9655-786DE78283B2}.Release-Static|x86.ActiveCfg = Release|Win32
 		{122A2EA4-B283-4241-9655-786DE78283B2}.Release-Static|x86.Build.0 = Release|Win32
 		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -2383,10 +2501,16 @@ Global
 		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.ReleaseLTO|x64.Build.0 = Release|x64
 		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.ReleaseStatic|ARM.ActiveCfg = Release|Win32
+		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.ReleaseStatic|ARM.Build.0 = Release|Win32
 		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.Release-Static|ARM.ActiveCfg = Release|x64
 		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.Release-Static|ARM.Build.0 = Release|x64
+		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.ReleaseStatic|x64.Build.0 = Release|x64
 		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.Release-Static|x64.ActiveCfg = Release|x64
 		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.Release-Static|x64.Build.0 = Release|x64
+		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.Release-Static|x86.ActiveCfg = Release|Win32
 		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}.Release-Static|x86.Build.0 = Release|Win32
 		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -2495,10 +2619,16 @@ Global
 		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.ReleaseLTO|x64.Build.0 = Release|x64
 		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.ReleaseStatic|ARM.ActiveCfg = Release|Win32
+		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.ReleaseStatic|ARM.Build.0 = Release|Win32
 		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.Release-Static|ARM.ActiveCfg = Release|x64
 		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.Release-Static|ARM.Build.0 = Release|x64
+		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.ReleaseStatic|x64.Build.0 = Release|x64
 		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.Release-Static|x64.ActiveCfg = Release|x64
 		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.Release-Static|x64.Build.0 = Release|x64
+		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.Release-Static|x86.ActiveCfg = Release|Win32
 		{0C4EAC26-4AAC-3525-BA45-916F44CFD660}.Release-Static|x86.Build.0 = Release|Win32
 		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -2605,10 +2735,16 @@ Global
 		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseLTO|x64.Build.0 = Release|x64
 		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseStatic|ARM.ActiveCfg = DLL-Import Release|x64
+		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseStatic|ARM.Build.0 = DLL-Import Release|x64
 		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release-Static|ARM.ActiveCfg = Release|x64
 		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release-Static|ARM.Build.0 = Release|x64
+		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseStatic|x64.Build.0 = Release|x64
 		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release-Static|x64.ActiveCfg = Release|x64
 		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release-Static|x64.Build.0 = Release|x64
+		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release-Static|x86.ActiveCfg = Release|Win32
 		{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release-Static|x86.Build.0 = Release|Win32
 		{6BD59A09-0768-40D3-A04B-10F95555689B}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -2717,10 +2853,16 @@ Global
 		{6BD59A09-0768-40D3-A04B-10F95555689B}.ReleaseLTO|x64.Build.0 = Release|x64
 		{6BD59A09-0768-40D3-A04B-10F95555689B}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{6BD59A09-0768-40D3-A04B-10F95555689B}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{6BD59A09-0768-40D3-A04B-10F95555689B}.ReleaseStatic|ARM.ActiveCfg = Release|Win32
+		{6BD59A09-0768-40D3-A04B-10F95555689B}.ReleaseStatic|ARM.Build.0 = Release|Win32
 		{6BD59A09-0768-40D3-A04B-10F95555689B}.Release-Static|ARM.ActiveCfg = Release|x64
 		{6BD59A09-0768-40D3-A04B-10F95555689B}.Release-Static|ARM.Build.0 = Release|x64
+		{6BD59A09-0768-40D3-A04B-10F95555689B}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{6BD59A09-0768-40D3-A04B-10F95555689B}.ReleaseStatic|x64.Build.0 = Release|x64
 		{6BD59A09-0768-40D3-A04B-10F95555689B}.Release-Static|x64.ActiveCfg = Release|x64
 		{6BD59A09-0768-40D3-A04B-10F95555689B}.Release-Static|x64.Build.0 = Release|x64
+		{6BD59A09-0768-40D3-A04B-10F95555689B}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{6BD59A09-0768-40D3-A04B-10F95555689B}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{6BD59A09-0768-40D3-A04B-10F95555689B}.Release-Static|x86.ActiveCfg = Release|Win32
 		{6BD59A09-0768-40D3-A04B-10F95555689B}.Release-Static|x86.Build.0 = Release|Win32
 		{23913386-5333-4C93-B3F0-0227AFF77B49}.Debug|ARM.ActiveCfg = Debug|ARM
@@ -2819,10 +2961,16 @@ Global
 		{23913386-5333-4C93-B3F0-0227AFF77B49}.ReleaseLTO|x64.Build.0 = Release|x64
 		{23913386-5333-4C93-B3F0-0227AFF77B49}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{23913386-5333-4C93-B3F0-0227AFF77B49}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{23913386-5333-4C93-B3F0-0227AFF77B49}.ReleaseStatic|ARM.ActiveCfg = Release|ARM
+		{23913386-5333-4C93-B3F0-0227AFF77B49}.ReleaseStatic|ARM.Build.0 = Release|ARM
 		{23913386-5333-4C93-B3F0-0227AFF77B49}.Release-Static|ARM.ActiveCfg = Release|ARM
 		{23913386-5333-4C93-B3F0-0227AFF77B49}.Release-Static|ARM.Build.0 = Release|ARM
+		{23913386-5333-4C93-B3F0-0227AFF77B49}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{23913386-5333-4C93-B3F0-0227AFF77B49}.ReleaseStatic|x64.Build.0 = Release|x64
 		{23913386-5333-4C93-B3F0-0227AFF77B49}.Release-Static|x64.ActiveCfg = Release|x64
 		{23913386-5333-4C93-B3F0-0227AFF77B49}.Release-Static|x64.Build.0 = Release|x64
+		{23913386-5333-4C93-B3F0-0227AFF77B49}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{23913386-5333-4C93-B3F0-0227AFF77B49}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{23913386-5333-4C93-B3F0-0227AFF77B49}.Release-Static|x86.ActiveCfg = Release|Win32
 		{23913386-5333-4C93-B3F0-0227AFF77B49}.Release-Static|x86.Build.0 = Release|Win32
 		{EA0E0510-749F-47B2-9F53-565CB4893771}.Debug|ARM.ActiveCfg = Debug|ARM
@@ -2921,10 +3069,16 @@ Global
 		{EA0E0510-749F-47B2-9F53-565CB4893771}.ReleaseLTO|x64.Build.0 = Release|x64
 		{EA0E0510-749F-47B2-9F53-565CB4893771}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{EA0E0510-749F-47B2-9F53-565CB4893771}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{EA0E0510-749F-47B2-9F53-565CB4893771}.ReleaseStatic|ARM.ActiveCfg = Release|ARM
+		{EA0E0510-749F-47B2-9F53-565CB4893771}.ReleaseStatic|ARM.Build.0 = Release|ARM
 		{EA0E0510-749F-47B2-9F53-565CB4893771}.Release-Static|ARM.ActiveCfg = Release|ARM
 		{EA0E0510-749F-47B2-9F53-565CB4893771}.Release-Static|ARM.Build.0 = Release|ARM
+		{EA0E0510-749F-47B2-9F53-565CB4893771}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{EA0E0510-749F-47B2-9F53-565CB4893771}.ReleaseStatic|x64.Build.0 = Release|x64
 		{EA0E0510-749F-47B2-9F53-565CB4893771}.Release-Static|x64.ActiveCfg = Release|x64
 		{EA0E0510-749F-47B2-9F53-565CB4893771}.Release-Static|x64.Build.0 = Release|x64
+		{EA0E0510-749F-47B2-9F53-565CB4893771}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{EA0E0510-749F-47B2-9F53-565CB4893771}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{EA0E0510-749F-47B2-9F53-565CB4893771}.Release-Static|x86.ActiveCfg = Release|Win32
 		{EA0E0510-749F-47B2-9F53-565CB4893771}.Release-Static|x86.Build.0 = Release|Win32
 		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.Debug|ARM.ActiveCfg = Debug|ARM
@@ -3023,10 +3177,16 @@ Global
 		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.ReleaseLTO|x64.Build.0 = Release|x64
 		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.ReleaseStatic|ARM.ActiveCfg = Release|ARM
+		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.ReleaseStatic|ARM.Build.0 = Release|ARM
 		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.Release-Static|ARM.ActiveCfg = Release|ARM
 		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.Release-Static|ARM.Build.0 = Release|ARM
+		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.ReleaseStatic|x64.Build.0 = Release|x64
 		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.Release-Static|x64.ActiveCfg = Release|x64
 		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.Release-Static|x64.Build.0 = Release|x64
+		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.Release-Static|x86.ActiveCfg = Release|Win32
 		{039AC2C4-C1BE-4B3F-BC4A-4541B2066293}.Release-Static|x86.Build.0 = Release|Win32
 		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.Debug|ARM.ActiveCfg = Debug|ARM
@@ -3125,10 +3285,16 @@ Global
 		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.ReleaseLTO|x64.Build.0 = Release|x64
 		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.ReleaseLTO|x86.ActiveCfg = Release|Win32
 		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.ReleaseStatic|ARM.ActiveCfg = Release|ARM
+		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.ReleaseStatic|ARM.Build.0 = Release|ARM
 		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.Release-Static|ARM.ActiveCfg = Release|ARM
 		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.Release-Static|ARM.Build.0 = Release|ARM
+		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.ReleaseStatic|x64.ActiveCfg = Release|x64
+		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.ReleaseStatic|x64.Build.0 = Release|x64
 		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.Release-Static|x64.ActiveCfg = Release|x64
 		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.Release-Static|x64.Build.0 = Release|x64
+		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.ReleaseStatic|x86.ActiveCfg = Release|Win32
+		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.ReleaseStatic|x86.Build.0 = Release|Win32
 		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.Release-Static|x86.ActiveCfg = Release|Win32
 		{A02FD1CC-618B-428D-AC46-91A2A12D0DCD}.Release-Static|x86.Build.0 = Release|Win32
 		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.Debug|ARM.ActiveCfg = Debug-Dll|Win32
@@ -3231,10 +3397,16 @@ Global
 		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.ReleaseLTO|x64.Build.0 = Debug-Dll|Win32
 		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.ReleaseLTO|x86.ActiveCfg = Release-Lib|Win32
 		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.ReleaseLTO|x86.Build.0 = Release-Lib|Win32
+		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.ReleaseStatic|ARM.ActiveCfg = Debug-Dll|x64
+		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.ReleaseStatic|ARM.Build.0 = Debug-Dll|x64
 		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.Release-Static|ARM.ActiveCfg = Debug-Dll|Win32
 		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.Release-Static|ARM.Build.0 = Debug-Dll|Win32
+		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.ReleaseStatic|x64.ActiveCfg = Release-Dll|x64
+		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.ReleaseStatic|x64.Build.0 = Release-Dll|x64
 		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.Release-Static|x64.ActiveCfg = Debug-Dll|Win32
 		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.Release-Static|x64.Build.0 = Debug-Dll|Win32
+		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.ReleaseStatic|x86.ActiveCfg = Release-Dll|Win32
+		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.ReleaseStatic|x86.Build.0 = Release-Dll|Win32
 		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.Release-Static|x86.ActiveCfg = Release-Lib|Win32
 		{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}.Release-Static|x86.Build.0 = Release-Lib|Win32
 		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -3340,9 +3512,15 @@ Global
 		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.Release-Static|x64.Build.0 = Release-Static|x64
+		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{FE07F272-AE7F-4549-9E9F-EF9B80CB1693}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -3448,9 +3626,15 @@ Global
 		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.Release-Static|x64.Build.0 = Release-Static|x64
+		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{7FDE3880-A4AB-49E3-B439-EBEF0A0C7A65}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -3556,9 +3740,15 @@ Global
 		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.Release-Static|x64.Build.0 = Release-Static|x64
+		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{4281CA5E-1D48-45D4-A991-2718A454B4BA}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -3664,9 +3854,15 @@ Global
 		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.Release-Static|x64.Build.0 = Release-Static|x64
+		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{855DC8C0-D3E9-4A2E-AE47-116605A7BC9B}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -3772,9 +3968,15 @@ Global
 		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.Release-Static|x64.Build.0 = Release-Static|x64
+		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{A1989FF3-9894-40F4-B5A6-6EA364476E45}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -3880,9 +4082,15 @@ Global
 		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.Release-Static|x64.Build.0 = Release-Static|x64
+		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{A5D9AA24-08ED-48B9-BD65-F0A25E96BFC4}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -3988,9 +4196,15 @@ Global
 		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.Release-Static|x64.Build.0 = Release-Static|x64
+		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{2BB84911-C1B4-4747-B93D-36AA82CC5031}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -4096,9 +4310,15 @@ Global
 		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.Release-Static|x64.Build.0 = Release-Static|x64
+		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{4B5945CD-0CB3-49AA-A7FF-7612D93F82C0}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -4204,9 +4424,15 @@ Global
 		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.Release-Static|x64.Build.0 = Release-Static|x64
+		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{B8719FD5-E8A6-4A36-943C-891D07F5DD21}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -4312,9 +4538,15 @@ Global
 		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.Release-Static|x64.Build.0 = Release-Static|x64
+		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{9CA0FDFB-2172-41FC-B7F1-5CE915EDCB37}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{B82CDD25-6903-430E-BD38-D8129A2015C1}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -4420,9 +4652,15 @@ Global
 		{B82CDD25-6903-430E-BD38-D8129A2015C1}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{B82CDD25-6903-430E-BD38-D8129A2015C1}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{B82CDD25-6903-430E-BD38-D8129A2015C1}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{B82CDD25-6903-430E-BD38-D8129A2015C1}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{B82CDD25-6903-430E-BD38-D8129A2015C1}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{B82CDD25-6903-430E-BD38-D8129A2015C1}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{B82CDD25-6903-430E-BD38-D8129A2015C1}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{B82CDD25-6903-430E-BD38-D8129A2015C1}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{B82CDD25-6903-430E-BD38-D8129A2015C1}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{B82CDD25-6903-430E-BD38-D8129A2015C1}.Release-Static|x64.Build.0 = Release-Static|x64
+		{B82CDD25-6903-430E-BD38-D8129A2015C1}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{B82CDD25-6903-430E-BD38-D8129A2015C1}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{B82CDD25-6903-430E-BD38-D8129A2015C1}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{B82CDD25-6903-430E-BD38-D8129A2015C1}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -4528,9 +4766,15 @@ Global
 		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.Release-Static|x64.Build.0 = Release-Static|x64
+		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{E8A3F6FA-AE1C-4C8E-A0B6-9C8480324EAA}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{2A3F241E-682C-47E1-9543-DC28708B406A}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -4636,9 +4880,15 @@ Global
 		{2A3F241E-682C-47E1-9543-DC28708B406A}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{2A3F241E-682C-47E1-9543-DC28708B406A}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{2A3F241E-682C-47E1-9543-DC28708B406A}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{2A3F241E-682C-47E1-9543-DC28708B406A}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{2A3F241E-682C-47E1-9543-DC28708B406A}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{2A3F241E-682C-47E1-9543-DC28708B406A}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{2A3F241E-682C-47E1-9543-DC28708B406A}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{2A3F241E-682C-47E1-9543-DC28708B406A}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{2A3F241E-682C-47E1-9543-DC28708B406A}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{2A3F241E-682C-47E1-9543-DC28708B406A}.Release-Static|x64.Build.0 = Release-Static|x64
+		{2A3F241E-682C-47E1-9543-DC28708B406A}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{2A3F241E-682C-47E1-9543-DC28708B406A}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{2A3F241E-682C-47E1-9543-DC28708B406A}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{2A3F241E-682C-47E1-9543-DC28708B406A}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -4744,9 +4994,15 @@ Global
 		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.Release-Static|x64.Build.0 = Release-Static|x64
+		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{E53AA5FF-B737-40AA-BD13-387EFA99023D}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -4852,9 +5108,15 @@ Global
 		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.Release-Static|x64.Build.0 = Release-Static|x64
+		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{B5FE16F8-3EDB-4110-BD80-B4238CC01E8D}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -4960,9 +5222,15 @@ Global
 		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.Release-Static|x64.Build.0 = Release-Static|x64
+		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{4BF51C21-5A30-423B-82FE-1ED410E5769D}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -5068,9 +5336,15 @@ Global
 		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.Release-Static|x64.Build.0 = Release-Static|x64
+		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{6794B975-4E84-4F49-B2DC-C31F2224E03E}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -5176,9 +5450,15 @@ Global
 		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.Release-Static|x64.Build.0 = Release-Static|x64
+		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{4B059DBA-CD9C-4D0F-BE8C-FFB4EFD498E9}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -5284,9 +5564,15 @@ Global
 		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.Release-Static|x64.Build.0 = Release-Static|x64
+		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -5392,9 +5678,15 @@ Global
 		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.Release-Static|x64.Build.0 = Release-Static|x64
+		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{23D7679C-764C-4E02-8B29-BB882CEEEFE2}.Release-Static|x86.Build.0 = Release-Static|Win32
 		{6AC9B65F-0862-4A5C-8A9D-141516993130}.Debug|ARM.ActiveCfg = Debug|Win32
@@ -5500,11 +5792,134 @@ Global
 		{6AC9B65F-0862-4A5C-8A9D-141516993130}.ReleaseLTO|x64.Build.0 = Release-Static|x64
 		{6AC9B65F-0862-4A5C-8A9D-141516993130}.ReleaseLTO|x86.ActiveCfg = Release-Static|Win32
 		{6AC9B65F-0862-4A5C-8A9D-141516993130}.ReleaseLTO|x86.Build.0 = Release-Static|Win32
+		{6AC9B65F-0862-4A5C-8A9D-141516993130}.ReleaseStatic|ARM.ActiveCfg = Release-Dynamic|Win32
+		{6AC9B65F-0862-4A5C-8A9D-141516993130}.ReleaseStatic|ARM.Build.0 = Release-Dynamic|Win32
 		{6AC9B65F-0862-4A5C-8A9D-141516993130}.Release-Static|ARM.ActiveCfg = Release-Static|Win32
+		{6AC9B65F-0862-4A5C-8A9D-141516993130}.ReleaseStatic|x64.ActiveCfg = Release-Dynamic|x64
+		{6AC9B65F-0862-4A5C-8A9D-141516993130}.ReleaseStatic|x64.Build.0 = Release-Dynamic|x64
 		{6AC9B65F-0862-4A5C-8A9D-141516993130}.Release-Static|x64.ActiveCfg = Release-Static|x64
 		{6AC9B65F-0862-4A5C-8A9D-141516993130}.Release-Static|x64.Build.0 = Release-Static|x64
+		{6AC9B65F-0862-4A5C-8A9D-141516993130}.ReleaseStatic|x86.ActiveCfg = Release-Dynamic|Win32
+		{6AC9B65F-0862-4A5C-8A9D-141516993130}.ReleaseStatic|x86.Build.0 = Release-Dynamic|Win32
 		{6AC9B65F-0862-4A5C-8A9D-141516993130}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{6AC9B65F-0862-4A5C-8A9D-141516993130}.Release-Static|x86.Build.0 = Release-Static|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|ARM.ActiveCfg = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|x64.ActiveCfg = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|x64.Build.0 = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|x86.ActiveCfg = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|x86.Build.0 = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugDLL|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugDLL|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Dll|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Dll|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugDLL|x64.ActiveCfg = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugDLL|x64.Build.0 = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Dll|x64.ActiveCfg = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Dll|x64.Build.0 = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugDLL|x86.ActiveCfg = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugDLL|x86.Build.0 = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Dll|x86.ActiveCfg = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Dll|x86.Build.0 = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugDLLStaticDeps|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugDLLStaticDeps|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugDLLStaticDeps|x64.ActiveCfg = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugDLLStaticDeps|x64.Build.0 = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugDLLStaticDeps|x86.ActiveCfg = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugDLLStaticDeps|x86.Build.0 = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Dynamic|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Dynamic|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Dynamic|x64.ActiveCfg = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Dynamic|x64.Build.0 = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Dynamic|x86.ActiveCfg = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Dynamic|x86.Build.0 = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugLib|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugLib|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Lib|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Lib|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugLib|x64.ActiveCfg = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugLib|x64.Build.0 = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Lib|x64.ActiveCfg = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Lib|x64.Build.0 = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugLib|x86.ActiveCfg = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DebugLib|x86.Build.0 = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Lib|x86.ActiveCfg = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Lib|x86.Build.0 = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Static|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Static|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Static|x64.ActiveCfg = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Static|x64.Build.0 = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Static|x86.ActiveCfg = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug-Static|x86.Build.0 = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DLL-Import Debug|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DLL-Import Debug|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DLL-Import Debug|x64.Build.0 = Debug|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DLL-Import Debug|x86.ActiveCfg = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DLL-Import Debug|x86.Build.0 = Debug|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DLL-Import Release|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DLL-Import Release|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DLL-Import Release|x64.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DLL-Import Release|x64.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DLL-Import Release|x86.ActiveCfg = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.DLL-Import Release|x86.Build.0 = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|ARM.ActiveCfg = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|x64.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|x64.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|x86.ActiveCfg = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|x86.Build.0 = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseDLL|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseDLL|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Dll|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Dll|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseDLL|x64.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseDLL|x64.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Dll|x64.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Dll|x64.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseDLL|x86.ActiveCfg = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseDLL|x86.Build.0 = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Dll|x86.ActiveCfg = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Dll|x86.Build.0 = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseDLLStaticDeps|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseDLLStaticDeps|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseDLLStaticDeps|x64.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseDLLStaticDeps|x64.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseDLLStaticDeps|x86.ActiveCfg = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseDLLStaticDeps|x86.Build.0 = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Dynamic|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Dynamic|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Dynamic|x64.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Dynamic|x64.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Dynamic|x86.ActiveCfg = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Dynamic|x86.Build.0 = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseLib|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseLib|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Lib|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Lib|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseLib|x64.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseLib|x64.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Lib|x64.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Lib|x64.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseLib|x86.ActiveCfg = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseLib|x86.Build.0 = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Lib|x86.ActiveCfg = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Lib|x86.Build.0 = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseLTO|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseLTO|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseLTO|x64.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseLTO|x64.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseLTO|x86.ActiveCfg = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseLTO|x86.Build.0 = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|ARM.ActiveCfg = ReleaseStatic|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Static|ARM.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Static|ARM.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Static|x64.ActiveCfg = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Static|x64.Build.0 = Release|x64
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Static|x86.ActiveCfg = Release|Win32
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release-Static|x86.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -5568,5 +5983,7 @@ Global
 		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858} = {F6875B41-FE04-419C-B591-0301263BEA45}
 		{23D7679C-764C-4E02-8B29-BB882CEEEFE2} = {F6875B41-FE04-419C-B591-0301263BEA45}
 		{6AC9B65F-0862-4A5C-8A9D-141516993130} = {F6875B41-FE04-419C-B591-0301263BEA45}
+		{2D82BD63-5C7C-4552-8118-D261E785C994} = {96846C59-E0A1-4132-B779-065C2EAE3E51}
+		{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2} = {2D82BD63-5C7C-4552-8118-D261E785C994}
 	EndGlobalSection
 EndGlobal
diff --git a/ring-client-uwp.vcxproj b/ring-client-uwp.vcxproj
index 4927f4f71d2bd58155d9212fa751b59169bfdb19..3aff976789688fefa8134a08a804543ee13f618c 100644
--- a/ring-client-uwp.vcxproj
+++ b/ring-client-uwp.vcxproj
@@ -97,12 +97,12 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
-    <PackageCertificateKeyFile>ring-client-uwp_StoreKey.pfx</PackageCertificateKeyFile>
+    <PackageCertificateKeyFile>ring-client-uwp_TemporaryKey.pfx</PackageCertificateKeyFile>
     <AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>
     <AppxSymbolPackageEnabled>False</AppxSymbolPackageEnabled>
     <AppxBundle>Always</AppxBundle>
     <AppxBundlePlatforms>x64</AppxBundlePlatforms>
-    <PackageCertificateThumbprint>6E2CEF8A6A6A44314AB297CE41FC3BC8F2890973</PackageCertificateThumbprint>
+    <PackageCertificateThumbprint>A60EB824B6591CA560948145FAC6F93D83E777AD</PackageCertificateThumbprint>
     <AppxPackageDir>$(USERPROFILE)\ring_packaging\</AppxPackageDir>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
@@ -145,6 +145,7 @@
       <PreprocessorDefinitions>STATICLIB;RING_UWP;WIN32_NATIVE;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WholeProgramOptimization>false</WholeProgramOptimization>
       <CompileAsWinRT>true</CompileAsWinRT>
+      <CompileAsManaged>false</CompileAsManaged>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(SolutionDir)..\ring-daemon\contrib\build\boost\stage\lib;$(SolutionDir)..\ring-daemon\contrib\build\bin\x64;$(SolutionDir)..\ring-daemon\contrib\build\lib\x64;$(SolutionDir)..\ring-daemon\MSVC\x64\ReleaseLib\bin;$(SolutionDir)x64\Release-Lib;$(SolutionDir)contrib\qrencode-win32\vc8\qrcodelib\x64\Release-Lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@@ -175,17 +176,27 @@
     <ClInclude Include="AccountListItem.h" />
     <ClInclude Include="AccountListItemsViewModel.h" />
     <ClInclude Include="AccountsViewModel.h" />
+    <ClInclude Include="Call.h" />
     <ClInclude Include="Contact.h" />
+    <ClInclude Include="ContactRequestItem.h" />
+    <ClInclude Include="ContactRequestItemsViewModel.h" />
     <ClInclude Include="ContactListModel.h" />
     <ClInclude Include="Conversation.h" />
+    <ClInclude Include="HttpUtils.h" />
+    <ClInclude Include="RingDevice.h" />
+    <ClInclude Include="RingDeviceItemsViewModel.h" />
+    <ClInclude Include="RingDeviceItem.h" />
     <ClInclude Include="Globals.h" />
     <ClInclude Include="LoadingPage.xaml.h">
       <DependentUpon>LoadingPage.xaml</DependentUpon>
     </ClInclude>
+    <ClInclude Include="lodepng.h" />
     <ClInclude Include="MessageTextPage.xaml.h">
       <DependentUpon>MessageTextPage.xaml</DependentUpon>
     </ClInclude>
-    <ClInclude Include="pch.h" />
+    <ClInclude Include="pch.h">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClInclude>
     <ClInclude Include="App.xaml.h">
       <DependentUpon>App.xaml</DependentUpon>
     </ClInclude>
@@ -195,6 +206,8 @@
     <ClInclude Include="PreviewPage.xaml.h">
       <DependentUpon>PreviewPage.xaml</DependentUpon>
     </ClInclude>
+    <ClInclude Include="resource.h" />
+    <ClInclude Include="ResourceManager.h" />
     <ClInclude Include="RingConsolePanel.xaml.h">
       <DependentUpon>RingConsolePanel.xaml</DependentUpon>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
@@ -211,6 +224,7 @@
     </ClInclude>
     <ClInclude Include="SmartPanelItem.h" />
     <ClInclude Include="SmartPanelItemsViewModel.h" />
+    <ClInclude Include="TextBlockExtension.h" />
     <ClInclude Include="UserModel.h" />
     <ClInclude Include="UserPreferences.h" />
     <ClInclude Include="Utils.h" />
@@ -236,6 +250,9 @@
       <SubType>Designer</SubType>
     </ApplicationDefinition>
     <Page Include="AboutPage.xaml" />
+    <Page Include="Buttons.xaml">
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="LoadingPage.xaml" />
     <Page Include="MainPage.xaml">
       <SubType>Designer</SubType>
@@ -245,7 +262,13 @@
     <Page Include="RingConsolePanel.xaml">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </Page>
+    <Page Include="ScrollBars.xaml">
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="SmartPanel.xaml" />
+    <Page Include="SplitViews.xaml">
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Styles.xaml" />
     <Page Include="VideoPage.xaml" />
     <Page Include="WelcomePage.xaml" />
@@ -285,15 +308,17 @@
     <None Include="..\ring-daemon\contrib\build\restbed\dependency\openssl\out32dll\ssleay32.dll">
       <DeploymentContent>true</DeploymentContent>
     </None>
-    <None Include="ring-client-uwp_StoreKey.pfx" />
+    <None Include="packages.config" />
     <None Include="ring-client-uwp_TemporaryKey.pfx" />
   </ItemGroup>
   <ItemGroup>
     <Image Include="Assets\AccountTypeRING.png" />
     <Image Include="Assets\AccountTypeSIP.png" />
+    <Image Include="Assets\angledGrid.png" />
+    <Image Include="Assets\grid.png" />
     <Image Include="Assets\LockScreenLogo.scale-200.png" />
-    <Image Include="Assets\qrCodeIconBlack.png" />
-    <Image Include="Assets\qrCodeIconWhite.png" />
+    <Image Include="Assets\share_b.png" />
+    <Image Include="Assets\share_w.png" />
     <Image Include="Assets\SplashScreen.scale-200.png" />
     <Image Include="Assets\Square150x150Logo.scale-200.png" />
     <Image Include="Assets\Square44x44Logo.scale-200.png" />
@@ -338,11 +363,18 @@
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\ring-daemon\MSVC;..\ring-daemon\src\media;..\ring-daemon\src;..\ring-daemon\src\dring;..\ring-daemon\contrib\include;..\ring-daemon\contrib\include\pjlib;..\ring-daemon\contrib\pjproject\third_party\speex\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <ClCompile Include="Contact.cpp" />
+    <ClCompile Include="ContactRequestItem.cpp" />
+    <ClCompile Include="ContactRequestItemsViewModel.cpp" />
     <ClCompile Include="ContactListModel.cpp" />
     <ClCompile Include="Conversation.cpp" />
+    <ClCompile Include="RingDeviceItemsViewModel.cpp" />
+    <ClCompile Include="RingDeviceItem.cpp" />
     <ClCompile Include="LoadingPage.xaml.cpp">
       <DependentUpon>LoadingPage.xaml</DependentUpon>
     </ClCompile>
+    <ClCompile Include="lodepng.cpp">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
+    </ClCompile>
     <ClCompile Include="MainPage.xaml.cpp">
       <DependentUpon>MainPage.xaml</DependentUpon>
     </ClCompile>
@@ -360,6 +392,7 @@
     <ClCompile Include="PreviewPage.xaml.cpp">
       <DependentUpon>PreviewPage.xaml</DependentUpon>
     </ClCompile>
+    <ClCompile Include="ResourceManager.cpp" />
     <ClCompile Include="RingConsolePanel.xaml.cpp">
       <DependentUpon>RingConsolePanel.xaml</DependentUpon>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
@@ -376,6 +409,7 @@
     </ClCompile>
     <ClCompile Include="SmartPanelItem.cpp" />
     <ClCompile Include="SmartPanelItemsViewModel.cpp" />
+    <ClCompile Include="TextBlockExtension.cpp" />
     <ClCompile Include="UserModel.cpp" />
     <ClCompile Include="UserPreferences.cpp" />
     <ClCompile Include="VCardUtils.cpp">
@@ -396,15 +430,61 @@
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
-    <PRIResource Include="localization\Fr-fr\Resources.resw" />
-    <PRIResource Include="localization\US-en\Resources.resw" />
+    <None Include="Package.StoreAssociation.xml">
+      <SubType>Designer</SubType>
+    </None>
   </ItemGroup>
   <ItemGroup>
-    <None Include="Package.StoreAssociation.xml" />
+    <Media Include="Assets\default.wav" />
+    <Media Include="Assets\ringtone_notify.wav" />
   </ItemGroup>
   <ItemGroup>
-    <Media Include="Assets\default.wav" />
-    <Media Include="Assets\message_notification_sound.wav" />
+    <ResourceCompile Include="ring-client-uwp.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <PRIResource Include="localization\ar\Resources.resw" />
+    <PRIResource Include="localization\bg\Resources.resw" />
+    <PRIResource Include="localization\ca\Resources.resw" />
+    <PRIResource Include="localization\cs-CZ\Resources.resw" />
+    <PRIResource Include="localization\da-DK\Resources.resw" />
+    <PRIResource Include="localization\de-DE\Resources.resw" />
+    <PRIResource Include="localization\de\Resources.resw" />
+    <PRIResource Include="localization\el\Resources.resw" />
+    <PRIResource Include="localization\en-GB\Resources.resw" />
+    <PRIResource Include="localization\en-US\Resources.resw" />
+    <PRIResource Include="localization\es\Resources.resw" />
+    <PRIResource Include="localization\et-EE\Resources.resw" />
+    <PRIResource Include="localization\fa-IR\Resources.resw" />
+    <PRIResource Include="localization\fi\Resources.resw" />
+    <PRIResource Include="localization\fr-FR\Resources.resw" />
+    <PRIResource Include="localization\fr\Resources.resw" />
+    <PRIResource Include="localization\fr-CA\Resources.resw" />
+    <PRIResource Include="localization\he\Resources.resw" />
+    <PRIResource Include="localization\hi-IN\Resources.resw" />
+    <PRIResource Include="localization\hr\Resources.resw" />
+    <PRIResource Include="localization\hu\Resources.resw" />
+    <PRIResource Include="localization\id\Resources.resw" />
+    <PRIResource Include="localization\it\Resources.resw" />
+    <PRIResource Include="localization\it-IT\Resources.resw" />
+    <PRIResource Include="localization\ja\Resources.resw" />
+    <PRIResource Include="localization\lt\Resources.resw" />
+    <PRIResource Include="localization\ms\Resources.resw" />
+    <PRIResource Include="localization\nb\Resources.resw" />
+    <PRIResource Include="localization\nl-NL\Resources.resw" />
+    <PRIResource Include="localization\nl\Resources.resw" />
+    <PRIResource Include="localization\pa\Resources.resw" />
+    <PRIResource Include="localization\pl\Resources.resw" />
+    <PRIResource Include="localization\pt\Resources.resw" />
+    <PRIResource Include="localization\pt-BR\Resources.resw" />
+    <PRIResource Include="localization\ro\Resources.resw" />
+    <PRIResource Include="localization\ru-RU\Resources.resw" />
+    <PRIResource Include="localization\ru\Resources.resw" />
+    <PRIResource Include="localization\sk-SK\Resources.resw" />
+    <PRIResource Include="localization\sq-AL\Resources.resw" />
+    <PRIResource Include="localization\sv\Resources.resw" />
+    <PRIResource Include="localization\tr\Resources.resw" />
+    <PRIResource Include="localization\uk\Resources.resw" />
+    <PRIResource Include="localization\zh\Resources.resw" />
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
diff --git a/ring-client-uwp.vcxproj.filters b/ring-client-uwp.vcxproj.filters
index efadbadd77bc3b585e66c31ebacc7cbf33bd5c8d..d3a39c659d06bb0cc98d4b7fefd6cd398c74992c 100644
--- a/ring-client-uwp.vcxproj.filters
+++ b/ring-client-uwp.vcxproj.filters
@@ -3,14 +3,6 @@
   <ItemGroup>
     <ApplicationDefinition Include="App.xaml" />
   </ItemGroup>
-  <ItemGroup>
-    <PRIResource Include="localization\US-en\Resources.resw">
-      <Filter>Strings\en-US</Filter>
-    </PRIResource>
-    <PRIResource Include="localization\Fr-fr\Resources.resw">
-      <Filter>Strings\fr-FR</Filter>
-    </PRIResource>
-  </ItemGroup>
   <ItemGroup>
     <ClCompile Include="App.xaml.cpp" />
     <ClCompile Include="LoadingPage.xaml.cpp" />
@@ -38,48 +30,69 @@
       <Filter>Controls</Filter>
     </ClCompile>
     <ClCompile Include="Video.cpp">
-      <Filter>Media\Video</Filter>
+      <Filter>Models\Media\Video</Filter>
     </ClCompile>
     <ClCompile Include="VideoCaptureManager.cpp">
-      <Filter>Media\Video</Filter>
+      <Filter>Models\Media\Video</Filter>
     </ClCompile>
     <ClCompile Include="VideoManager.cpp">
-      <Filter>Media\Video</Filter>
+      <Filter>Models\Media\Video</Filter>
     </ClCompile>
     <ClCompile Include="VideoRendererManager.cpp">
-      <Filter>Media\Video</Filter>
+      <Filter>Models\Media\Video</Filter>
     </ClCompile>
     <ClCompile Include="Account.cpp">
-      <Filter>Model</Filter>
+      <Filter>Models</Filter>
     </ClCompile>
     <ClCompile Include="Contact.cpp">
-      <Filter>Model</Filter>
+      <Filter>Models</Filter>
     </ClCompile>
     <ClCompile Include="Conversation.cpp">
-      <Filter>Model</Filter>
+      <Filter>Models</Filter>
     </ClCompile>
     <ClCompile Include="AccountListItemsViewModel.cpp">
-      <Filter>ModelViews</Filter>
+      <Filter>ViewModels</Filter>
     </ClCompile>
     <ClCompile Include="AccountsViewModel.cpp">
-      <Filter>ModelViews</Filter>
+      <Filter>ViewModels</Filter>
     </ClCompile>
     <ClCompile Include="SmartPanelItemsViewModel.cpp">
-      <Filter>ModelViews</Filter>
+      <Filter>ViewModels</Filter>
     </ClCompile>
     <ClCompile Include="UserModel.cpp">
-      <Filter>Model</Filter>
+      <Filter>Models</Filter>
     </ClCompile>
     <ClCompile Include="PreviewPage.xaml.cpp" />
     <ClCompile Include="VCardUtils.cpp">
       <Filter>Common</Filter>
     </ClCompile>
     <ClCompile Include="Ringtone.cpp">
-      <Filter>Media\Audio</Filter>
+      <Filter>Models\Media\Audio</Filter>
     </ClCompile>
     <ClCompile Include="AboutPage.xaml.cpp" />
+    <ClCompile Include="ContactRequestItem.cpp">
+      <Filter>Controls</Filter>
+    </ClCompile>
+    <ClCompile Include="ContactRequestItemsViewModel.cpp">
+      <Filter>ViewModels</Filter>
+    </ClCompile>
+    <ClCompile Include="lodepng.cpp">
+      <Filter>Common</Filter>
+    </ClCompile>
     <ClCompile Include="ContactListModel.cpp">
-      <Filter>Model</Filter>
+      <Filter>Models</Filter>
+    </ClCompile>
+    <ClCompile Include="TextBlockExtension.cpp">
+      <Filter>Controls</Filter>
+    </ClCompile>
+    <ClCompile Include="ResourceManager.cpp">
+      <Filter>Common</Filter>
+    </ClCompile>
+    <ClCompile Include="RingDeviceItemsViewModel.cpp">
+      <Filter>ViewModels</Filter>
+    </ClCompile>
+    <ClCompile Include="RingDeviceItem.cpp">
+      <Filter>Controls</Filter>
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
@@ -115,120 +128,164 @@
       <Filter>Controls</Filter>
     </ClInclude>
     <ClInclude Include="Video.h">
-      <Filter>Media\Video</Filter>
+      <Filter>Models\Media\Video</Filter>
     </ClInclude>
     <ClInclude Include="VideoCaptureManager.h">
-      <Filter>Media\Video</Filter>
+      <Filter>Models\Media\Video</Filter>
     </ClInclude>
     <ClInclude Include="VideoManager.h">
-      <Filter>Media\Video</Filter>
+      <Filter>Models\Media\Video</Filter>
     </ClInclude>
     <ClInclude Include="VideoRendererManager.h">
-      <Filter>Media\Video</Filter>
+      <Filter>Models\Media\Video</Filter>
     </ClInclude>
     <ClInclude Include="Account.h">
-      <Filter>Model</Filter>
+      <Filter>Models</Filter>
     </ClInclude>
     <ClInclude Include="Contact.h">
-      <Filter>Model</Filter>
+      <Filter>Models</Filter>
     </ClInclude>
     <ClInclude Include="Conversation.h">
-      <Filter>Model</Filter>
+      <Filter>Models</Filter>
     </ClInclude>
     <ClInclude Include="AccountListItemsViewModel.h">
-      <Filter>ModelViews</Filter>
+      <Filter>ViewModels</Filter>
     </ClInclude>
     <ClInclude Include="AccountsViewModel.h">
-      <Filter>ModelViews</Filter>
+      <Filter>ViewModels</Filter>
     </ClInclude>
     <ClInclude Include="SmartPanelItemsViewModel.h">
-      <Filter>ModelViews</Filter>
+      <Filter>ViewModels</Filter>
     </ClInclude>
     <ClInclude Include="UserModel.h">
-      <Filter>Model</Filter>
+      <Filter>Models</Filter>
     </ClInclude>
     <ClInclude Include="PreviewPage.xaml.h" />
     <ClInclude Include="VCardUtils.h">
       <Filter>Common</Filter>
     </ClInclude>
     <ClInclude Include="Ringtone.h">
-      <Filter>Media\Audio</Filter>
+      <Filter>Models\Media\Audio</Filter>
     </ClInclude>
     <ClInclude Include="AboutPage.xaml.h" />
+    <ClInclude Include="ContactRequestItem.h">
+      <Filter>Controls</Filter>
+    </ClInclude>
+    <ClInclude Include="ContactRequestItemsViewModel.h">
+      <Filter>ViewModels</Filter>
+    </ClInclude>
+    <ClInclude Include="lodepng.h">
+      <Filter>Common</Filter>
+    </ClInclude>
     <ClInclude Include="ContactListModel.h">
-      <Filter>Model</Filter>
+      <Filter>Models</Filter>
+    </ClInclude>
+    <ClInclude Include="TextBlockExtension.h">
+      <Filter>Controls</Filter>
+    </ClInclude>
+    <ClInclude Include="resource.h" />
+    <ClInclude Include="ResourceManager.h">
+      <Filter>Common</Filter>
+    </ClInclude>
+    <ClInclude Include="RingDevice.h">
+      <Filter>Models</Filter>
+    </ClInclude>
+    <ClInclude Include="RingDeviceItemsViewModel.h">
+      <Filter>ViewModels</Filter>
+    </ClInclude>
+    <ClInclude Include="RingDeviceItem.h">
+      <Filter>Controls</Filter>
+    </ClInclude>
+    <ClInclude Include="Call.h">
+      <Filter>Models</Filter>
+    </ClInclude>
+    <ClInclude Include="HttpUtils.h">
+      <Filter>Common</Filter>
     </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <Image Include="Assets\AccountTypeRING.png">
-      <Filter>Assets\TESTS</Filter>
+      <Filter>Assets\Tests</Filter>
     </Image>
     <Image Include="Assets\AccountTypeSIP.png">
-      <Filter>Assets\TESTS</Filter>
+      <Filter>Assets\Tests</Filter>
     </Image>
     <Image Include="Assets\TESTS\blank.png">
-      <Filter>Assets\TESTS</Filter>
-    </Image>
-    <Image Include="Assets\TESTS\contactAvatar.png">
-      <Filter>Assets\TESTS</Filter>
+      <Filter>Assets\Tests</Filter>
     </Image>
     <Image Include="Assets\TESTS\logo-ring.scale-100.png">
-      <Filter>Assets\TESTS</Filter>
+      <Filter>Assets\Tests</Filter>
     </Image>
     <Image Include="Assets\TESTS\logo-ring.scale-125.png">
-      <Filter>Assets\TESTS</Filter>
+      <Filter>Assets\Tests</Filter>
     </Image>
     <Image Include="Assets\TESTS\logo-ring.scale-150.png">
-      <Filter>Assets\TESTS</Filter>
+      <Filter>Assets\Tests</Filter>
     </Image>
     <Image Include="Assets\TESTS\logo-ring.scale-200.png">
-      <Filter>Assets\TESTS</Filter>
+      <Filter>Assets\Tests</Filter>
     </Image>
     <Image Include="Assets\TESTS\logo-ring.scale-400.png">
-      <Filter>Assets\TESTS</Filter>
-    </Image>
-    <Image Include="Assets\LockScreenLogo.scale-200.png">
-      <Filter>Assets</Filter>
+      <Filter>Assets\Tests</Filter>
     </Image>
     <Image Include="Assets\SplashScreen.scale-200.png">
-      <Filter>Assets</Filter>
+      <Filter>Assets\Images</Filter>
     </Image>
     <Image Include="Assets\Square44x44Logo.scale-200.png">
-      <Filter>Assets</Filter>
+      <Filter>Assets\Images</Filter>
     </Image>
     <Image Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png">
-      <Filter>Assets</Filter>
+      <Filter>Assets\Images</Filter>
     </Image>
     <Image Include="Assets\Square150x150Logo.scale-200.png">
-      <Filter>Assets</Filter>
+      <Filter>Assets\Images</Filter>
     </Image>
     <Image Include="Assets\StoreLogo.png">
-      <Filter>Assets</Filter>
+      <Filter>Assets\Images</Filter>
+    </Image>
+    <Image Include="Assets\StoreLogo.scale-100.png">
+      <Filter>Assets\Images</Filter>
+    </Image>
+    <Image Include="Assets\StoreLogo.scale-125.png">
+      <Filter>Assets\Images</Filter>
+    </Image>
+    <Image Include="Assets\StoreLogo.scale-150.png">
+      <Filter>Assets\Images</Filter>
+    </Image>
+    <Image Include="Assets\StoreLogo.scale-200.png">
+      <Filter>Assets\Images</Filter>
     </Image>
     <Image Include="Assets\Wide310x150Logo.scale-200.png">
-      <Filter>Assets</Filter>
+      <Filter>Assets\Images</Filter>
     </Image>
-    <Image Include="Assets\qrCodeIconBlack.png">
-      <Filter>Assets</Filter>
+    <Image Include="Assets\StoreLogo.scale-400.png">
+      <Filter>Assets\Images</Filter>
     </Image>
-    <Image Include="Assets\qrCodeIconWhite.png">
-      <Filter>Assets</Filter>
+    <Image Include="Assets\LockScreenLogo.scale-200.png">
+      <Filter>Assets\Images</Filter>
+    </Image>
+    <Image Include="Assets\TESTS\contactAvatar.png">
+      <Filter>Assets\Tests</Filter>
+    </Image>
+    <Image Include="Assets\angledGrid.png">
+      <Filter>Assets\Images</Filter>
+    </Image>
+    <Image Include="Assets\grid.png">
+      <Filter>Assets\Images</Filter>
+    </Image>
+    <Image Include="Assets\share_b.png">
+      <Filter>Assets\Images</Filter>
+    </Image>
+    <Image Include="Assets\share_w.png">
+      <Filter>Assets\Images</Filter>
     </Image>
-    <Image Include="Assets\StoreLogo.scale-125.png" />
-    <Image Include="Assets\StoreLogo.scale-150.png" />
-    <Image Include="Assets\StoreLogo.scale-100.png" />
-    <Image Include="Assets\StoreLogo.scale-200.png" />
-    <Image Include="Assets\StoreLogo.scale-400.png" />
   </ItemGroup>
   <ItemGroup>
     <AppxManifest Include="Package.appxmanifest" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="ring-client-uwp_StoreKey.pfx" />
-    <None Include="ring-client-uwp_TemporaryKey.pfx" />
     <None Include="Package.StoreAssociation.xml" />
     <None Include="Package.StoreAssociation.xml" />
-    <None Include="ring-client-uwp_StoreKey.pfx" />
     <None Include="..\ring-daemon\contrib\build\FFmpegInterop\ffmpeg\Build\Windows10\x64\bin\avcodec-57.dll">
       <Filter>Assets\Dlls</Filter>
     </None>
@@ -259,10 +316,10 @@
     <None Include="..\ring-daemon\contrib\build\restbed\dependency\openssl\out32dll\ssleay32.dll">
       <Filter>Assets\Dlls</Filter>
     </None>
+    <None Include="ring-client-uwp_TemporaryKey.pfx" />
+    <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>
-    <Page Include="MainPage.xaml" />
-    <Page Include="Wizard.xaml" />
     <Page Include="Styles.xaml">
       <Filter>Styles</Filter>
     </Page>
@@ -290,6 +347,21 @@
     <Page Include="AboutPage.xaml">
       <Filter>Views</Filter>
     </Page>
+    <Page Include="MainPage.xaml">
+      <Filter>Views</Filter>
+    </Page>
+    <Page Include="Wizard.xaml">
+      <Filter>Views</Filter>
+    </Page>
+    <Page Include="Buttons.xaml">
+      <Filter>Styles</Filter>
+    </Page>
+    <Page Include="ScrollBars.xaml">
+      <Filter>Styles</Filter>
+    </Page>
+    <Page Include="SplitViews.xaml">
+      <Filter>Styles</Filter>
+    </Page>
   </ItemGroup>
   <ItemGroup>
     <Filter Include="Assets">
@@ -298,52 +370,315 @@
     <Filter Include="Assets\Dlls">
       <UniqueIdentifier>{5cfe090d-7521-4f12-adaf-dd47afd8fa58}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Assets\TESTS">
-      <UniqueIdentifier>{41024596-5974-4b5d-b9ce-970c3746ac80}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Common">
       <UniqueIdentifier>{98b4d31d-b4eb-44ec-ab04-2b98816714b8}</UniqueIdentifier>
     </Filter>
     <Filter Include="Controls">
       <UniqueIdentifier>{befd33e5-463a-42bb-9b9b-68c1ab49f0df}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Media">
+    <Filter Include="Strings">
+      <UniqueIdentifier>{f9db2a3e-6f39-4c23-922e-7143eb98197b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\en-US">
+      <UniqueIdentifier>{a710d34d-6f6b-4a72-a62b-3d0bb132533b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Styles">
+      <UniqueIdentifier>{88bf5748-d567-486c-91cf-1c7a124078d3}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Views">
+      <UniqueIdentifier>{b81596e4-e16c-4537-9631-65655360cbf4}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="ViewModels">
+      <UniqueIdentifier>{259b6ba4-1943-4393-b7a1-5e83f15a0217}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Models">
+      <UniqueIdentifier>{04b389af-ccff-45ed-b44a-645c39388eec}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Models\Media">
       <UniqueIdentifier>{b4690532-30e8-4640-8478-1a686d31d7a5}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Media\Audio">
+    <Filter Include="Models\Media\Audio">
       <UniqueIdentifier>{851d9f4a-c6b8-40aa-ba0f-44a7185795e2}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Media\Video">
+    <Filter Include="Models\Media\Video">
       <UniqueIdentifier>{6d47b8c1-b056-4461-98d6-5bcb52d30447}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Model">
-      <UniqueIdentifier>{04b389af-ccff-45ed-b44a-645c39388eec}</UniqueIdentifier>
+    <Filter Include="Assets\Images">
+      <UniqueIdentifier>{a1f4e2c7-201e-4ebc-9b95-f7ac71650a1c}</UniqueIdentifier>
     </Filter>
-    <Filter Include="ModelViews">
-      <UniqueIdentifier>{259b6ba4-1943-4393-b7a1-5e83f15a0217}</UniqueIdentifier>
+    <Filter Include="Assets\Sounds">
+      <UniqueIdentifier>{7930b368-02a8-4837-b2e4-73821631ec32}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Strings">
-      <UniqueIdentifier>{f9db2a3e-6f39-4c23-922e-7143eb98197b}</UniqueIdentifier>
+    <Filter Include="Assets\Tests">
+      <UniqueIdentifier>{41024596-5974-4b5d-b9ce-970c3746ac80}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Strings\en-US">
-      <UniqueIdentifier>{a710d34d-6f6b-4a72-a62b-3d0bb132533b}</UniqueIdentifier>
+    <Filter Include="Strings\de-DE">
+      <UniqueIdentifier>{bf6d27bc-545f-421b-afe5-e1a80723cf8c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\de">
+      <UniqueIdentifier>{b963a96c-a60e-49f6-bb44-7dac6823fe9c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\zh">
+      <UniqueIdentifier>{a4fc64cd-64e4-4986-8d57-98c39fe7443c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\ar">
+      <UniqueIdentifier>{87c85455-c1f6-4d0e-a023-5d4ef17036e2}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\bg">
+      <UniqueIdentifier>{2e36dc7c-f49b-469a-a8a0-1cbbc2cd1f09}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\ca">
+      <UniqueIdentifier>{1b873d03-fec9-42ec-8359-55a0cb4dfead}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\cs-CZ">
+      <UniqueIdentifier>{c23b4144-e177-489f-9e55-5c20660844c4}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\da-DK">
+      <UniqueIdentifier>{c779084e-7ddb-4f30-bde8-8e174b60c6a7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\el">
+      <UniqueIdentifier>{dada0861-1a5e-4109-9cae-e742176adb21}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\es">
+      <UniqueIdentifier>{32da36f6-52be-4e7f-8480-7f09178bca59}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\et-EE">
+      <UniqueIdentifier>{7f16191c-2e9d-4333-821e-64092a73b9dc}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\fa-IR">
+      <UniqueIdentifier>{75bb8c8c-bf06-4d66-a098-efc337967e26}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\fi">
+      <UniqueIdentifier>{8044aeac-8990-49a5-bca3-fabd9f53f304}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\fr">
+      <UniqueIdentifier>{1f80814e-29d9-44dc-9923-5a0aac42f9aa}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\fr-CA">
+      <UniqueIdentifier>{8d244376-ae30-4821-a4e9-05bff7f62f57}</UniqueIdentifier>
     </Filter>
     <Filter Include="Strings\fr-FR">
-      <UniqueIdentifier>{e97f4433-16c6-425e-b476-f2e3877d4104}</UniqueIdentifier>
+      <UniqueIdentifier>{37c14f4a-73fe-44a9-ac07-46fb53d4adca}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Styles">
-      <UniqueIdentifier>{88bf5748-d567-486c-91cf-1c7a124078d3}</UniqueIdentifier>
+    <Filter Include="Strings\he">
+      <UniqueIdentifier>{e1e19e7e-237f-4572-a8e0-82fac13880de}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Views">
-      <UniqueIdentifier>{b81596e4-e16c-4537-9631-65655360cbf4}</UniqueIdentifier>
+    <Filter Include="Strings\hi-IN">
+      <UniqueIdentifier>{908f7a63-cecd-4b98-be0f-0ee57793f1cf}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\hr">
+      <UniqueIdentifier>{0a462d24-d254-4ea9-bd40-74bdc7816aab}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\hu">
+      <UniqueIdentifier>{4e8aa18b-781a-4d77-ac27-e0297e411318}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\id">
+      <UniqueIdentifier>{11d3c8a9-3a9b-4fb2-9315-7d49a4931aba}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\it">
+      <UniqueIdentifier>{1d8edd29-9333-4cb0-a122-c65230a16016}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\it-IT">
+      <UniqueIdentifier>{760af0c2-b157-48cf-bf3c-ac4ab3fedd1b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\ja">
+      <UniqueIdentifier>{f4471385-687e-4a0e-9069-12d82733d0f8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\lt">
+      <UniqueIdentifier>{cf417697-1ce1-4da0-8f6a-70d953460c9f}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\ms">
+      <UniqueIdentifier>{c6755019-d09a-4405-aa10-cdc50a4f7cfb}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\nb">
+      <UniqueIdentifier>{2a20e2f5-0415-45ee-82c3-98175ab0cb50}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\nl">
+      <UniqueIdentifier>{4850a8d4-1b15-4eb7-bbea-90c24c1e2988}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\nl-NL">
+      <UniqueIdentifier>{2e060855-5889-4ca4-8b76-5fc7a2c56e58}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\pa">
+      <UniqueIdentifier>{c58aaf2d-dc24-4766-9ad1-b7bdf8580791}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\pl">
+      <UniqueIdentifier>{73510f37-e648-4fa5-ad8d-89080898da32}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\pt">
+      <UniqueIdentifier>{49dd9ab6-7435-428b-aa1e-5448e6ca0651}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\pt-BR">
+      <UniqueIdentifier>{1ee2f923-ee9b-4ba9-969e-f750552a330b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\ro">
+      <UniqueIdentifier>{50d97b56-4805-4b9e-a70e-8e3651728371}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\ru">
+      <UniqueIdentifier>{b82f4c3a-26cf-4945-8385-b24a3f1a804b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\ru-RU">
+      <UniqueIdentifier>{30e4ffac-e285-44c8-b942-468dbc7dc193}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\sk-SK">
+      <UniqueIdentifier>{92c1e22d-4589-412a-be09-d3d6a756eacb}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\sq-AL">
+      <UniqueIdentifier>{1cc0641f-3e86-4cbe-bc28-7c69f2033830}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\sv">
+      <UniqueIdentifier>{7fa114b9-6612-469a-b7f3-de92aace1d25}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\tr">
+      <UniqueIdentifier>{9d58b1d9-96b0-4b59-80e6-9156d577b840}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\uk">
+      <UniqueIdentifier>{06d2516c-75b7-48aa-b47b-88553bcb17cc}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\en-GB">
+      <UniqueIdentifier>{83248a19-b0d2-4b71-b0be-c5e9cd98fd65}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
   <ItemGroup>
     <Media Include="Assets\default.wav">
-      <Filter>Assets</Filter>
+      <Filter>Assets\Sounds</Filter>
     </Media>
-    <Media Include="Assets\message_notification_sound.wav">
-      <Filter>Assets</Filter>
+    <Media Include="Assets\ringtone_notify.wav">
+      <Filter>Assets\Sounds</Filter>
     </Media>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="ring-client-uwp.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <PRIResource Include="localization\en-US\Resources.resw">
+      <Filter>Strings\en-US</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\es\Resources.resw">
+      <Filter>Strings\es</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\et-EE\Resources.resw">
+      <Filter>Strings\et-EE</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\fa-IR\Resources.resw">
+      <Filter>Strings\fa-IR</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\fi\Resources.resw">
+      <Filter>Strings\fi</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\fr\Resources.resw">
+      <Filter>Strings\fr</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\fr-CA\Resources.resw">
+      <Filter>Strings\fr-CA</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\he\Resources.resw">
+      <Filter>Strings\he</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\hi-IN\Resources.resw">
+      <Filter>Strings\hi-IN</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\hr\Resources.resw">
+      <Filter>Strings\hr</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\hu\Resources.resw">
+      <Filter>Strings\hu</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\id\Resources.resw">
+      <Filter>Strings\id</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\it\Resources.resw">
+      <Filter>Strings\it</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\it-IT\Resources.resw">
+      <Filter>Strings\it-IT</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\ja\Resources.resw">
+      <Filter>Strings\ja</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\lt\Resources.resw">
+      <Filter>Strings\lt</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\ms\Resources.resw">
+      <Filter>Strings\ms</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\nb\Resources.resw">
+      <Filter>Strings\nb</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\nl\Resources.resw">
+      <Filter>Strings\nl</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\pa\Resources.resw">
+      <Filter>Strings\pa</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\pl\Resources.resw">
+      <Filter>Strings\pl</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\pt\Resources.resw">
+      <Filter>Strings\pt</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\pt-BR\Resources.resw">
+      <Filter>Strings\pt-BR</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\ro\Resources.resw">
+      <Filter>Strings\ro</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\ru\Resources.resw">
+      <Filter>Strings\ru</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\sk-SK\Resources.resw">
+      <Filter>Strings\sk-SK</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\sq-AL\Resources.resw">
+      <Filter>Strings\sq-AL</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\sv\Resources.resw">
+      <Filter>Strings\sv</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\tr\Resources.resw">
+      <Filter>Strings\tr</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\uk\Resources.resw">
+      <Filter>Strings\uk</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\zh\Resources.resw">
+      <Filter>Strings\zh</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\de-DE\Resources.resw">
+      <Filter>Strings\de-DE</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\de\Resources.resw">
+      <Filter>Strings\de</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\ar\Resources.resw">
+      <Filter>Strings\ar</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\bg\Resources.resw">
+      <Filter>Strings\bg</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\ca\Resources.resw">
+      <Filter>Strings\ca</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\cs-CZ\Resources.resw">
+      <Filter>Strings\cs-CZ</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\da-DK\Resources.resw">
+      <Filter>Strings\da-DK</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\el\Resources.resw">
+      <Filter>Strings\el</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\fr-FR\Resources.resw">
+      <Filter>Strings\fr-FR</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\nl-NL\Resources.resw">
+      <Filter>Strings\nl-NL</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\ru-RU\Resources.resw">
+      <Filter>Strings\ru-RU</Filter>
+    </PRIResource>
+    <PRIResource Include="localization\en-GB\Resources.resw">
+      <Filter>Strings\en-GB</Filter>
+    </PRIResource>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/update-translations.py b/update-translations.py
new file mode 100644
index 0000000000000000000000000000000000000000..e7ae78e5d43f39ea97b684815206f4fc8a9277af
--- /dev/null
+++ b/update-translations.py
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+
+##
+##  Copyright (C) 2016-2017 Savoir-faire Linux Inc.
+##
+##  Author: Edric Milaret <edric.ladent-milaret@savoirfairelinux.com>
+##  Author: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com>
+##  Author: Andreas Traczyk <andreas.traczyk@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, write to the Free Software
+##  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
+##
+
+import os
+import shutil
+
+print("== Pushing sources")
+os.system("tx push -s")
+
+print("== Pulling translations")
+os.system("tx pull -af --minimum-perc=1")
+
+print("== All done")
\ No newline at end of file