diff --git a/App.xaml b/App.xaml
index 665c6c02218fb909e5ec2a95d13ded691cb71c48..b1fd46861b4e831911ba62ad95dee2cac5816b45 100644
--- a/App.xaml
+++ b/App.xaml
@@ -21,45 +21,46 @@
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:local="using:RingClientUWP"
     xmlns:views="using:RingClientUWP.Views"
+    xmlns:cnv="using:RingClientUWP.Converters"
     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_" />
+            <cnv:BubbleBackground x:Key="_bubbleBackground_" />
+            <cnv:BubbleHorizontalAlignement x:Key="_bubbleHorizontalAlignement_" />
+            <cnv:boolToVisibility x:Key="_boolToVisibility_" />
+            <cnv:MessageDateTimeString x:Key="_MessageDateTimeString_" />
+            <cnv:MessageChainBreakToVisibility x:Key="_MessageChainBreakToVisibility_" />
+            <cnv:MessageChainBreakToHeight x:Key="_MessageChainBreakToHeight_" />
+            <cnv:CachedImageConverter x:Key="_CachedImageConverter_" />
+            <cnv:NameToInitialConverter x:Key="_NameToInitialConverter_" />
+            <cnv:NewMessageBubbleNotification x:Key="_NewMessageBubbleNotification_" />
+            <cnv:NewMessageNotificationToNumber x:Key="_NewMessageNotificationToNumber_" />
+            <cnv:IncomingVisibility x:Key="_IncomingVisibility_" />
+            <cnv:OutGoingVisibility x:Key="_OutGoingVisibility_" />
+            <cnv:HasAnActiveCall x:Key="_HasAnActiveCall_" />
+            <cnv:HasAvatarToVisibility x:Key="_HasAvatarToVisibility_" />
+            <cnv:AccountTypeToSourceImage x:Key="_AccountTypeToSourceImage_" />
+            <cnv:RingAccountTypeToVisibility x:Key="_RingAccountTypeToVisibility_" />
+            <cnv:AccountSelectedToVisibility x:Key="_AccountSelectedToVisibility_" />
+            <cnv:CollapseEmptyString x:Key="_CollapseEmptyString_" />
+            <cnv:ContactStatusNotification x:Key="_ContactStatusNotification_" />
+            <cnv:uintToVisibility x:Key="_uintToVisibility_" />
+            <cnv:OneToVisibility x:Key="_OneToVisibility_" />
+            <cnv:PresenceStatus x:Key="_PresenceStatus_" />
+            <cnv:MoreThanOneToVisibility x:Key="_MoreThanOneToVisibility_" />
+            <cnv:MoreThanZeroToVisibility x:Key="_MoreThanZeroToVisibility_" />
+            <cnv:UnreadAccountNotificationsString x:Key="_UnreadAccountNotificationsString_" />
+            <cnv:PartialTrustToVisibility x:Key="_PartialTrustToVisibility_" />
+            <cnv:TrustedToVisibility x:Key="_TrustedToVisibility_" />
+            <cnv:SelectedAccountToVisibility x:Key="_SelectedAccountToVisibility_" />
+            <cnv:CallStatusToSpinnerVisibility x:Key="_CallStatusToSpinnerVisibility_" />
+            <cnv:CallStatusForIncomingCallEllipse x:Key="_CallStatusForIncomingCallEllipse_" />
+            <cnv:AccountRegistrationStateToString x:Key="_AccountRegistrationStateToString_" />
+            <cnv:AccountRegistrationStateToForeground x:Key="_AccountRegistrationStateToForeground_" />
+            <cnv:ContactAccountTypeToVisibility x:Key="_ContactAccountTypeToVisibility_" />
+            <cnv:ContactConferenceableToVisibility x:Key="_ContactConferenceableToVisibility_" />
 
             <ResourceDictionary.MergedDictionaries>
                 <ResourceDictionary Source="ms-appx:///Styles.xaml"/>
diff --git a/Converters.cpp b/Converters.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f39710d02fcca601f3a410ad37b983e4b9c2fed8
--- /dev/null
+++ b/Converters.cpp
@@ -0,0 +1,506 @@
+/**************************************************************************
+* 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 "Converters.h"
+
+using namespace RingClientUWP;
+using namespace Converters;
+using namespace ViewModel;
+
+Object^
+BubbleBackground::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto c1 = Utils::ColorFromString("#ffebefef");
+    auto c2 = Utils::ColorFromString("#ffcfebf5");
+    return ((bool)value) ? ref new SolidColorBrush(c1) : ref new SolidColorBrush(c2);
+}
+
+Object^
+BubbleHorizontalAlignement::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    return ((bool)value) ? Windows::UI::Xaml::HorizontalAlignment::Left : Windows::UI::Xaml::HorizontalAlignment::Right;
+}
+
+Object^
+IncomingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto state = static_cast<CallStatus>(value);
+
+    if (state == CallStatus::INCOMING_RINGING)
+        return  Windows::UI::Xaml::Visibility::Visible;
+    else
+        return  Windows::UI::Xaml::Visibility::Collapsed;
+}
+
+Object^
+OutGoingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto state = static_cast<CallStatus>(value);
+
+    if (state == CallStatus::SEARCHING
+        || state == CallStatus::OUTGOING_RINGING
+        || state == CallStatus::OUTGOING_REQUESTED)
+        return  Windows::UI::Xaml::Visibility::Visible;
+    else
+        return  Windows::UI::Xaml::Visibility::Collapsed;
+}
+
+Object^
+HasAnActiveCall::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto state = static_cast<CallStatus>(value);
+
+    if (state == CallStatus::NONE || state == CallStatus::ENDED)
+        return Windows::UI::Xaml::Visibility::Collapsed;
+    else
+        return Windows::UI::Xaml::Visibility::Visible;
+}
+
+Object^
+NewMessageBubbleNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto unreadMessages = static_cast<uint32>(value);
+
+    if (unreadMessages > 0)
+        return Windows::UI::Xaml::Visibility::Visible;
+
+    return Windows::UI::Xaml::Visibility::Collapsed;
+}
+
+Object^
+NewMessageNotificationToNumber::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto unreadMessages = static_cast<uint32>(value);
+
+    if (unreadMessages > 9)
+        return "9+";
+
+    return unreadMessages.ToString();
+}
+
+Object^
+AccountTypeToSourceImage::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto accountType = dynamic_cast<String^>(value);
+    Uri^ uri = (accountType == "RING")
+        ? ref new Uri("ms-appx:///Assets/AccountTypeRING.png")
+        : ref new Uri("ms-appx:///Assets/AccountTypeSIP.png");
+
+    return ref new BitmapImage(uri);
+}
+
+Object^
+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^
+AccountSelectedToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    if ((bool)value == true)
+        return Windows::UI::Xaml::Visibility::Visible;
+
+    return Windows::UI::Xaml::Visibility::Collapsed;
+}
+
+Object^
+CollapseEmptyString::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto stringValue = dynamic_cast<String^>(value);
+
+    return (stringValue->IsEmpty())
+        ? Windows::UI::Xaml::Visibility::Collapsed
+        : Windows::UI::Xaml::Visibility::Visible;
+}
+
+Object^
+ContactStatusNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto contactStatus = static_cast<ContactStatus>(value);
+
+    if (contactStatus == ContactStatus::WAITING_FOR_ACTIVATION)
+        return Windows::UI::Xaml::Visibility::Visible;
+    else
+        return Windows::UI::Xaml::Visibility::Collapsed;
+}
+
+Object^
+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 if_true;
+    return  if_false;
+}
+
+Object^
+uintToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    if (static_cast<unsigned>(value))
+        return Windows::UI::Xaml::Visibility::Visible;
+
+    return  Windows::UI::Xaml::Visibility::Collapsed;
+}
+
+Object^
+OneToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    if (static_cast<unsigned>(value) == 1)
+        return Windows::UI::Xaml::Visibility::Visible;
+
+    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)
+{
+    if (static_cast<unsigned>(value) > 1)
+        return Windows::UI::Xaml::Visibility::Visible;
+
+    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;
+
+    return  Windows::UI::Xaml::Visibility::Collapsed;
+}
+
+Object^
+CallStatusToSpinnerVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
+{
+    auto callStatus = static_cast<CallStatus>(value);
+
+    if (callStatus == CallStatus::INCOMING_RINGING
+        || callStatus == CallStatus::OUTGOING_REQUESTED
+        || callStatus == CallStatus::OUTGOING_RINGING
+        || callStatus == CallStatus::SEARCHING)
+        return  Windows::UI::Xaml::Visibility::Visible;
+    else
+        return  Windows::UI::Xaml::Visibility::Collapsed;
+}
+
+Object^
+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  if_true;
+    }
+    else {
+        return  if_false;
+    }
+}
+
+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;
+}
\ No newline at end of file
diff --git a/Converters.h b/Converters.h
new file mode 100644
index 0000000000000000000000000000000000000000..cf43db42dcc1cfa67011a9fb25aee8d3007bf944
--- /dev/null
+++ b/Converters.h
@@ -0,0 +1,280 @@
+/**************************************************************************
+* 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
+
+using namespace Platform;
+using namespace Windows::UI::Xaml;
+using namespace Windows::UI::Xaml::Data;
+using namespace Windows::UI::Xaml::Controls;
+using namespace Windows::UI::Xaml::Input;
+using namespace Windows::UI::Xaml::Interop;
+using namespace Windows::UI::Xaml::Documents;
+
+#define NOTIMPLEMENTED                                      \
+    {                                                       \
+        throw ref new Platform::NotImplementedException();  \
+    };                                                      \
+
+namespace RingClientUWP
+{
+
+namespace Converters
+{
+
+public ref class BubbleBackground 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) NOTIMPLEMENTED
+        BubbleBackground() {};
+};
+
+public ref class BubbleHorizontalAlignement 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) NOTIMPLEMENTED
+        BubbleHorizontalAlignement() {};
+};
+
+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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        MessageDateTimeString() {};
+};
+
+public ref class IncomingVisibility 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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        PresenceStatus() {};
+};
+
+public ref class OutGoingVisibility 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) NOTIMPLEMENTED
+        OutGoingVisibility() {};
+};
+
+public ref class HasAnActiveCall 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) NOTIMPLEMENTED
+        HasAnActiveCall() {};
+};
+
+public ref class AccountTypeToSourceImage 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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        RingAccountTypeToVisibility() {};
+};
+
+public ref class AccountSelectedToVisibility 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) NOTIMPLEMENTED
+        AccountSelectedToVisibility() {};
+};
+
+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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        NewMessageBubbleNotification() {};
+};
+
+public ref class CollapseEmptyString 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) NOTIMPLEMENTED
+        CollapseEmptyString() {};
+};
+
+public ref class ContactStatusNotification 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) NOTIMPLEMENTED
+        ContactStatusNotification() {};
+};
+
+public ref class boolToVisibility 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) NOTIMPLEMENTED
+        boolToVisibility() {};
+};
+
+public ref class uintToVisibility 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) NOTIMPLEMENTED
+        uintToVisibility() {};
+};
+
+public ref class OneToVisibility 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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        UnreadAccountNotificationsString() {};
+};
+
+public ref class MoreThanOneToVisibility 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) NOTIMPLEMENTED
+        MoreThanOneToVisibility() {};
+};
+
+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) NOTIMPLEMENTED
+        MoreThanZeroToVisibility() {};
+};
+
+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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        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) NOTIMPLEMENTED
+        SelectedAccountToVisibility() {};
+};
+
+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) NOTIMPLEMENTED
+        CallStatusToSpinnerVisibility() {};
+};
+
+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) NOTIMPLEMENTED
+        CallStatusForIncomingCallEllipse() {};
+};
+
+}/* using namespace Converters */
+
+}/* using namespace RingClientUWP */
\ No newline at end of file
diff --git a/MessageTextPage.xaml.cpp b/MessageTextPage.xaml.cpp
index fdbcd65c33e6116763a80a8964c0f37ab81f9764..0da822d57283dca192205d518da75bb4c3c8c39d 100644
--- a/MessageTextPage.xaml.cpp
+++ b/MessageTextPage.xaml.cpp
@@ -237,37 +237,6 @@ RingClientUWP::Views::MessageTextPage::sendMessage()
     }
 }
 
-Object ^ RingClientUWP::Views::BubbleBackground::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    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
-Object ^ RingClientUWP::Views::BubbleBackground::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    throw ref new Platform::NotImplementedException();
-}
-
-RingClientUWP::Views::BubbleBackground::BubbleBackground()
-{}
-
-Object ^ RingClientUWP::Views::BubbleHorizontalAlignement::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    return ((bool)value) ? Windows::UI::Xaml::HorizontalAlignment::Left : Windows::UI::Xaml::HorizontalAlignment::Right;
-}
-
-// we only do OneWay so the next function is not used
-Object ^ RingClientUWP::Views::BubbleHorizontalAlignement::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    throw ref new Platform::NotImplementedException();
-}
-
-RingClientUWP::Views::BubbleHorizontalAlignement::BubbleHorizontalAlignement()
-{}
-
-
 void RingClientUWP::Views::MessageTextPage::OnincomingMessage(Platform::String ^callId, Platform::String ^payload)
 {
     scrollDown();
diff --git a/MessageTextPage.xaml.h b/MessageTextPage.xaml.h
index d5e70c6b95f799603488ced8b7dbe7d3016d4aa9..6e6334de38efa3a974d6fb47c743182a3a55f597 100644
--- a/MessageTextPage.xaml.h
+++ b/MessageTextPage.xaml.h
@@ -28,20 +28,6 @@ delegate void CloseMessageTextPage();
 namespace Views
 {
 
-public ref class BubbleBackground sealed : IValueConverter {
-public:
-    virtual Object^ Convert(Object^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object^ parameter, String^ language);
-    virtual Object^ ConvertBack(Object^ value, Windows::UI::Xaml::Interop::TypeName  targetType, Object^ parameter, String^ language);
-    BubbleBackground();
-};
-
-public ref class BubbleHorizontalAlignement sealed : IValueConverter {
-public:
-    virtual Object^ Convert(Object^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object^ parameter, String^ language);
-    virtual Object^ ConvertBack(Object^ value, Windows::UI::Xaml::Interop::TypeName  targetType, Object^ parameter, String^ language);
-    BubbleHorizontalAlignement();
-};
-
 public ref class MessageTextPage sealed
 {
 public:
diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp
index 667561e7ab0a19dcc58e550a9291d29eb15497e4..0ff8eaa7a76abfef570ea1db62559f812e631898 100644
--- a/SmartPanel.xaml.cpp
+++ b/SmartPanel.xaml.cpp
@@ -745,83 +745,8 @@ void RingClientUWP::Views::SmartPanel::showLinkThisDeviceStep1()
     _addAccountNo_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
 }
 
-Object ^ RingClientUWP::Views::IncomingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    auto state = static_cast<CallStatus>(value);
-
-    if (state == CallStatus::INCOMING_RINGING)
-        return  Windows::UI::Xaml::Visibility::Visible;
-    else
-        return  Windows::UI::Xaml::Visibility::Collapsed;
-}
-
-Object ^ RingClientUWP::Views::IncomingVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    throw ref new Platform::NotImplementedException();
-}
-
-RingClientUWP::Views::IncomingVisibility::IncomingVisibility()
-{}
 
 
-Object ^ RingClientUWP::Views::OutGoingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    auto state = static_cast<CallStatus>(value);
-
-    if (state == CallStatus::SEARCHING
-            || state == CallStatus::OUTGOING_RINGING
-            || state == CallStatus::OUTGOING_REQUESTED)
-        return  Windows::UI::Xaml::Visibility::Visible;
-    else
-        return  Windows::UI::Xaml::Visibility::Collapsed;
-}
-
-Object ^ RingClientUWP::Views::OutGoingVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    throw ref new Platform::NotImplementedException();
-}
-
-RingClientUWP::Views::OutGoingVisibility::OutGoingVisibility()
-{}
-
-Object ^ RingClientUWP::Views::HasAnActiveCall::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    auto state = static_cast<CallStatus>(value);
-
-    if (state == CallStatus::NONE || state == CallStatus::ENDED)
-        return Windows::UI::Xaml::Visibility::Collapsed;
-    else
-        return Windows::UI::Xaml::Visibility::Visible;
-}
-
-Object ^ RingClientUWP::Views::HasAnActiveCall::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    throw ref new Platform::NotImplementedException();
-}
-
-RingClientUWP::Views::HasAnActiveCall::HasAnActiveCall()
-{}
-
-Object ^ RingClientUWP::Views::NewMessageBubbleNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    auto unreadMessages = static_cast<uint32>(value);
-
-    if (unreadMessages > 0)
-        return Windows::UI::Xaml::Visibility::Visible;
-
-    return Windows::UI::Xaml::Visibility::Collapsed;
-}
-
-Object ^ RingClientUWP::Views::NewMessageNotificationToNumber::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    auto unreadMessages = static_cast<uint32>(value);
-
-    if (unreadMessages > 9)
-        return "9+";
-
-    return unreadMessages.ToString();
-}
-
 void RingClientUWP::Views::SmartPanel::_addDevice__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
@@ -894,48 +819,6 @@ void RingClientUWP::Views::SmartPanel::_closePin__Click(Platform::Object^ sender
     _waitingAndResult_->Text = loader->GetString("_accountsWaitingAndResult_.Text");
 }
 
-Object ^ RingClientUWP::Views::AccountTypeToSourceImage::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    auto accountType = dynamic_cast<String^>(value);
-    Uri^ uri = (accountType == "RING")
-               ? ref new Uri("ms-appx:///Assets/AccountTypeRING.png")
-               : ref new Uri("ms-appx:///Assets/AccountTypeSIP.png");
-
-    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();
-}
-
-RingClientUWP::Views::AccountTypeToSourceImage::AccountTypeToSourceImage()
-{}
-
-Object ^ RingClientUWP::Views::AccountSelectedToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    if ((bool)value == true)
-        return Windows::UI::Xaml::Visibility::Visible;
-
-    return Windows::UI::Xaml::Visibility::Collapsed;
-}
-
-Object ^ RingClientUWP::Views::AccountSelectedToVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    throw ref new Platform::NotImplementedException();
-}
-
-RingClientUWP::Views::AccountSelectedToVisibility::AccountSelectedToVisibility()
-{}
-
-
 void RingClientUWP::Views::SmartPanel::_editAccountMenuButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     _scrollViewerEditionMenu_->UpdateLayout();
@@ -1076,9 +959,6 @@ void RingClientUWP::Views::SmartPanel::_accountTypeComboBox__SelectionChanged(Pl
     }
 }
 
-
-
-
 void RingClientUWP::Views::SmartPanel::_accountAliasTextBox__TextChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::TextChangedEventArgs^ e)
 {
     checkStateAddAccountMenu();
@@ -1089,24 +969,6 @@ void RingClientUWP::Views::SmartPanel::_accountAliasTextBoxEdition__TextChanged(
     checkStateEditionMenu();
 }
 
-Object ^ RingClientUWP::Views::CollapseEmptyString::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    auto stringValue = dynamic_cast<String^>(value);
-
-    return (stringValue->IsEmpty())
-           ? Windows::UI::Xaml::Visibility::Collapsed
-           : Windows::UI::Xaml::Visibility::Visible;
-}
-
-Object ^ RingClientUWP::Views::CollapseEmptyString::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    throw ref new Platform::NotImplementedException();
-}
-
-RingClientUWP::Views::CollapseEmptyString::CollapseEmptyString()
-{}
-
-
 void RingClientUWP::Views::SmartPanel::_selectedAccountAvatarContainer__PointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
     _photoboothIcon_->Visibility = Windows::UI::Xaml::Visibility::Visible;
@@ -1658,25 +1520,6 @@ void RingClientUWP::Views::SmartPanel::OncontactDataModified(Platform::String ^a
     updateNotificationsState();
 }
 
-Object ^ RingClientUWP::Views::ContactStatusNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    auto contactStatus = static_cast<ContactStatus>(value);
-
-    if (contactStatus == ContactStatus::WAITING_FOR_ACTIVATION)
-        return Windows::UI::Xaml::Visibility::Visible;
-    else
-        return Windows::UI::Xaml::Visibility::Collapsed;
-}
-
-Object ^ RingClientUWP::Views::ContactStatusNotification::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    throw ref new Platform::NotImplementedException();
-}
-
-RingClientUWP::Views::ContactStatusNotification::ContactStatusNotification()
-{}
-
-
 void RingClientUWP::Views::SmartPanel::selectMenu(MenuOpen menu)
 {
     /* manage the video preview */
@@ -1798,115 +1641,6 @@ SmartPanel::updateContactNotificationsState(Contact^ contact)
     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 if_true;
-    return  if_false;
-}
-
-Object ^ RingClientUWP::Views::boolToVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    throw ref new Platform::NotImplementedException();
-}
-
-Object^
-uintToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    if (static_cast<unsigned>(value))
-        return Windows::UI::Xaml::Visibility::Visible;
-
-    return  Windows::UI::Xaml::Visibility::Collapsed;
-}
-
-Object^
-OneToVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    if (static_cast<unsigned>(value) == 1)
-        return Windows::UI::Xaml::Visibility::Visible;
-
-    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)
-{
-    if (static_cast<unsigned>(value) > 1)
-        return Windows::UI::Xaml::Visibility::Visible;
-
-    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;
-
-    return  Windows::UI::Xaml::Visibility::Collapsed;
-}
-
 void RingClientUWP::Views::SmartPanel::OnincomingAccountMessage(Platform::String ^accountId, Platform::String ^from, Platform::String ^payload)
 {
     auto contactListModel = AccountsViewModel::instance->getContactListModel(Utils::toString(accountId));
@@ -1934,48 +1668,6 @@ void RingClientUWP::Views::SmartPanel::OnincomingAccountMessage(Platform::String
     }
 }
 
-Object ^ RingClientUWP::Views::CallStatusToSpinnerVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    auto callStatus = static_cast<CallStatus>(value);
-
-    if (callStatus == CallStatus::INCOMING_RINGING
-            || callStatus == CallStatus::OUTGOING_REQUESTED
-            || callStatus == CallStatus::OUTGOING_RINGING
-            || callStatus == CallStatus::SEARCHING)
-        return  Windows::UI::Xaml::Visibility::Visible;
-    else
-        return  Windows::UI::Xaml::Visibility::Collapsed;
-}
-
-Object ^ RingClientUWP::Views::CallStatusToSpinnerVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    throw ref new Platform::NotImplementedException();
-}
-
-RingClientUWP::Views::CallStatusToSpinnerVisibility::CallStatusToSpinnerVisibility()
-{}
-
-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  if_true;
-    }
-    else {
-        return  if_false;
-    }
-}
-
-Object ^ RingClientUWP::Views::CallStatusForIncomingCallEllipse::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
-{
-    throw ref new Platform::NotImplementedException();
-}
-
 void
 SmartPanel::addToContactList(String^ name)
 {
@@ -2283,230 +1975,6 @@ SmartPanel::OnnewBuddyNotification(const std::string& accountId, const std::stri
     }
 }
 
-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)
diff --git a/SmartPanel.xaml.h b/SmartPanel.xaml.h
index 83f3e7394d9c1924a96e25790e53080e8715ff5c..16385435a526707ccf2edda3da21535f08c8eb03 100644
--- a/SmartPanel.xaml.h
+++ b/SmartPanel.xaml.h
@@ -41,275 +41,6 @@ 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);
-    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language);
-    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);
-    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language);
-    OutGoingVisibility();
-};
-
-public ref class HasAnActiveCall 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);
-    HasAnActiveCall();
-};
-
-public ref class AccountTypeToSourceImage 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);
-    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);
-    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language);
-    AccountSelectedToVisibility();
-};
-
-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) {
-        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 {
-public:
-    virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
-    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language);
-    CollapseEmptyString();
-};
-
-public ref class ContactStatusNotification 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);
-    ContactStatusNotification();
-};
-
-public ref class boolToVisibility 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);
-    boolToVisibility() {};
-};
-
-public ref class uintToVisibility 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;
-    };
-    uintToVisibility() {};
-};
-
-public ref class OneToVisibility 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;
-    };
-    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);
-    virtual Object^ ConvertBack(Object^ value, TypeName  targetType, Object^ parameter, String^ language) {
-        return nullptr;
-    };
-    MoreThanOneToVisibility() {};
-};
-
-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;
-    };
-    MoreThanZeroToVisibility() {};
-};
-
-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) {
-        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 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);
-    CallStatusToSpinnerVisibility();
-};
-
-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);
-    CallStatusForIncomingCallEllipse() {};
-};
-
-
 public ref class SmartPanel sealed
 {
 public:
diff --git a/pch.h b/pch.h
index 777e3f335c2071a2a2f9cadc1fdfd07203ec3260..f30cab704d587d27593a48695cf9129a64d5a93e 100644
--- a/pch.h
+++ b/pch.h
@@ -56,6 +56,7 @@
 #include "UserPreferences.h"
 #include "VCardUtils.h"
 #include "ResourceManager.h"
+#include "Converters.h"
 
 /* video */
 #include "Video.h"
diff --git a/ring-client-uwp.vcxproj b/ring-client-uwp.vcxproj
index 3aff976789688fefa8134a08a804543ee13f618c..38cf3c0bb524e0a68ad8abef83095b7dadc2dda0 100644
--- a/ring-client-uwp.vcxproj
+++ b/ring-client-uwp.vcxproj
@@ -182,6 +182,7 @@
     <ClInclude Include="ContactRequestItemsViewModel.h" />
     <ClInclude Include="ContactListModel.h" />
     <ClInclude Include="Conversation.h" />
+    <ClInclude Include="Converters.h" />
     <ClInclude Include="HttpUtils.h" />
     <ClInclude Include="RingDevice.h" />
     <ClInclude Include="RingDeviceItemsViewModel.h" />
@@ -195,7 +196,7 @@
       <DependentUpon>MessageTextPage.xaml</DependentUpon>
     </ClInclude>
     <ClInclude Include="pch.h">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
     </ClInclude>
     <ClInclude Include="App.xaml.h">
       <DependentUpon>App.xaml</DependentUpon>
@@ -367,6 +368,7 @@
     <ClCompile Include="ContactRequestItemsViewModel.cpp" />
     <ClCompile Include="ContactListModel.cpp" />
     <ClCompile Include="Conversation.cpp" />
+    <ClCompile Include="Converters.cpp" />
     <ClCompile Include="RingDeviceItemsViewModel.cpp" />
     <ClCompile Include="RingDeviceItem.cpp" />
     <ClCompile Include="LoadingPage.xaml.cpp">
diff --git a/ring-client-uwp.vcxproj.filters b/ring-client-uwp.vcxproj.filters
index d3a39c659d06bb0cc98d4b7fefd6cd398c74992c..c291cd01c59546a90b9309b844871766ecf3d841 100644
--- a/ring-client-uwp.vcxproj.filters
+++ b/ring-client-uwp.vcxproj.filters
@@ -94,6 +94,9 @@
     <ClCompile Include="RingDeviceItem.cpp">
       <Filter>Controls</Filter>
     </ClCompile>
+    <ClCompile Include="Converters.cpp">
+      <Filter>Common</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="LoadingPage.xaml.h" />
@@ -202,6 +205,9 @@
     <ClInclude Include="HttpUtils.h">
       <Filter>Common</Filter>
     </ClInclude>
+    <ClInclude Include="Converters.h">
+      <Filter>Common</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <Image Include="Assets\AccountTypeRING.png">