UI/UX: refactor smartlist

Change-Id: Ibfd5154757908ebd85f4b0060da00a7c608a0e56
Reviewed-by: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 902723e..8f3a947 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -227,7 +227,9 @@
    src/delegates/ImageManipulationDelegate.h
    src/AccountSelectionManager.h
    src/AccountSelectionManager.mm
-   src/utils.h)
+   src/utils.h
+   src/NSString+Extensions.h
+   src/NSString+Extensions.mm)
 
 
 SET(ringclient_XIBS
@@ -275,6 +277,7 @@
        MACOSX_PACKAGE_LOCATION Resources)
 
 SET(ring_ICONS
+${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_block.png
 ${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_attachment.png
 ${CMAKE_CURRENT_SOURCE_DIR}/data/default_avatar_overlay.png
 ${CMAKE_CURRENT_SOURCE_DIR}/data/symbol_name.png
diff --git a/data/dark/ic_action_block.png b/data/dark/ic_action_block.png
new file mode 100644
index 0000000..0320449
--- /dev/null
+++ b/data/dark/ic_action_block.png
Binary files differ
diff --git a/src/ConversationVC.mm b/src/ConversationVC.mm
index 4061e66..7327881 100644
--- a/src/ConversationVC.mm
+++ b/src/ConversationVC.mm
@@ -88,6 +88,18 @@
     return self;
 }
 
+-(void) clearData {
+    cachedConv_ = nil;
+    convUid_ = "";
+    convModel_ = nil;
+
+    [messagesViewVC clearData];
+    QObject::disconnect(modelSortedConnection_);
+    QObject::disconnect(filterChangedConnection_);
+    QObject::disconnect(newConversationConnection_);
+    QObject::disconnect(conversationRemovedConnection_);
+}
+
 -(const lrc::api::conversation::Info*) getCurrentConversation
 {
     if (convModel_ == nil || convUid_.empty())
@@ -282,6 +294,8 @@
         return;
     }
 
+    [self clearData];
+
     if (!animate) {
         [self.view setHidden:YES];
         return;
diff --git a/src/MessagesVC.h b/src/MessagesVC.h
index f88b1e9..16819ed 100644
--- a/src/MessagesVC.h
+++ b/src/MessagesVC.h
@@ -30,6 +30,7 @@
 @interface MessagesVC : NSViewController
 
 -(void)setConversationUid:(const std::string)convUid model:(lrc::api::ConversationModel*)model;
+-(void)clearData;
 
 @property (retain, nonatomic) id <MessagesVCDelegate> delegate;
 
diff --git a/src/MessagesVC.mm b/src/MessagesVC.mm
index a05b8c5..17b451b 100644
--- a/src/MessagesVC.mm
+++ b/src/MessagesVC.mm
@@ -1,3 +1,4 @@
+
 /*
  *  Copyright (C) 2015-2018 Savoir-faire Linux Inc.
  *  Author: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com>
@@ -89,6 +90,16 @@
     [conversationView registerNib:cellNib forIdentifier:@"RightOngoingFileView"];
     [conversationView registerNib:cellNib forIdentifier:@"RightFinishedFileView"];
 }
+-(void) clearData {
+    cachedConv_ = nil;
+    convUid_ = "";
+    convModel_ = nil;
+
+    QObject::disconnect(modelSortedSignal_);
+    QObject::disconnect(filterChangedSignal_);
+    QObject::disconnect(interactionStatusUpdatedSignal_);
+    QObject::disconnect(newInteractionSignal_);
+}
 
 -(const lrc::api::conversation::Info*) getCurrentConversation
 {
@@ -390,8 +401,6 @@
             } else {
                 result = [tableView makeViewWithIdentifier:@"LeftMessageView" owner:self];
             }
-            if (interaction.status == lrc::api::interaction::Status::UNREAD)
-                convModel_->setInteractionRead(convUid_, it->first);
             break;
         case lrc::api::interaction::Type::INCOMING_DATA_TRANSFER:
         case lrc::api::interaction::Type::OUTGOING_DATA_TRANSFER:
diff --git a/src/NSString+Extensions.h b/src/NSString+Extensions.h
new file mode 100644
index 0000000..7cd7506
--- /dev/null
+++ b/src/NSString+Extensions.h
@@ -0,0 +1,27 @@
+/*
+ *  Copyright (C) 2018 Savoir-faire Linux Inc.
+ *  Author: Kateryna Kostiuk <kateryna.kostiuk@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 <Foundation/Foundation.h>
+
+@interface NSString (Extensions)
+
+- (NSString *) removeAllNewLinesAtTheEnd;
+- (NSString *) removeEmptyLinesAtBorders;
+
+@end
diff --git a/src/NSString+Extensions.mm b/src/NSString+Extensions.mm
new file mode 100644
index 0000000..d843ee2
--- /dev/null
+++ b/src/NSString+Extensions.mm
@@ -0,0 +1,77 @@
+/*
+ *  Copyright (C) 2018 Savoir-faire Linux Inc.
+ *  Author: Kateryna Kostiuk <kateryna.kostiuk@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 "NSString+Extensions.h"
+
+@implementation NSString (Extensions)
+
+- (NSString *) removeAllNewLinesAtTheEnd {
+    NSString *result = self;
+    while ([result endedByEmptyLine]) {
+        result = [result removeLastWhiteSpaceAndNewLineCharacter];
+    }
+    return result;
+}
+
+- (NSString *) removeAllNewLinesAtBegining {
+    NSString *result = self;
+    while ([result startByEmptyLine]) {
+        result = [result removeFirstWhiteSpaceAndNewLineCharacter];
+    }
+    return result;
+}
+
+- (NSString *) removeEmptyLinesAtBorders {
+    NSString *result = self;
+    result = [result removeAllNewLinesAtBegining];
+    result = [result removeAllNewLinesAtTheEnd];
+    return result;
+}
+
+-(bool)endedByEmptyLine {
+    if ([self length] < 1) {
+        return false;
+    }
+    unichar last = [self characterAtIndex:[self length] - 1];
+    return [[NSCharacterSet whitespaceAndNewlineCharacterSet] characterIsMember:last];
+}
+
+- (bool)startByEmptyLine {
+    if ([self length] < 1) {
+        return false;
+    }
+    unichar first = [self characterAtIndex:0];
+    return [[NSCharacterSet whitespaceAndNewlineCharacterSet] characterIsMember:first];
+}
+
+- (NSString *) removeLastWhiteSpaceAndNewLineCharacter {
+    if ([self endedByEmptyLine]) {
+        return [self substringToIndex:[self length]-1];
+    }
+    return self;
+}
+
+- (NSString *) removeFirstWhiteSpaceAndNewLineCharacter {
+    if ([self startByEmptyLine]) {
+        return [self substringFromIndex:1];
+    }
+    return self;
+}
+
+@end
diff --git a/src/SmartViewVC.mm b/src/SmartViewVC.mm
index 547cb18..8ee6565 100755
--- a/src/SmartViewVC.mm
+++ b/src/SmartViewVC.mm
@@ -21,6 +21,9 @@
 
 #import "SmartViewVC.h"
 
+//std
+#import <sstream>
+
 //Qt
 #import <QtMacExtras/qmacfunctions.h>
 #import <QPixmap>
@@ -54,11 +57,12 @@
     __unsafe_unretained IBOutlet RingTableView* smartView;
     __unsafe_unretained IBOutlet NSSearchField* searchField;
     __strong IBOutlet NSSegmentedControl *listTypeSelector;
+    __strong IBOutlet NSLayoutConstraint *listTypeSelectorHeight;
     bool selectorIsPresent;
 
-    QMetaObject::Connection modelSortedConnection_, modelUpdatedConnection_, filterChangedConnection_, newConversationConnection_, conversationRemovedConnection_, interactionStatusUpdatedConnection_, conversationClearedConnection;
+    QMetaObject::Connection modelSortedConnection_, modelUpdatedConnection_, filterChangedConnection_, newConversationConnection_, conversationRemovedConnection_, newInteractionConnection_, interactionStatusUpdatedConnection_, conversationClearedConnection;
 
-    lrc::api::ConversationModel* model_;
+    lrc::api::ConversationModel* convModel_;
     std::string selectedUid_;
     lrc::api::profile::Type currentFilterType;
 
@@ -74,12 +78,16 @@
 // Tags for views
 NSInteger const IMAGE_TAG           = 100;
 NSInteger const DISPLAYNAME_TAG     = 200;
-NSInteger const DETAILS_TAG         = 300;
-NSInteger const CALL_BUTTON_TAG     = 400;
-NSInteger const TXT_BUTTON_TAG      = 500;
-NSInteger const CANCEL_BUTTON_TAG   = 600;
-NSInteger const RING_ID_LABEL       = 700;
-NSInteger const PRESENCE_TAG        = 800;
+NSInteger const NOTIFICATONS_TAG    = 300;
+NSInteger const RING_ID_LABEL       = 400;
+NSInteger const PRESENCE_TAG        = 500;
+NSInteger const TOTALMSGS_TAG       = 600;
+NSInteger const TOTALINVITES_TAG    = 700;
+NSInteger const DATE_TAG            = 800;
+NSInteger const SNIPPET_TAG         = 900;
+NSInteger const ADD_BUTTON_TAG            = 1000;
+NSInteger const REFUSE_BUTTON_TAG         = 1100;
+NSInteger const BLOCK_BUTTON_TAG          = 1200;
 
 // Segment indices for smartlist selector
 NSInteger const CONVERSATION_SEG    = 0;
@@ -109,6 +117,9 @@
 
     currentFilterType = lrc::api::profile::Type::RING;
     selectorIsPresent = true;
+
+    smartView.selectionHighlightStyle = NSTableViewSelectionHighlightStyleNone;
+    
 }
 
 - (void)placeCall:(id)sender
@@ -120,57 +131,71 @@
         row = [smartView selectedRow];
     else
         return;
-    if (model_ == nil)
+    if (convModel_ == nil)
         return;
 
-    auto conv = model_->filteredConversation(row);
-    model_->placeCall(conv.uid);
+    auto conv = convModel_->filteredConversation(row);
+    convModel_->placeCall(conv.uid);
+}
+
+-(void) reloadSelectorNotifications
+{
+    NSTextField* totalMsgsCount = [self.view viewWithTag:TOTALMSGS_TAG];
+    NSTextField* totalInvites = [self.view viewWithTag:TOTALINVITES_TAG];
+
+    if (!selectorIsPresent) {
+        [totalMsgsCount setHidden:true];
+        [totalInvites setHidden:true];
+        return;
+    }
+
+    auto ringConversations = convModel_->getFilteredConversations(lrc::api::profile::Type::RING);
+    int totalUnreadMessages = 0;
+    std::for_each(ringConversations.begin(), ringConversations.end(),
+        [&totalUnreadMessages, self] (const auto& conversation) {
+            totalUnreadMessages += convModel_->getNumberOfUnreadMessagesFor(conversation.uid);
+        });
+    [totalMsgsCount setHidden:(totalUnreadMessages == 0)];
+    [totalMsgsCount setIntValue:totalUnreadMessages];
+
+    auto totalRequests = [self chosenAccount].contactModel->pendingRequestCount();
+    [totalInvites setHidden:(totalRequests == 0)];
+    [totalInvites setIntValue:totalRequests];
 }
 
 -(void) reloadData
 {
     NSLog(@"reload");
     [smartView deselectAll:nil];
-    if (model_ == nil)
+    if (convModel_ == nil)
         return;
 
-    if (!model_->owner.contactModel->hasPendingRequests()) {
+    [self reloadSelectorNotifications];
+
+    if (!convModel_->owner.contactModel->hasPendingRequests()) {
         if (currentFilterType == lrc::api::profile::Type::PENDING) {
             [self selectConversationList];
         }
         if (selectorIsPresent) {
-            [listTypeSelector removeFromSuperview];
+            listTypeSelectorHeight.constant = 0.0;
+            [listTypeSelector setHidden:YES];
             selectorIsPresent = false;
         }
     } else {
         if (!selectorIsPresent) {
-            // First we restore the selector with selection on "Conversations"
-            [self.view addSubview:listTypeSelector];
             [listTypeSelector setSelected:YES forSegment:CONVERSATION_SEG];
-
-            // Then constraints are recreated (as these are lost when calling removeFromSuperview)
-            [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[searchField]-8-[listTypeSelector]"
-                                                                              options:0
-                                                                              metrics:nil
-                                                                                views:NSDictionaryOfVariableBindings(searchField, listTypeSelector)]];
-            [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[listTypeSelector]-8-[tabbar]"
-                                                                              options:0
-                                                                              metrics:nil
-                                                                                views:NSDictionaryOfVariableBindings(listTypeSelector, tabbar)]];
-            [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[listTypeSelector]-20-|"
-                                                                              options:0
-                                                                              metrics:nil
-                                                                                views:NSDictionaryOfVariableBindings(listTypeSelector)]];
+            listTypeSelectorHeight.constant = 18.0;
+            [listTypeSelector setHidden:NO];
             selectorIsPresent = true;
         }
     }
 
     [smartView reloadData];
 
-    if (!selectedUid_.empty() && model_ != nil) {
-        auto it = getConversationFromUid(selectedUid_, *model_);
-        if (it != model_->allFilteredConversations().end()) {
-            NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:(it - model_->allFilteredConversations().begin())];
+    if (!selectedUid_.empty() && convModel_ != nil) {
+        auto it = getConversationFromUid(selectedUid_, *convModel_);
+        if (it != convModel_->allFilteredConversations().end()) {
+            NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:(it - convModel_->allFilteredConversations().begin())];
             [smartView selectRowIndexes:indexSet byExtendingSelection:NO];
         }
     }
@@ -180,69 +205,80 @@
 
 -(void) reloadConversationWithUid:(NSString *)uid
 {
-    if (model_ != nil) {
-        auto it = getConversationFromUid(std::string([uid UTF8String]), *model_);
-        if (it != model_->allFilteredConversations().end()) {
-            NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:(it - model_->allFilteredConversations().begin())];
-            NSLog(@"reloadConversationWithUid: %@", uid);
-            [smartView reloadDataForRowIndexes:indexSet
-                                 columnIndexes:[NSIndexSet indexSetWithIndex:0]];
-        }
+    if (convModel_ == nil) {
+        return;
+    }
+
+    auto it = getConversationFromUid(std::string([uid UTF8String]), *convModel_);
+    if (it != convModel_->allFilteredConversations().end()) {
+        NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:(it - convModel_->allFilteredConversations().begin())];
+        NSLog(@"reloadConversationWithUid: %@", uid);
+        [smartView reloadDataForRowIndexes:indexSet
+                             columnIndexes:[NSIndexSet indexSetWithIndex:0]];
     }
 }
 
 - (BOOL)setConversationModel:(lrc::api::ConversationModel *)conversationModel
 {
-    if (model_ != conversationModel) {
-        model_ = conversationModel;
-        selectedUid_.clear(); // Clear selected conversation as the selected account is being changed
-        QObject::disconnect(modelSortedConnection_);
-        QObject::disconnect(modelUpdatedConnection_);
-        QObject::disconnect(filterChangedConnection_);
-        QObject::disconnect(newConversationConnection_);
-        QObject::disconnect(conversationRemovedConnection_);
-        QObject::disconnect(interactionStatusUpdatedConnection_);
-        QObject::disconnect(conversationClearedConnection);
-        [self reloadData];
-        if (model_ != nil) {
-            modelSortedConnection_ = QObject::connect(model_, &lrc::api::ConversationModel::modelSorted,
-                                                      [self] (){
-                                                          [self reloadData];
-                                                      });
-            modelUpdatedConnection_ = QObject::connect(model_, &lrc::api::ConversationModel::conversationUpdated,
-                                                       [self] (const std::string& uid){
-                                                           [self reloadConversationWithUid: [NSString stringWithUTF8String:uid.c_str()]];
-                                                       });
-            filterChangedConnection_ = QObject::connect(model_, &lrc::api::ConversationModel::filterChanged,
+    if (convModel_ == conversationModel) {
+        return false;
+    }
+
+    convModel_ = conversationModel;
+    selectedUid_.clear(); // Clear selected conversation as the selected account is being changed
+    QObject::disconnect(modelSortedConnection_);
+    QObject::disconnect(modelUpdatedConnection_);
+    QObject::disconnect(filterChangedConnection_);
+    QObject::disconnect(newConversationConnection_);
+    QObject::disconnect(conversationRemovedConnection_);
+    QObject::disconnect(conversationClearedConnection);
+    QObject::disconnect(interactionStatusUpdatedConnection_);
+    QObject::disconnect(newInteractionConnection_);
+    [self reloadData];
+    if (convModel_ != nil) {
+        modelSortedConnection_ = QObject::connect(convModel_, &lrc::api::ConversationModel::modelSorted,
                                                         [self] (){
                                                             [self reloadData];
                                                         });
-            newConversationConnection_ = QObject::connect(model_, &lrc::api::ConversationModel::newConversation,
-                                                          [self] (const std::string& uid) {
-                                                              [self reloadData];
-                                                              [self updateConversationForNewContact:[NSString stringWithUTF8String:uid.c_str()]];
-                                                          });
-            conversationRemovedConnection_ = QObject::connect(model_, &lrc::api::ConversationModel::conversationRemoved,
-                                                              [self] (){
-                                                                  [self reloadData];
-                                                              });
-            conversationClearedConnection = QObject::connect(model_, &lrc::api::ConversationModel::conversationCleared,
-                                                              [self] (const std::string& id){
-                                                                  [self deselect];
-                                                                  [delegate listTypeChanged];
-                                                              });
-            interactionStatusUpdatedConnection_ = QObject::connect(model_, &lrc::api::ConversationModel::interactionStatusUpdated,
-                                                                   [self] (const std::string& convUid) {
-                                                                       if (convUid != selectedUid_)
-                                                                           return;
-                                                                       [self reloadConversationWithUid: [NSString stringWithUTF8String:convUid.c_str()]];
-                                                                   });
-            model_->setFilter(""); // Reset the filter
-        }
-        [searchField setStringValue:@""];
-        return YES;
+        modelUpdatedConnection_ = QObject::connect(convModel_, &lrc::api::ConversationModel::conversationUpdated,
+                                                        [self] (const std::string& convUid){
+                                                            [self reloadConversationWithUid: [NSString stringWithUTF8String:convUid.c_str()]];
+                                                        });
+        filterChangedConnection_ = QObject::connect(convModel_, &lrc::api::ConversationModel::filterChanged,
+                                                        [self] (){
+                                                            [self reloadData];
+                                                        });
+        newConversationConnection_ = QObject::connect(convModel_, &lrc::api::ConversationModel::newConversation,
+                                                        [self] (const std::string& convUid) {
+                                                            [self reloadData];
+                                                            [self updateConversationForNewContact:[NSString stringWithUTF8String:convUid.c_str()]];
+                                                        });
+        conversationRemovedConnection_ = QObject::connect(convModel_, &lrc::api::ConversationModel::conversationRemoved,
+                                                        [self] (){
+                                                            [delegate listTypeChanged];
+                                                            [self reloadData];
+                                                        });
+        conversationClearedConnection = QObject::connect(convModel_, &lrc::api::ConversationModel::conversationCleared,
+                                                        [self] (const std::string& convUid){
+                                                            [self deselect];
+                                                            [delegate listTypeChanged];
+                                                        });
+        interactionStatusUpdatedConnection_ = QObject::connect(convModel_, &lrc::api::ConversationModel::interactionStatusUpdated,
+                                                        [self] (const std::string& convUid) {
+                                                            if (convUid != selectedUid_)
+                                                                return;
+                                                            [self reloadConversationWithUid: [NSString stringWithUTF8String:convUid.c_str()]];
+                                                        });
+        newInteractionConnection_ = QObject::connect(convModel_, &lrc::api::ConversationModel::newInteraction,
+                                                        [self](const std::string& convUid, uint64_t interactionId, const lrc::api::interaction::Info& interaction){
+                                                            if (convUid == selectedUid_) {
+                                                                convModel_->clearUnreadInteractions(convUid);
+                                                            }
+                                                        });
+        convModel_->setFilter(""); // Reset the filter
     }
-    return NO;
+    [searchField setStringValue:@""];
+    return true;
 }
 
 -(void)selectConversation:(const lrc::api::conversation::Info&)conv model:(lrc::api::ConversationModel*)model;
@@ -253,13 +289,15 @@
 
     [self setConversationModel:model];
 
-    if (model_ != nil) {
-        auto it = getConversationFromUid(selectedUid_, *model_);
-        if (it != model_->allFilteredConversations().end()) {
-            NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:(it - model_->allFilteredConversations().begin())];
-            [smartView selectRowIndexes:indexSet byExtendingSelection:NO];
-            selectedUid_ = uid;
-        }
+    if (convModel_ == nil) {
+        return;
+    }
+
+    auto it = getConversationFromUid(selectedUid_, *convModel_);
+    if (it != convModel_->allFilteredConversations().end()) {
+        NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:(it - convModel_->allFilteredConversations().begin())];
+        [smartView selectRowIndexes:indexSet byExtendingSelection:NO];
+        selectedUid_ = uid;
     }
 }
 
@@ -270,7 +308,7 @@
 }
 
 -(void) clearConversationModel {
-    model_ = nil;
+    convModel_ = nil;
     [self deselect];
     [smartView reloadData];
     if (selectorIsPresent) {
@@ -281,18 +319,19 @@
 
 - (IBAction) listTypeChanged:(id)sender
 {
+    selectedUid_.clear();
     NSInteger selectedItem = [sender selectedSegment];
     switch (selectedItem) {
         case CONVERSATION_SEG:
             if (currentFilterType != lrc::api::profile::Type::RING) {
-                model_->setFilter(lrc::api::profile::Type::RING);
+                convModel_->setFilter(lrc::api::profile::Type::RING);
                 [delegate listTypeChanged];
                 currentFilterType = lrc::api::profile::Type::RING;
             }
             break;
         case REQUEST_SEG:
             if (currentFilterType != lrc::api::profile::Type::PENDING) {
-                model_->setFilter(lrc::api::profile::Type::PENDING);
+                convModel_->setFilter(lrc::api::profile::Type::PENDING);
                 [delegate listTypeChanged];
                 currentFilterType = lrc::api::profile::Type::PENDING;
             }
@@ -311,8 +350,8 @@
     // Do not invert order of the next two lines or stack overflow
     // may happen on -(void) reloadData call if filter is currently set to PENDING
     currentFilterType = lrc::api::profile::Type::RING;
-    model_->setFilter(lrc::api::profile::Type::RING);
-    model_->setFilter("");
+    convModel_->setFilter(lrc::api::profile::Type::RING);
+    convModel_->setFilter("");
 }
 
 -(void) selectPendingList
@@ -322,8 +361,8 @@
     [listTypeSelector setSelectedSegment:REQUEST_SEG];
 
     currentFilterType = lrc::api::profile::Type::PENDING;
-    model_->setFilter(lrc::api::profile::Type::PENDING);
-    model_->setFilter("");
+    convModel_->setFilter(lrc::api::profile::Type::PENDING);
+    convModel_->setFilter("");
 }
 
 #pragma mark - NSTableViewDelegate methods
@@ -342,15 +381,26 @@
 {
     NSInteger row = [notification.object selectedRow];
 
+    [smartView enumerateAvailableRowViewsUsingBlock:^(NSTableRowView *rowView, NSInteger row){
+        NSTableRowView* cellRowView = [smartView rowViewAtRow:row makeIfNecessary:NO];
+        if(rowView.selected){
+            cellRowView.backgroundColor = [NSColor controlColor];
+        }else{
+            cellRowView.backgroundColor = [NSColor whiteColor];
+        }
+    }];
+
     if (row == -1)
         return;
-    if (model_ == nil)
+    if (convModel_ == nil)
         return;
 
-    auto uid = model_->filteredConversation(row).uid;
+    auto uid = convModel_->filteredConversation(row).uid;
     if (selectedUid_ != uid) {
         selectedUid_ = uid;
-        model_->selectConversation(uid);
+        convModel_->selectConversation(uid);
+        convModel_->clearUnreadInteractions(uid);
+        [self reloadSelectorNotifications];
     }
 }
 
@@ -361,56 +411,105 @@
 
 - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
 {
-    if (model_ == nil)
+    if (convModel_ == nil)
         return nil;
 
-    auto conversation = model_->filteredConversation(row);
+    auto conversation = convModel_->filteredConversation(row);
     NSTableCellView* result;
 
     result = [tableView makeViewWithIdentifier:@"MainCell" owner:tableView];
-//    NSTextField* details = [result viewWithTag:DETAILS_TAG];
 
-    NSMutableArray* controls = [NSMutableArray arrayWithObject:[result viewWithTag:CALL_BUTTON_TAG]];
-    [((ContextualTableCellView*) result) setContextualsControls:controls];
-    [((ContextualTableCellView*) result) setShouldBlurParentView:YES];
-
-    //    if (auto call = RecentModel::instance().getActiveCall(qIdx)) {
-    //        [details setStringValue:call->roleData((int)Ring::Role::FormattedState).toString().toNSString()];
-    //        [((ContextualTableCellView*) result) setActiveState:YES];
-    //    } else {
-    //        [details setStringValue:qIdx.data((int)Ring::Role::FormattedLastUsed).toString().toNSString()];
-    //        [((ContextualTableCellView*) result) setActiveState:NO];
-    //    }
-
-    NSTextField* unreadCount = [result viewWithTag:TXT_BUTTON_TAG];
+    NSTextField* unreadCount = [result viewWithTag:NOTIFICATONS_TAG];
     [unreadCount setHidden:(conversation.unreadMessages == 0)];
     [unreadCount setIntValue:conversation.unreadMessages];
-
     NSTextField* displayName = [result viewWithTag:DISPLAYNAME_TAG];
-    NSString* displayNameString = bestNameForConversation(conversation, *model_);
-    NSString* displayIDString = bestIDForConversation(conversation, *model_);
+    NSTextField* displayRingID = [result viewWithTag:RING_ID_LABEL];
+    NSString* displayNameString = bestNameForConversation(conversation, *convModel_);
+    NSString* displayIDString = bestIDForConversation(conversation, *convModel_);
     if(displayNameString.length == 0 || [displayNameString isEqualToString:displayIDString]) {
-        NSTextField* displayRingID = [result viewWithTag:RING_ID_LABEL];
         [displayName setStringValue:displayIDString];
         [displayRingID setHidden:YES];
     }
     else {
-        NSTextField* displayRingID = [result viewWithTag:RING_ID_LABEL];
         [displayName setStringValue:displayNameString];
         [displayRingID setStringValue:displayIDString];
         [displayRingID setHidden:NO];
     }
-    NSImageView* photoView = [result viewWithTag:IMAGE_TAG];
 
+    NSImageView* photoView = [result viewWithTag:IMAGE_TAG];
     auto& imageManip = reinterpret_cast<Interfaces::ImageManipulationDelegate&>(GlobalInstances::pixmapManipulator());
-    [photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(imageManip.conversationPhoto(conversation, model_->owner)))];
+    [photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(imageManip.conversationPhoto(conversation, convModel_->owner)))];
 
     NSView* presenceView = [result viewWithTag:PRESENCE_TAG];
-    if (model_->owner.contactModel->getContact(conversation.participants[0]).isPresent) {
+    auto contact = convModel_->owner.contactModel->getContact(conversation.participants[0]);
+    if (contact.isPresent) {
         [presenceView setHidden:NO];
     } else {
         [presenceView setHidden:YES];
     }
+    NSTextField* lastInteractionDate = [result viewWithTag:DATE_TAG];
+    NSTextField* interactionSnippet = [result viewWithTag:SNIPPET_TAG];
+    NSButton* addContactButton = [result viewWithTag:ADD_BUTTON_TAG];
+    NSButton* refuseContactButton = [result viewWithTag:REFUSE_BUTTON_TAG];
+    NSButton* blockContactButton = [result viewWithTag:BLOCK_BUTTON_TAG];
+    [addContactButton setHidden:YES];
+    [refuseContactButton setHidden:YES];
+    [blockContactButton setHidden:YES];
+
+    if (profileType(conversation, *convModel_) == lrc::api::profile::Type::PENDING) {
+        [lastInteractionDate setHidden:true];
+        [interactionSnippet setHidden:true];
+        [addContactButton setHidden:NO];
+        [refuseContactButton setHidden:NO];
+        [blockContactButton setHidden:NO];
+        [addContactButton setAction:@selector(acceptInvitation:)];
+        [addContactButton setTarget:self];
+        [refuseContactButton setAction:@selector(refuseInvitation:)];
+        [refuseContactButton setTarget:self];
+        [blockContactButton setAction:@selector(blockPendingContact:)];
+        [blockContactButton setTarget:self];
+        return result;
+    }
+
+    [lastInteractionDate setHidden:false];
+
+    [interactionSnippet setHidden:false];
+
+    auto lastUid = conversation.lastMessageUid;
+    if (conversation.interactions.find(lastUid) != conversation.interactions.end()) {
+        // last interaction snippet
+        std::string lastInteractionSnippet = conversation.interactions[lastUid].body;
+        std::stringstream ss(lastInteractionSnippet);
+        std::getline(ss, lastInteractionSnippet);
+        NSString* lastInteractionSnippetFixedString = [[NSString stringWithUTF8String:lastInteractionSnippet.c_str()]
+                                                       stringByReplacingOccurrencesOfString:@"🕽" withString:@""];
+        lastInteractionSnippetFixedString = [lastInteractionSnippetFixedString stringByReplacingOccurrencesOfString:@"📞" withString:@""];
+        if (conversation.interactions[lastUid].type == lrc::api::interaction::Type::OUTGOING_DATA_TRANSFER
+            || conversation.interactions[lastUid].type == lrc::api::interaction::Type::INCOMING_DATA_TRANSFER) {
+            if (([lastInteractionSnippetFixedString rangeOfString:@"/"].location != NSNotFound)) {
+                NSArray *listItems = [lastInteractionSnippetFixedString componentsSeparatedByString:@"/"];
+                NSString* name = listItems.lastObject;
+                lastInteractionSnippetFixedString = name;
+            }
+        }
+        [interactionSnippet setStringValue:lastInteractionSnippetFixedString];
+
+        // last interaction date/time
+        std::time_t lastInteractionTimestamp = conversation.interactions[lastUid].timestamp;
+        std::time_t now = std::time(nullptr);
+        char interactionDay[64];
+        char nowDay[64];
+        std::strftime(interactionDay, sizeof(interactionDay), "%D", std::localtime(&lastInteractionTimestamp));
+        std::strftime(nowDay, sizeof(nowDay), "%D", std::localtime(&now));
+        if (std::string(interactionDay) == std::string(nowDay)) {
+            char interactionTime[64];
+            std::strftime(interactionTime, sizeof(interactionTime), "%R", std::localtime(&lastInteractionTimestamp));
+            [lastInteractionDate setStringValue:[NSString stringWithUTF8String:interactionTime]];
+        } else {
+            [lastInteractionDate setStringValue:[NSString stringWithUTF8String:interactionDay]];
+        }
+    }
+
     return result;
 }
 
@@ -423,9 +522,8 @@
 
 - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
 {
-    if (tableView == smartView) {
-        if (model_ != nullptr)
-            return model_->allFilteredConversations().size();
+    if (tableView == smartView && convModel_ != nullptr) {
+        return convModel_->allFilteredConversations().size();
     }
 
     return 0;
@@ -442,16 +540,16 @@
 
     if (row == -1)
         return;
-    if (model_ == nil)
+    if (convModel_ == nil)
         return;
 
-    auto conv = model_->filteredConversation(row);
+    auto conv = convModel_->filteredConversation(row);
     auto& callId = conv.callId;
 
     if (callId.empty())
         return;
 
-    auto* callModel = model_->owner.callModel.get();
+    auto* callModel = convModel_->owner.callModel.get();
     callModel->hangUp(callId);
 }
 
@@ -468,14 +566,16 @@
 
 - (void) processSearchFieldInput
 {
-    if (model_ == nil)
-    return;
-    model_->setFilter(std::string([[searchField stringValue] UTF8String]));
+    if (convModel_ == nil) {
+        return;
+    }
+
+    convModel_->setFilter(std::string([[searchField stringValue] UTF8String]));
 }
 
 -(const lrc::api::account::Info&) chosenAccount
 {
-    return model_->owner;
+    return convModel_->owner;
 }
 
 - (void) clearSearchField
@@ -485,18 +585,18 @@
 }
 
 -(void)updateConversationForNewContact:(NSString *)uId {
-    if (model_ == nil) {
+    if (convModel_ == nil) {
         return;
     }
     [self clearSearchField];
     auto uid = std::string([uId UTF8String]);
-    auto it = getConversationFromUid(uid, *model_);
-    if (it != model_->allFilteredConversations().end()) {
+    auto it = getConversationFromUid(uid, *convModel_);
+    if (it != convModel_->allFilteredConversations().end()) {
         @try {
-            auto contact = model_->owner.contactModel->getContact(it->participants[0]);
+            auto contact = convModel_->owner.contactModel->getContact(it->participants[0]);
             if (!contact.profileInfo.uri.empty() && contact.profileInfo.uri.compare(selectedUid_) == 0) {
                 selectedUid_ = uid;
-                model_->selectConversation(uid);
+                convModel_->selectConversation(uid);
             }
         } @catch (NSException *exception) {
             return;
@@ -523,25 +623,25 @@
     if (commandSelector != @selector(insertNewline:) || [[searchField stringValue] isEqual:@""]) {
         return NO;
     }
-    if (model_ == nil) {
+    if (convModel_ == nil) {
         [self displayErrorModalWithTitle:NSLocalizedString(@"No account available", @"Displayed as RingID when no accounts are available for selection") WithMessage:NSLocalizedString(@"Navigate to preferences to create a new account", @"Allert message when no accounts are available")];
         return NO;
     }
-    if (model_->allFilteredConversations().size() <= 0) {
+    if (convModel_->allFilteredConversations().size() <= 0) {
         return YES;
     }
-    auto model = model_->filteredConversation(0);
+    auto model = convModel_->filteredConversation(0);
     auto uid = model.uid;
     if (selectedUid_ == uid) {
         return YES;
     }
     @try {
-        auto contact = model_->owner.contactModel->getContact(model.participants[0]);
+        auto contact = convModel_->owner.contactModel->getContact(model.participants[0]);
         if ((contact.profileInfo.uri.empty() && contact.profileInfo.type != lrc::api::profile::Type::SIP) || contact.profileInfo.type == lrc::api::profile::Type::INVALID) {
             return YES;
         }
         selectedUid_ = uid;
-        model_->selectConversation(uid);
+        convModel_->selectConversation(uid);
         [self.view.window makeFirstResponder: smartView];
         return YES;
     } @catch (NSException *exception) {
@@ -581,24 +681,24 @@
 {
     if ([smartView selectedRow] == -1)
         return;
-    if (model_ == nil)
+    if (convModel_ == nil)
         return ;
 
-    auto uid = model_->filteredConversation([smartView selectedRow]).uid;
-    model_->makePermanent(uid);
+    auto uid = convModel_->filteredConversation([smartView selectedRow]).uid;
+    convModel_->makePermanent(uid);
 }
 
 #pragma mark - ContextMenuDelegate
 
 - (NSMenu*) contextualMenuForRow:(int) index
 {
-    if (model_ == nil)
+    if (convModel_ == nil)
         return nil;
 
-    auto conversation = model_->filteredConversation(NSInteger(index));
+    auto conversation = convModel_->filteredConversation(NSInteger(index));
 
     @try {
-        auto contact = model_->owner.contactModel->getContact(conversation.participants[0]);
+        auto contact = convModel_->owner.contactModel->getContact(conversation.participants[0]);
         if (contact.profileInfo.type == lrc::api::profile::Type::INVALID) {
             return nil;
         }
@@ -671,7 +771,7 @@
     }
     NSString * convUId = (NSString*)menuObject;
     std::string conversationID = std::string([convUId UTF8String]);
-    model_->makePermanent(conversationID);
+    convModel_->makePermanent(conversationID);
 }
 
 - (void) blockContact: (NSMenuItem* ) item  {
@@ -681,8 +781,8 @@
     }
     NSString * convUId = (NSString*)menuObject;
     std::string conversationID = std::string([convUId UTF8String]);
-    model_->clearHistory(conversationID);
-    model_->removeConversation(conversationID, true);
+    //convModel_->clearHistory(conversationID);
+    convModel_->removeConversation(conversationID, true);
 }
 
 - (void) audioCall: (NSMenuItem* ) item  {
@@ -692,7 +792,7 @@
     }
     NSString * convUId = (NSString*)menuObject;
     std::string conversationID = std::string([convUId UTF8String]);
-    model_->placeAudioOnlyCall(conversationID);
+    convModel_->placeAudioOnlyCall(conversationID);
 
 }
 
@@ -703,7 +803,7 @@
     }
     NSString * convUId = (NSString*)menuObject;
     std::string conversationID = std::string([convUId UTF8String]);
-    model_->placeCall(conversationID);
+    convModel_->placeCall(conversationID);
 }
 
 - (void) clearConversation:(NSMenuItem* ) item  {
@@ -713,7 +813,57 @@
     }
     NSString * convUId = (NSString*)menuObject;
     std::string conversationID = std::string([convUId UTF8String]);
-    model_->clearHistory(conversationID);
+    convModel_->clearHistory(conversationID);
+}
+
+- (void)acceptInvitation:(id)sender {
+    NSInteger row = [smartView rowForView:sender];
+
+    if (row == -1)
+        return;
+    if (convModel_ == nil)
+        return;
+
+    auto conv = convModel_->filteredConversation(row);
+    auto& convID = conv.Info::uid;
+
+    if (convID.empty())
+        return;
+    convModel_->makePermanent(convID);
+}
+
+- (void)refuseInvitation:(id)sender {
+    NSInteger row = [smartView rowForView:sender];
+
+    if (row == -1)
+        return;
+    if (convModel_ == nil)
+        return;
+
+    auto conv = convModel_->filteredConversation(row);
+    auto& convID = conv.Info::uid;
+
+    if (convID.empty())
+        return;
+    convModel_->removeConversation(convID);
+}
+
+- (void)blockPendingContact:(id)sender {
+    NSInteger row = [smartView rowForView:sender];
+
+    if (row == -1)
+        return;
+    if (convModel_ == nil)
+        return;
+
+    auto conv = convModel_->filteredConversation(row);
+    auto& convID = conv.Info::uid;
+
+    if (convID.empty())
+        return;
+    convModel_->removeConversation(convID, true);
+    [self deselect];
+    [delegate listTypeChanged];
 }
 
 @end
diff --git a/src/delegates/ImageManipulationDelegate.mm b/src/delegates/ImageManipulationDelegate.mm
index f2014b6..9420c65 100644
--- a/src/delegates/ImageManipulationDelegate.mm
+++ b/src/delegates/ImageManipulationDelegate.mm
@@ -277,13 +277,23 @@
                 return pxm;
             } else {
                 char color = contact.profileInfo.uri.at(0);
+                contact.profileInfo.alias.erase(std::remove(contact.profileInfo.alias.begin(), contact.profileInfo.alias.end(), '\n'), contact.profileInfo.alias.end());
+                contact.profileInfo.alias.erase(std::remove(contact.profileInfo.alias.begin(), contact.profileInfo.alias.end(), ' '), contact.profileInfo.alias.end());
+                contact.profileInfo.alias.erase(std::remove(contact.profileInfo.alias.begin(), contact.profileInfo.alias.end(), '\r'), contact.profileInfo.alias.end());
 
                 if (!contact.profileInfo.alias.empty()) {
                     return drawDefaultUserPixmap(size, color, std::toupper(contact.profileInfo.alias.at(0)));
                 } else if((contact.profileInfo.type == lrc::api::profile::Type::RING ||
                            contact.profileInfo.type == lrc::api::profile::Type::PENDING) &&
                           !contact.registeredName.empty()) {
-                    return drawDefaultUserPixmap(size, color, std::toupper(contact.registeredName.at(0)));
+                    contact.registeredName.erase(std::remove(contact.registeredName.begin(), contact.registeredName.end(), '\n'), contact.registeredName.end());
+                    contact.registeredName.erase(std::remove(contact.registeredName.begin(), contact.registeredName.end(), ' '), contact.registeredName.end());
+                    contact.registeredName.erase(std::remove(contact.registeredName.begin(), contact.registeredName.end(), '\r'), contact.registeredName.end());
+                    if(!contact.registeredName.empty()) {
+                        return drawDefaultUserPixmap(size, color, std::toupper(contact.registeredName.at(0)));
+                    } else {
+                        return drawDefaultUserPixmapUriOnly(size, color);
+                    }
                 } else {
                     return drawDefaultUserPixmapUriOnly(size, color);
                 }
diff --git a/src/utils.h b/src/utils.h
index e6ba40f..1c971a6 100755
--- a/src/utils.h
+++ b/src/utils.h
@@ -18,6 +18,7 @@
  */
 
 #import <Foundation/Foundation.h>
+#import "NSString+Extensions.h"
 #import <api/conversation.h>
 #import <api/conversationmodel.h>
 #import <api/account.h>
@@ -28,19 +29,39 @@
 static inline NSString* bestIDForConversation(const lrc::api::conversation::Info& conv, const lrc::api::ConversationModel& model)
 {
     auto contact = model.owner.contactModel->getContact(conv.participants[0]);
-    if (!contact.registeredName.empty())
-        return @(contact.registeredName.c_str());
+    if (!contact.registeredName.empty()) {
+        contact.registeredName.erase(std::remove(contact.registeredName.begin(), contact.registeredName.end(), '\n'), contact.registeredName.end());
+        contact.registeredName.erase(std::remove(contact.registeredName.begin(), contact.registeredName.end(), '\r'), contact.registeredName.end());
+        return [@(contact.registeredName.c_str()) removeEmptyLinesAtBorders];
+    }
     else
-        return @(contact.profileInfo.uri.c_str());
+        return [@(contact.profileInfo.uri.c_str()) removeEmptyLinesAtBorders];
 }
 
 static inline NSString* bestNameForConversation(const lrc::api::conversation::Info& conv, const lrc::api::ConversationModel& model)
 {
     auto contact = model.owner.contactModel->getContact(conv.participants[0]);
-    if (!contact.profileInfo.alias.empty())
-        return @(contact.profileInfo.alias.c_str());
-    else
+    if (contact.profileInfo.alias.empty()) {
         return bestIDForConversation(conv, model);
+    }
+    auto alias = contact.profileInfo.alias;
+    alias.erase(std::remove(alias.begin(), alias.end(), '\n'), alias.end());
+    alias.erase(std::remove(alias.begin(), alias.end(), '\r'), alias.end());
+    if(alias.length() == 0) {
+        return bestIDForConversation(conv, model);
+    }
+    return @(alias.c_str());
+}
+
+static inline lrc::api::profile::Type profileType(const lrc::api::conversation::Info& conv, const lrc::api::ConversationModel& model)
+{
+    @try {
+        auto contact = model.owner.contactModel->getContact(conv.participants[0]);
+        return contact.profileInfo.type;
+    }
+    @catch (NSException *exception) {
+        lrc::api::profile::Type::INVALID;
+    }
 }
 
 /**
diff --git a/src/views/IconButton.h b/src/views/IconButton.h
index 66b5350..cd71176 100644
--- a/src/views/IconButton.h
+++ b/src/views/IconButton.h
@@ -52,7 +52,7 @@
 
 /*
  * Padding
- * default value : 5.0
+ * default value : 8.0
  */
 @property CGFloat imageInsets;
 
diff --git a/src/views/IconButton.mm b/src/views/IconButton.mm
index 96c3271..a211fc1 100644
--- a/src/views/IconButton.mm
+++ b/src/views/IconButton.mm
@@ -103,12 +103,9 @@
     //// Group
     {
         //// Oval Drawing
-        NSBezierPath* ovalPath = [NSBezierPath bezierPathWithRoundedRect:
-                                  NSMakeRect(NSMinX(group) + floor(NSWidth(group) * 0.00000 + 0.5),
-                                             NSMinY(group) + floor(NSHeight(group) * 0.00000 + 0.5),
-                                             floor(NSWidth(group) * 1.00000 + 0.5) - floor(NSWidth(group) * 0.00000 + 0.5),
-                                             floor(NSHeight(group) * 1.00000 + 0.5) - floor(NSHeight(group) * 0.00000 + 0.5))
-                                                                 xRadius:[self.cornerRadius floatValue] yRadius:[self.cornerRadius floatValue]];
+        NSBezierPath* ovalPath = [NSBezierPath bezierPathWithRoundedRect:dirtyRect
+                                                                 xRadius:[self.cornerRadius floatValue]
+                                                                 yRadius:[self.cornerRadius floatValue]];
 
         [backgroundColor setFill];
         [ovalPath fill];
diff --git a/src/views/RoundedTextField.h b/src/views/RoundedTextField.h
index dafbc35..4f9e4ee 100644
--- a/src/views/RoundedTextField.h
+++ b/src/views/RoundedTextField.h
@@ -33,6 +33,11 @@
 @property (nonatomic, strong) NSColor* borderColor;
 
 /*
+ * default value : [NSNumber numberWithDouble:1.0];
+ */
+@property (nonatomic, strong) NSNumber* borderThickness;
+
+/*
  * default value : (self.frame) / 2;
  */
 @property (nonatomic, strong) NSNumber* cornerRadius;
diff --git a/src/views/RoundedTextField.mm b/src/views/RoundedTextField.mm
index e557b6f..719d8f2 100644
--- a/src/views/RoundedTextField.mm
+++ b/src/views/RoundedTextField.mm
@@ -34,6 +34,10 @@
         self.borderColor = [self.bgColor darkenColorByValue:0.1];
     }
 
+    if(!self.borderThickness) {
+        self.borderThickness = [NSNumber numberWithDouble:1.0];
+    }
+
     self.backgroundColor = [NSColor controlColor];
 }
 
@@ -42,6 +46,7 @@
 
     NSColor* backgroundColor = self.bgColor;
     NSColor* borderColor = self.borderColor;
+    CGFloat borderThickness = [self.borderThickness floatValue];
 
     NSRect group = NSMakeRect(NSMinX(dirtyRect) + floor(NSWidth(dirtyRect) * 0.03333) + 0.5,
                               NSMinY(dirtyRect) + floor(NSHeight(dirtyRect) * 0.03333) + 0.5,
@@ -57,7 +62,7 @@
     [backgroundColor setFill];
     [ovalPath fill];
     [borderColor setStroke];
-    [ovalPath setLineWidth: 1.0];
+    [ovalPath setLineWidth: borderThickness];
     [ovalPath stroke];
     NSDictionary *att = nil;
 
diff --git a/ui/Base.lproj/Conversation.xib b/ui/Base.lproj/Conversation.xib
index 6cfcfe8..1fc0eab 100644
--- a/ui/Base.lproj/Conversation.xib
+++ b/ui/Base.lproj/Conversation.xib
@@ -329,11 +329,11 @@
                                                                 </constraints>
                                                             </box>
                                                             <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="35p-WS-DUv" userLabel="ContactInteractionLabel">
-                                                                <rect key="frame" x="330" y="11" width="37" height="17"/>
+                                                                <rect key="frame" x="347" y="11" width="4" height="17"/>
                                                                 <constraints>
                                                                     <constraint firstAttribute="height" constant="17" id="azh-RJ-oYw"/>
                                                                 </constraints>
-                                                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Label" id="jRF-Jm-tK5">
+                                                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="jRF-Jm-tK5">
                                                                     <font key="font" metaFont="systemLight" size="13"/>
                                                                     <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
                                                                     <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
@@ -379,13 +379,13 @@
                     </constraints>
                 </customView>
                 <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="Sn1-dJ-QCw">
-                    <rect key="frame" x="0.0" y="765" width="798" height="5"/>
+                    <rect key="frame" x="0.0" y="770" width="798" height="5"/>
                 </box>
                 <button toolTip="Record" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ooq-vs-Xt1" customClass="HoverButton">
-                    <rect key="frame" x="10" y="778" width="40" height="40"/>
+                    <rect key="frame" x="10" y="783" width="35" height="35"/>
                     <constraints>
-                        <constraint firstAttribute="height" constant="40" id="69o-49-0QB"/>
-                        <constraint firstAttribute="width" constant="40" id="ImE-zq-KIj"/>
+                        <constraint firstAttribute="height" constant="35" id="69o-49-0QB"/>
+                        <constraint firstAttribute="width" constant="35" id="ImE-zq-KIj"/>
                     </constraints>
                     <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ic_arrow_back" imagePosition="overlaps" alignment="center" transparent="YES" imageScaling="proportionallyDown" id="DP0-lw-oRl">
                         <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@@ -396,7 +396,10 @@
                             <color key="value" red="0.76470588235294112" green="0.76470588235294112" blue="0.76470588235294112" alpha="1" colorSpace="calibratedRGB"/>
                         </userDefinedRuntimeAttribute>
                         <userDefinedRuntimeAttribute type="color" keyPath="imageColor">
-                            <color key="value" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
+                            <color key="value" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="imageInsets">
+                            <integer key="value" value="4"/>
                         </userDefinedRuntimeAttribute>
                     </userDefinedRuntimeAttributes>
                     <connections>
@@ -407,7 +410,7 @@
                     <rect key="frame" x="49" y="0.0" width="700" height="60"/>
                     <subviews>
                         <textField verticalCompressionResistancePriority="1000" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bsk-Gj-qQ2">
-                            <rect key="frame" x="58" y="22" width="592" height="17"/>
+                            <rect key="frame" x="53" y="22" width="602" height="17"/>
                             <textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" placeholderString="Send a message" id="Ilz-7v-2fr">
                                 <font key="font" metaFont="system"/>
                                 <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
@@ -426,10 +429,10 @@
                             </connections>
                         </textField>
                         <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="UJf-cF-RAo" customClass="HoverButton">
-                            <rect key="frame" x="650" y="10" width="40" height="40"/>
+                            <rect key="frame" x="655" y="13" width="35" height="35"/>
                             <constraints>
-                                <constraint firstAttribute="width" constant="40" id="TmF-ip-m4C"/>
-                                <constraint firstAttribute="height" constant="40" id="rbQ-lE-sAq"/>
+                                <constraint firstAttribute="width" constant="35" id="TmF-ip-m4C"/>
+                                <constraint firstAttribute="height" constant="35" id="rbQ-lE-sAq"/>
                             </constraints>
                             <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ic_action_send" imagePosition="overlaps" alignment="center" enabled="NO" transparent="YES" imageScaling="proportionallyDown" inset="2" id="s6a-eK-t3T">
                                 <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@@ -445,6 +448,9 @@
                                 <userDefinedRuntimeAttribute type="color" keyPath="buttonDisableColor">
                                     <color key="value" red="0.78955939797794117" green="0.75686274509803919" blue="0.82745098039215681" alpha="1" colorSpace="calibratedRGB"/>
                                 </userDefinedRuntimeAttribute>
+                                <userDefinedRuntimeAttribute type="number" keyPath="imageInsets">
+                                    <integer key="value" value="4"/>
+                                </userDefinedRuntimeAttribute>
                             </userDefinedRuntimeAttributes>
                             <connections>
                                 <action selector="sendMessage:" target="-2" id="5Cf-jA-eJM"/>
@@ -452,10 +458,10 @@
                             </connections>
                         </button>
                         <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gwx-eT-PcN" customClass="HoverButton">
-                            <rect key="frame" x="10" y="10" width="40" height="40"/>
+                            <rect key="frame" x="10" y="13" width="35" height="35"/>
                             <constraints>
-                                <constraint firstAttribute="height" constant="40" id="C2W-wV-YvF"/>
-                                <constraint firstAttribute="width" constant="40" id="zZF-4P-pW9"/>
+                                <constraint firstAttribute="height" constant="35" id="C2W-wV-YvF"/>
+                                <constraint firstAttribute="width" constant="35" id="zZF-4P-pW9"/>
                             </constraints>
                             <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ic_file_upload" imagePosition="overlaps" alignment="center" enabled="NO" transparent="YES" imageScaling="proportionallyDown" inset="2" id="gfQ-c5-YPu">
                                 <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@@ -468,6 +474,9 @@
                                 <userDefinedRuntimeAttribute type="color" keyPath="hoverColor">
                                     <color key="value" red="0.23137254901960785" green="0.75686274509803919" blue="0.82745098039215681" alpha="0.23000000000000001" colorSpace="calibratedRGB"/>
                                 </userDefinedRuntimeAttribute>
+                                <userDefinedRuntimeAttribute type="number" keyPath="imageInsets">
+                                    <integer key="value" value="4"/>
+                                </userDefinedRuntimeAttribute>
                             </userDefinedRuntimeAttributes>
                             <connections>
                                 <action selector="sendFile:" target="-2" id="Lex-2X-KCU"/>
@@ -486,18 +495,18 @@
                     </constraints>
                 </customView>
                 <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ucx-6g-eJw">
-                    <rect key="frame" x="58" y="773" width="40" height="50"/>
-                    <textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" sendsActionOnEndEditing="YES" alignment="left" placeholderString="Title" id="HnC-1N-RmR">
+                    <rect key="frame" x="53" y="778" width="4" height="45"/>
+                    <textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" sendsActionOnEndEditing="YES" alignment="left" id="HnC-1N-RmR">
                         <font key="font" metaFont="system" size="18"/>
                         <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
                         <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
                     </textFieldCell>
                 </textField>
                 <button verticalHuggingPriority="750" tag="400" translatesAutoresizingMaskIntoConstraints="NO" id="cFH-d7-Erh" userLabel="Call Button" customClass="HoverButton">
-                    <rect key="frame" x="748" y="778" width="40" height="40"/>
+                    <rect key="frame" x="753" y="783" width="35" height="35"/>
                     <constraints>
-                        <constraint firstAttribute="width" constant="40" id="4jd-jn-RY1"/>
-                        <constraint firstAttribute="height" constant="40" id="DMa-Lq-2Tk"/>
+                        <constraint firstAttribute="width" constant="35" id="4jd-jn-RY1"/>
+                        <constraint firstAttribute="height" constant="35" id="DMa-Lq-2Tk"/>
                     </constraints>
                     <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ic_action_video" imagePosition="overlaps" alignment="center" allowsMixedState="YES" transparent="YES" imageScaling="proportionallyDown" inset="2" id="XOS-rh-WfH">
                         <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@@ -510,24 +519,27 @@
                         <userDefinedRuntimeAttribute type="color" keyPath="hoverColor">
                             <color key="value" red="0.23137254901960785" green="0.75686274509803919" blue="0.82745098039215681" alpha="0.23410744863013699" colorSpace="calibratedRGB"/>
                         </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="imageInsets">
+                            <integer key="value" value="4"/>
+                        </userDefinedRuntimeAttribute>
                     </userDefinedRuntimeAttributes>
                     <connections>
                         <action selector="placeCall:" target="-2" id="2h9-fM-gof"/>
                     </connections>
                 </button>
-                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="SQT-Vf-Lhr" userLabel="IdLabel">
-                    <rect key="frame" x="68" y="779" width="275" height="18"/>
-                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="ID" id="rW7-RD-TBM">
+                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SQT-Vf-Lhr" userLabel="IdLabel">
+                    <rect key="frame" x="53" y="783" width="4" height="16"/>
+                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="rW7-RD-TBM">
                         <font key="font" metaFont="systemLight" size="12"/>
                         <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
                         <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
                     </textFieldCell>
                 </textField>
                 <button verticalHuggingPriority="750" tag="400" translatesAutoresizingMaskIntoConstraints="NO" id="RuH-fO-poy" userLabel="Audio Call Button" customClass="HoverButton">
-                    <rect key="frame" x="698" y="778" width="40" height="40"/>
+                    <rect key="frame" x="708" y="783" width="35" height="35"/>
                     <constraints>
-                        <constraint firstAttribute="width" constant="40" id="HyC-Bf-F7P"/>
-                        <constraint firstAttribute="height" constant="40" id="opT-rp-VwQ"/>
+                        <constraint firstAttribute="width" constant="35" id="HyC-Bf-F7P"/>
+                        <constraint firstAttribute="height" constant="35" id="opT-rp-VwQ"/>
                     </constraints>
                     <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ic_action_call" imagePosition="overlaps" alignment="center" allowsMixedState="YES" transparent="YES" imageScaling="proportionallyDown" inset="2" id="f0E-8f-ly5">
                         <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@@ -540,16 +552,19 @@
                         <userDefinedRuntimeAttribute type="color" keyPath="hoverColor">
                             <color key="value" red="0.23137254900000001" green="0.75686274509999996" blue="0.82745098039999998" alpha="0.23410744859999999" colorSpace="calibratedRGB"/>
                         </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="imageInsets">
+                            <integer key="value" value="4"/>
+                        </userDefinedRuntimeAttribute>
                     </userDefinedRuntimeAttributes>
                     <connections>
                         <action selector="placeAudioCall:" target="-2" id="ycm-jI-2M5"/>
                     </connections>
                 </button>
                 <button verticalHuggingPriority="750" tag="400" translatesAutoresizingMaskIntoConstraints="NO" id="pGK-hO-X1Y" userLabel="Add Contact Button" customClass="HoverButton">
-                    <rect key="frame" x="648" y="778" width="40" height="40"/>
+                    <rect key="frame" x="663" y="783" width="35" height="35"/>
                     <constraints>
-                        <constraint firstAttribute="width" constant="40" id="Cxh-SD-Ozq"/>
-                        <constraint firstAttribute="height" constant="40" id="UUq-am-hL7"/>
+                        <constraint firstAttribute="width" constant="35" id="Cxh-SD-Ozq"/>
+                        <constraint firstAttribute="height" constant="35" id="UUq-am-hL7"/>
                     </constraints>
                     <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ic_person_add" imagePosition="overlaps" alignment="center" allowsMixedState="YES" transparent="YES" imageScaling="proportionallyDown" inset="2" id="1oc-i4-1bh">
                         <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@@ -562,6 +577,9 @@
                         <userDefinedRuntimeAttribute type="color" keyPath="hoverColor">
                             <color key="value" red="0.23137254900000001" green="0.75686274509999996" blue="0.82745098039999998" alpha="0.23410744859999999" colorSpace="calibratedRGB"/>
                         </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="imageInsets">
+                            <integer key="value" value="4"/>
+                        </userDefinedRuntimeAttribute>
                     </userDefinedRuntimeAttributes>
                     <connections>
                         <action selector="addContact:" target="-2" id="9DI-Pm-X0I"/>
@@ -580,7 +598,7 @@
                 <constraint firstItem="RuH-fO-poy" firstAttribute="centerY" secondItem="ooq-vs-Xt1" secondAttribute="centerY" id="MS8-kk-8g8"/>
                 <constraint firstItem="cFH-d7-Erh" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="10" id="Tok-wc-chb"/>
                 <constraint firstItem="EJD-f8-Xqd" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="60" id="XkO-FA-l3J"/>
-                <constraint firstItem="Sn1-dJ-QCw" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="60" id="aZT-2B-gv9"/>
+                <constraint firstItem="Sn1-dJ-QCw" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="55" id="aZT-2B-gv9"/>
                 <constraint firstItem="Rth-di-Tls" firstAttribute="trailing" secondItem="Ez2-Rf-DZN" secondAttribute="trailing" id="b6d-Ue-Zl5"/>
                 <constraint firstAttribute="trailing" secondItem="cFH-d7-Erh" secondAttribute="trailing" constant="10" id="bWY-wj-6dr"/>
                 <constraint firstItem="EJD-f8-Xqd" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="bvr-Gv-Sgb"/>
@@ -588,7 +606,6 @@
                 <constraint firstItem="SQT-Vf-Lhr" firstAttribute="bottom" secondItem="ooq-vs-Xt1" secondAttribute="bottom" id="e8m-qq-0SV"/>
                 <constraint firstItem="Rth-di-Tls" firstAttribute="top" secondItem="EJD-f8-Xqd" secondAttribute="bottom" id="f8h-bA-ZrZ"/>
                 <constraint firstItem="RuH-fO-poy" firstAttribute="leading" secondItem="pGK-hO-X1Y" secondAttribute="trailing" constant="10" id="fCS-uv-8E2"/>
-                <constraint firstItem="ooq-vs-Xt1" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="10" id="gkR-53-qs5"/>
                 <constraint firstAttribute="trailing" secondItem="EJD-f8-Xqd" secondAttribute="trailing" id="hSZ-8v-sis"/>
                 <constraint firstItem="Rth-di-Tls" firstAttribute="leading" secondItem="Ez2-Rf-DZN" secondAttribute="leading" id="jyz-o7-MMh"/>
                 <constraint firstAttribute="trailing" secondItem="Sn1-dJ-QCw" secondAttribute="trailing" id="m05-gh-crH"/>
diff --git a/ui/Base.lproj/RingWindow.strings b/ui/Base.lproj/RingWindow.strings
index 29bf54f..7ac52b2 100644
--- a/ui/Base.lproj/RingWindow.strings
+++ b/ui/Base.lproj/RingWindow.strings
@@ -65,5 +65,5 @@
 /* Class = "NSTextFieldCell"; placeholderString = "Display Role"; ObjectID = "uSw-g5-kte"; */
 "uSw-g5-kte.placeholderString" = "Display Role";
 
-/* Class = "NSSearchFieldCell"; placeholderString = "Name, ringID"; ObjectID = "vvE-nM-kSl"; */
-"vvE-nM-kSl.placeholderString" = "Name, ringID";
+/* Class = "NSSearchFieldCell"; placeholderString = "Search for new or existing contact"; ObjectID = "vvE-nM-kSl"; */
+"vvE-nM-kSl.placeholderString" = "Search for new or existing contact";
diff --git a/ui/Base.lproj/RingWindow.xib b/ui/Base.lproj/RingWindow.xib
index 1b3d56d..a3880aa 100644
--- a/ui/Base.lproj/RingWindow.xib
+++ b/ui/Base.lproj/RingWindow.xib
@@ -27,7 +27,7 @@
             <windowCollectionBehavior key="collectionBehavior" fullScreenPrimary="YES"/>
             <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
             <rect key="contentRect" x="196" y="240" width="1053" height="658"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1680" height="1027"/>
             <view key="contentView" autoresizesSubviews="NO" id="se5-gp-TjO">
                 <rect key="frame" x="0.0" y="0.0" width="1053" height="658"/>
                 <autoresizingMask key="autoresizingMask"/>
@@ -77,24 +77,24 @@
                                                                                 <rect key="frame" x="1" y="1" width="321" height="60"/>
                                                                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                                                                 <subviews>
-                                                                                    <textField horizontalHuggingPriority="750" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" tag="200" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="epa-Ih-aKF" userLabel="name">
-                                                                                        <rect key="frame" x="57" y="34" width="89" height="23"/>
-                                                                                        <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" placeholderString="Display Role" id="uSw-g5-kte">
+                                                                                    <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="1000" tag="200" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="epa-Ih-aKF" userLabel="name">
+                                                                                        <rect key="frame" x="70" y="34" width="4" height="23"/>
+                                                                                        <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" id="uSw-g5-kte">
                                                                                             <font key="font" size="16" name="HelveticaNeue-Light"/>
                                                                                             <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
                                                                                             <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
                                                                                         </textFieldCell>
                                                                                     </textField>
                                                                                     <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="sHH-wj-oHs">
-                                                                                        <rect key="frame" x="3" y="6" width="48" height="48"/>
+                                                                                        <rect key="frame" x="12" y="6" width="48" height="48"/>
                                                                                         <constraints>
                                                                                             <constraint firstAttribute="width" constant="48" id="C2Y-L7-ryb"/>
                                                                                             <constraint firstAttribute="height" constant="48" id="Q3H-Dy-81c"/>
                                                                                         </constraints>
                                                                                         <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSUser" id="bqQ-Jp-DPH"/>
                                                                                     </imageView>
-                                                                                    <textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" tag="500" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="14" translatesAutoresizingMaskIntoConstraints="NO" id="MYe-rn-qOP" userLabel="UnreadMsgCount" customClass="RoundedTextField">
-                                                                                        <rect key="frame" x="41" y="40" width="10" height="14"/>
+                                                                                    <textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" tag="300" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="14" translatesAutoresizingMaskIntoConstraints="NO" id="MYe-rn-qOP" userLabel="UnreadMsgCount" customClass="RoundedTextField">
+                                                                                        <rect key="frame" x="50" y="40" width="10" height="14"/>
                                                                                         <constraints>
                                                                                             <constraint firstAttribute="width" constant="10" id="NvA-xu-fEB"/>
                                                                                             <constraint firstAttribute="height" constant="14" id="UmR-aF-Y7V"/>
@@ -106,26 +106,26 @@
                                                                                         </textFieldCell>
                                                                                         <userDefinedRuntimeAttributes>
                                                                                             <userDefinedRuntimeAttribute type="color" keyPath="bgColor">
-                                                                                                <color key="value" red="0.83734809027777779" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                                                                                <color key="value" red="1" green="0.23137254901960785" blue="0.18823529411764706" alpha="1" colorSpace="calibratedRGB"/>
                                                                                             </userDefinedRuntimeAttribute>
                                                                                             <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
                                                                                                 <integer key="value" value="6"/>
                                                                                             </userDefinedRuntimeAttribute>
                                                                                         </userDefinedRuntimeAttributes>
                                                                                     </textField>
-                                                                                    <textField horizontalHuggingPriority="750" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" tag="700" translatesAutoresizingMaskIntoConstraints="NO" id="bZ6-1S-zx2" userLabel="ringId">
-                                                                                        <rect key="frame" x="57" y="11" width="37" height="20"/>
-                                                                                        <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" state="on" placeholderString="ringID" id="zp2-mv-NHW">
+                                                                                    <textField horizontalHuggingPriority="750" verticalHuggingPriority="750" tag="400" translatesAutoresizingMaskIntoConstraints="NO" id="bZ6-1S-zx2" userLabel="ringId">
+                                                                                        <rect key="frame" x="70" y="11" width="4" height="20"/>
+                                                                                        <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" state="on" id="zp2-mv-NHW">
                                                                                             <font key="font" size="13" name="HelveticaNeue-Light"/>
                                                                                             <color key="textColor" name="windowFrameColor" catalog="System" colorSpace="catalog"/>
                                                                                             <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
                                                                                         </textFieldCell>
                                                                                     </textField>
-                                                                                    <textField horizontalHuggingPriority="750" verticalHuggingPriority="750" tag="800" translatesAutoresizingMaskIntoConstraints="NO" id="YkV-D4-ddd" userLabel="PresenceIndicator" customClass="RoundedTextField">
-                                                                                        <rect key="frame" x="38" y="8" width="10" height="10"/>
+                                                                                    <textField horizontalHuggingPriority="750" verticalHuggingPriority="750" tag="500" translatesAutoresizingMaskIntoConstraints="NO" id="YkV-D4-ddd" userLabel="PresenceIndicator" customClass="RoundedTextField">
+                                                                                        <rect key="frame" x="47" y="6" width="14" height="14"/>
                                                                                         <constraints>
-                                                                                            <constraint firstAttribute="width" constant="6" id="IdR-WT-Pvg"/>
-                                                                                            <constraint firstAttribute="height" constant="10" id="dO4-wg-jEC"/>
+                                                                                            <constraint firstAttribute="width" constant="9.5" id="IdR-WT-Pvg"/>
+                                                                                            <constraint firstAttribute="height" constant="13.5" id="dO4-wg-jEC"/>
                                                                                         </constraints>
                                                                                         <textFieldCell key="cell" enabled="NO" sendsActionOnEndEditing="YES" alignment="center" id="1DZ-7a-3Qp">
                                                                                             <font key="font" metaFont="system"/>
@@ -134,62 +134,130 @@
                                                                                         </textFieldCell>
                                                                                         <userDefinedRuntimeAttributes>
                                                                                             <userDefinedRuntimeAttribute type="color" keyPath="bgColor">
-                                                                                                <color key="value" red="0.28526475694444442" green="0.63321940104166663" blue="0.16254340277777779" alpha="1" colorSpace="calibratedRGB"/>
+                                                                                                <color key="value" red="0.29803921568627451" green="0.85098039215686272" blue="0.39215686274509803" alpha="1" colorSpace="calibratedRGB"/>
                                                                                             </userDefinedRuntimeAttribute>
                                                                                             <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
                                                                                                 <color key="value" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
                                                                                             </userDefinedRuntimeAttribute>
+                                                                                            <userDefinedRuntimeAttribute type="number" keyPath="borderThickness">
+                                                                                                <real key="value" value="1.5"/>
+                                                                                            </userDefinedRuntimeAttribute>
                                                                                         </userDefinedRuntimeAttributes>
                                                                                     </textField>
-                                                                                    <textField hidden="YES" verticalHuggingPriority="750" tag="300" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="epi-ZP-as5" userLabel="date">
-                                                                                        <rect key="frame" x="274" y="36" width="44" height="20"/>
+                                                                                    <textField hidden="YES" verticalHuggingPriority="750" tag="800" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="epi-ZP-as5" userLabel="Last Interaction Date">
+                                                                                        <rect key="frame" x="273" y="36" width="44" height="20"/>
                                                                                         <constraints>
                                                                                             <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="40" id="asz-gD-lug"/>
                                                                                         </constraints>
-                                                                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" placeholderString="details" id="BfK-c5-B1l">
+                                                                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" id="BfK-c5-B1l">
                                                                                             <font key="font" size="13" name="HelveticaNeue-Light"/>
                                                                                             <color key="textColor" name="windowFrameColor" catalog="System" colorSpace="catalog"/>
                                                                                             <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
                                                                                         </textFieldCell>
                                                                                     </textField>
-                                                                                    <button hidden="YES" verticalHuggingPriority="750" tag="400" translatesAutoresizingMaskIntoConstraints="NO" id="DAd-lc-L62" userLabel="Call Button" customClass="IconButton">
-                                                                                        <rect key="frame" x="288" y="15" width="30" height="30"/>
+                                                                                    <textField hidden="YES" horizontalHuggingPriority="999" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" tag="900" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mic-52-RIa" userLabel="Last Interaction Snippet">
+                                                                                        <rect key="frame" x="173" y="11" width="144" height="20"/>
                                                                                         <constraints>
-                                                                                            <constraint firstAttribute="height" constant="30" id="0mP-Ez-X7O"/>
-                                                                                            <constraint firstAttribute="width" constant="30" id="kYf-6V-X04"/>
+                                                                                            <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="140" id="W0d-p1-O4L"/>
                                                                                         </constraints>
-                                                                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ic_action_video" imagePosition="overlaps" alignment="center" allowsMixedState="YES" transparent="YES" imageScaling="proportionallyDown" inset="2" id="CcV-tT-jWI">
+                                                                                        <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="right" id="VBS-Iu-q1M">
+                                                                                            <font key="font" size="13" name="HelveticaNeue-Light"/>
+                                                                                            <color key="textColor" red="0.50196078431372548" green="0.50196078431372548" blue="0.50196078431372548" alpha="1" colorSpace="calibratedRGB"/>
+                                                                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                                                                        </textFieldCell>
+                                                                                    </textField>
+                                                                                    <button toolTip="Accept Invitation" verticalHuggingPriority="750" tag="1000" translatesAutoresizingMaskIntoConstraints="NO" id="Fc5-KS-cim" userLabel="Add Contact Button" customClass="HoverButton">
+                                                                                        <rect key="frame" x="209" y="6" width="30" height="30"/>
+                                                                                        <constraints>
+                                                                                            <constraint firstAttribute="width" constant="30" id="FjC-O1-DDc"/>
+                                                                                            <constraint firstAttribute="height" constant="30" id="zM2-c1-5Es"/>
+                                                                                        </constraints>
+                                                                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ic_person_add" imagePosition="overlaps" alignment="center" allowsMixedState="YES" transparent="YES" imageScaling="proportionallyDown" inset="2" id="tQv-pI-ot0">
                                                                                             <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                                                                                             <font key="font" metaFont="system"/>
                                                                                         </buttonCell>
                                                                                         <userDefinedRuntimeAttributes>
+                                                                                            <userDefinedRuntimeAttribute type="color" keyPath="imageColor">
+                                                                                                <color key="value" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                                                                                            </userDefinedRuntimeAttribute>
+                                                                                            <userDefinedRuntimeAttribute type="color" keyPath="hoverColor">
+                                                                                                <color key="value" red="0.80000000000000004" green="0.80000000000000004" blue="0.80000000000000004" alpha="1" colorSpace="calibratedRGB"/>
+                                                                                            </userDefinedRuntimeAttribute>
                                                                                             <userDefinedRuntimeAttribute type="number" keyPath="imageInsets">
-                                                                                                <integer key="value" value="6"/>
+                                                                                                <integer key="value" value="4"/>
                                                                                             </userDefinedRuntimeAttribute>
                                                                                         </userDefinedRuntimeAttributes>
-                                                                                        <connections>
-                                                                                            <action selector="callClickedAtRow:" target="-1" id="zew-Rw-kFH"/>
-                                                                                        </connections>
+                                                                                    </button>
+                                                                                    <button toolTip="Ignore invitation" verticalHuggingPriority="750" tag="1100" translatesAutoresizingMaskIntoConstraints="NO" id="ejM-H2-aJX" userLabel="Refuse Invitation Button" customClass="HoverButton">
+                                                                                        <rect key="frame" x="244" y="6" width="30" height="30"/>
+                                                                                        <constraints>
+                                                                                            <constraint firstAttribute="height" constant="30" id="MjJ-10-Auf"/>
+                                                                                            <constraint firstAttribute="width" constant="30" id="iaV-AH-wjl"/>
+                                                                                        </constraints>
+                                                                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ic_action_cancel" imagePosition="overlaps" alignment="center" allowsMixedState="YES" transparent="YES" imageScaling="proportionallyDown" inset="2" id="8ej-tV-bU4">
+                                                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                                                            <font key="font" metaFont="system"/>
+                                                                                        </buttonCell>
+                                                                                        <userDefinedRuntimeAttributes>
+                                                                                            <userDefinedRuntimeAttribute type="color" keyPath="imageColor">
+                                                                                                <color key="value" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                                                                                            </userDefinedRuntimeAttribute>
+                                                                                            <userDefinedRuntimeAttribute type="color" keyPath="hoverColor">
+                                                                                                <color key="value" red="0.80000000000000004" green="0.80000000000000004" blue="0.80000000000000004" alpha="1" colorSpace="calibratedRGB"/>
+                                                                                            </userDefinedRuntimeAttribute>
+                                                                                            <userDefinedRuntimeAttribute type="number" keyPath="imageInsets">
+                                                                                                <integer key="value" value="4"/>
+                                                                                            </userDefinedRuntimeAttribute>
+                                                                                        </userDefinedRuntimeAttributes>
+                                                                                    </button>
+                                                                                    <button toolTip="Block contact" verticalHuggingPriority="750" tag="1200" translatesAutoresizingMaskIntoConstraints="NO" id="xP1-ZW-WZ8" userLabel="Block Contact Button" customClass="HoverButton">
+                                                                                        <rect key="frame" x="279" y="6" width="30" height="30"/>
+                                                                                        <constraints>
+                                                                                            <constraint firstAttribute="height" constant="30" id="gac-rJ-t64"/>
+                                                                                            <constraint firstAttribute="width" constant="30" id="gpN-gl-xBY"/>
+                                                                                        </constraints>
+                                                                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ic_action_block" imagePosition="overlaps" alignment="center" allowsMixedState="YES" transparent="YES" imageScaling="proportionallyDown" inset="2" id="qze-fl-ch1">
+                                                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                                                            <font key="font" metaFont="system"/>
+                                                                                        </buttonCell>
+                                                                                        <userDefinedRuntimeAttributes>
+                                                                                            <userDefinedRuntimeAttribute type="color" keyPath="imageColor">
+                                                                                                <color key="value" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                                                                                            </userDefinedRuntimeAttribute>
+                                                                                            <userDefinedRuntimeAttribute type="color" keyPath="hoverColor">
+                                                                                                <color key="value" red="0.80000000000000004" green="0.80000000000000004" blue="0.80000000000000004" alpha="1" colorSpace="calibratedRGB"/>
+                                                                                            </userDefinedRuntimeAttribute>
+                                                                                            <userDefinedRuntimeAttribute type="number" keyPath="imageInsets">
+                                                                                                <integer key="value" value="4"/>
+                                                                                            </userDefinedRuntimeAttribute>
+                                                                                        </userDefinedRuntimeAttributes>
                                                                                     </button>
                                                                                 </subviews>
                                                                                 <constraints>
-                                                                                    <constraint firstItem="epi-ZP-as5" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="epa-Ih-aKF" secondAttribute="trailing" constant="10" id="1nA-Ix-UwX"/>
                                                                                     <constraint firstItem="epa-Ih-aKF" firstAttribute="top" secondItem="Z6G-mQ-L3J" secondAttribute="top" constant="3" id="34y-lV-vl2"/>
-                                                                                    <constraint firstItem="sHH-wj-oHs" firstAttribute="leading" secondItem="Z6G-mQ-L3J" secondAttribute="leading" constant="3" id="CGt-hN-ulS"/>
+                                                                                    <constraint firstItem="sHH-wj-oHs" firstAttribute="leading" secondItem="Z6G-mQ-L3J" secondAttribute="leading" constant="12" id="CGt-hN-ulS"/>
+                                                                                    <constraint firstItem="ejM-H2-aJX" firstAttribute="leading" secondItem="Fc5-KS-cim" secondAttribute="trailing" constant="5" id="CqZ-iW-bob"/>
                                                                                     <constraint firstItem="bZ6-1S-zx2" firstAttribute="leading" secondItem="epa-Ih-aKF" secondAttribute="leading" id="Ffs-rJ-b8V"/>
-                                                                                    <constraint firstItem="YkV-D4-ddd" firstAttribute="trailing" secondItem="sHH-wj-oHs" secondAttribute="trailing" constant="-5" id="HSa-sm-3vp"/>
+                                                                                    <constraint firstItem="YkV-D4-ddd" firstAttribute="trailing" secondItem="sHH-wj-oHs" secondAttribute="trailing" constant="-0.5" id="HSa-sm-3vp"/>
+                                                                                    <constraint firstAttribute="bottom" secondItem="xP1-ZW-WZ8" secondAttribute="bottom" constant="6" id="Jy0-tu-Huy"/>
                                                                                     <constraint firstItem="sHH-wj-oHs" firstAttribute="top" secondItem="Z6G-mQ-L3J" secondAttribute="top" constant="6" id="KMX-Ru-AEa"/>
                                                                                     <constraint firstItem="MYe-rn-qOP" firstAttribute="top" secondItem="sHH-wj-oHs" secondAttribute="top" id="Kub-qp-hhR"/>
                                                                                     <constraint firstItem="epi-ZP-as5" firstAttribute="centerY" secondItem="epa-Ih-aKF" secondAttribute="centerY" id="L49-TZ-Pju"/>
                                                                                     <constraint firstItem="MYe-rn-qOP" firstAttribute="trailing" secondItem="sHH-wj-oHs" secondAttribute="trailing" id="Mv6-W1-pJW"/>
-                                                                                    <constraint firstItem="epi-ZP-as5" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="bZ6-1S-zx2" secondAttribute="trailing" constant="10" id="N03-9f-gVt"/>
                                                                                     <constraint firstItem="bZ6-1S-zx2" firstAttribute="top" secondItem="epa-Ih-aKF" secondAttribute="bottom" constant="3" id="NnZ-fX-wbG"/>
+                                                                                    <constraint firstItem="ejM-H2-aJX" firstAttribute="centerY" secondItem="Fc5-KS-cim" secondAttribute="centerY" id="QvI-kL-sx8"/>
                                                                                     <constraint firstAttribute="bottom" secondItem="sHH-wj-oHs" secondAttribute="bottom" constant="6" id="SJ6-9t-r0l"/>
-                                                                                    <constraint firstItem="YkV-D4-ddd" firstAttribute="bottom" secondItem="sHH-wj-oHs" secondAttribute="bottom" constant="-2" id="TGB-Iw-hdK"/>
-                                                                                    <constraint firstAttribute="trailing" secondItem="epi-ZP-as5" secondAttribute="trailing" constant="5" id="XEf-2m-loK"/>
-                                                                                    <constraint firstAttribute="trailing" secondItem="DAd-lc-L62" secondAttribute="trailing" constant="3" id="jOb-x2-6OF"/>
-                                                                                    <constraint firstItem="epa-Ih-aKF" firstAttribute="leading" secondItem="sHH-wj-oHs" secondAttribute="trailing" constant="8" symbolic="YES" id="sdS-XG-xRu"/>
-                                                                                    <constraint firstItem="DAd-lc-L62" firstAttribute="centerY" secondItem="Z6G-mQ-L3J" secondAttribute="centerY" id="zYF-8x-jeD"/>
+                                                                                    <constraint firstItem="YkV-D4-ddd" firstAttribute="bottom" secondItem="sHH-wj-oHs" secondAttribute="bottom" id="TGB-Iw-hdK"/>
+                                                                                    <constraint firstAttribute="trailing" secondItem="epi-ZP-as5" secondAttribute="trailing" constant="6" id="XEf-2m-loK"/>
+                                                                                    <constraint firstItem="xP1-ZW-WZ8" firstAttribute="leading" secondItem="ejM-H2-aJX" secondAttribute="trailing" constant="5" id="d5E-z8-brF"/>
+                                                                                    <constraint firstAttribute="trailing" secondItem="xP1-ZW-WZ8" secondAttribute="trailing" constant="12" id="jjq-30-NU1"/>
+                                                                                    <constraint firstItem="mic-52-RIa" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="bZ6-1S-zx2" secondAttribute="trailing" constant="10" id="kHp-c8-vEc"/>
+                                                                                    <constraint firstAttribute="trailing" secondItem="mic-52-RIa" secondAttribute="trailing" constant="6" id="l5e-5o-lAk"/>
+                                                                                    <constraint firstItem="Fc5-KS-cim" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="bZ6-1S-zx2" secondAttribute="trailing" constant="10" id="n2W-6I-lDK"/>
+                                                                                    <constraint firstItem="Fc5-KS-cim" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="epa-Ih-aKF" secondAttribute="trailing" constant="10" id="nGf-8l-f5h"/>
+                                                                                    <constraint firstItem="xP1-ZW-WZ8" firstAttribute="centerY" secondItem="Fc5-KS-cim" secondAttribute="centerY" id="pPs-eg-ffp"/>
+                                                                                    <constraint firstItem="mic-52-RIa" firstAttribute="centerY" secondItem="bZ6-1S-zx2" secondAttribute="centerY" id="qaE-JA-5OM"/>
+                                                                                    <constraint firstItem="epa-Ih-aKF" firstAttribute="leading" secondItem="sHH-wj-oHs" secondAttribute="trailing" constant="12" id="sdS-XG-xRu"/>
                                                                                 </constraints>
                                                                                 <connections>
                                                                                     <outlet property="textField" destination="epa-Ih-aKF" id="ISN-G3-Hxj"/>
@@ -199,28 +267,6 @@
                                                                                 <rect key="frame" x="1" y="63" width="321" height="50"/>
                                                                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                                                                 <subviews>
-                                                                                    <button verticalHuggingPriority="750" tag="600" translatesAutoresizingMaskIntoConstraints="NO" id="goj-2q-MrC" customClass="IconButton">
-                                                                                        <rect key="frame" x="288" y="10" width="30" height="30"/>
-                                                                                        <constraints>
-                                                                                            <constraint firstAttribute="width" constant="30" id="1BZ-Kd-bEV"/>
-                                                                                            <constraint firstAttribute="height" constant="30" id="kff-nD-Fcp"/>
-                                                                                        </constraints>
-                                                                                        <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ic_action_cancel" imagePosition="overlaps" alignment="center" transparent="YES" imageScaling="proportionallyDown" inset="2" id="s5P-Zv-nbT">
-                                                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                                                                            <font key="font" metaFont="system"/>
-                                                                                        </buttonCell>
-                                                                                        <userDefinedRuntimeAttributes>
-                                                                                            <userDefinedRuntimeAttribute type="number" keyPath="imageInsets">
-                                                                                                <integer key="value" value="6"/>
-                                                                                            </userDefinedRuntimeAttribute>
-                                                                                            <userDefinedRuntimeAttribute type="color" keyPath="bgColor">
-                                                                                                <color key="value" red="0.94509803920000002" green="0.16078431369999999" blue="0.0" alpha="0.83999999999999997" colorSpace="calibratedRGB"/>
-                                                                                            </userDefinedRuntimeAttribute>
-                                                                                        </userDefinedRuntimeAttributes>
-                                                                                        <connections>
-                                                                                            <action selector="hangUpClickedAtRow:" target="-1" id="mlM-gd-4bQ"/>
-                                                                                        </connections>
-                                                                                    </button>
                                                                                     <textField horizontalHuggingPriority="750" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" tag="200" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="sfz-V3-QhK">
                                                                                         <rect key="frame" x="6" y="24" width="73" height="23"/>
                                                                                         <constraints>
@@ -243,13 +289,9 @@
                                                                                 </subviews>
                                                                                 <constraints>
                                                                                     <constraint firstItem="Sm2-al-NU0" firstAttribute="top" secondItem="sfz-V3-QhK" secondAttribute="bottom" constant="1" id="4ta-Gr-B5A"/>
-                                                                                    <constraint firstItem="goj-2q-MrC" firstAttribute="centerY" secondItem="nvG-hU-lKg" secondAttribute="centerY" id="Kym-eH-bYz"/>
                                                                                     <constraint firstItem="sfz-V3-QhK" firstAttribute="top" secondItem="nvG-hU-lKg" secondAttribute="top" constant="3" id="M4L-Af-Pfa"/>
                                                                                     <constraint firstItem="sfz-V3-QhK" firstAttribute="leading" secondItem="nvG-hU-lKg" secondAttribute="leading" constant="8" id="O23-cp-x3m"/>
-                                                                                    <constraint firstItem="goj-2q-MrC" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Sm2-al-NU0" secondAttribute="trailing" constant="10" id="Sqh-4i-tSZ"/>
                                                                                     <constraint firstItem="Sm2-al-NU0" firstAttribute="leading" secondItem="nvG-hU-lKg" secondAttribute="leading" constant="8" id="WJh-9X-RGV"/>
-                                                                                    <constraint firstAttribute="trailing" secondItem="goj-2q-MrC" secondAttribute="trailing" constant="3" id="hjs-hz-0hg"/>
-                                                                                    <constraint firstItem="goj-2q-MrC" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="sfz-V3-QhK" secondAttribute="trailing" constant="10" id="zKq-Ux-HAE"/>
                                                                                 </constraints>
                                                                                 <connections>
                                                                                     <outlet property="textField" destination="sfz-V3-QhK" id="0Ka-vn-gAW"/>
@@ -291,13 +333,13 @@
                             <segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3Nq-Rz-Etg">
                                 <rect key="frame" x="19" y="593" width="286" height="20"/>
                                 <constraints>
-                                    <constraint firstAttribute="height" constant="18" id="OFJ-Ud-WD3"/>
+                                    <constraint firstAttribute="height" constant="18" id="6LE-6n-vaC"/>
                                 </constraints>
                                 <segmentedCell key="cell" borderStyle="border" alignment="left" style="roundRect" trackingMode="selectOne" id="6T7-ip-Pun">
                                     <font key="font" metaFont="cellTitle"/>
                                     <segments>
-                                        <segment label="Conversations" selected="YES"/>
-                                        <segment label="Requests" tag="1"/>
+                                        <segment label="Conversations" width="140" selected="YES"/>
+                                        <segment label="Requests" width="140" tag="1"/>
                                     </segments>
                                 </segmentedCell>
                                 <connections>
@@ -306,7 +348,7 @@
                             </segmentedControl>
                             <searchField wantsLayer="YES" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PoQ-x4-ES3">
                                 <rect key="frame" x="20" y="620" width="284" height="22"/>
-                                <searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" placeholderString="Name, ringID" usesSingleLineMode="YES" bezelStyle="round" id="vvE-nM-kSl">
+                                <searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" placeholderString="Search for new or existing contact" usesSingleLineMode="YES" bezelStyle="round" id="vvE-nM-kSl">
                                     <font key="font" metaFont="system"/>
                                     <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
                                     <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@@ -315,20 +357,64 @@
                                     <outlet property="delegate" destination="jrf-42-1l2" id="UtW-SL-Loa"/>
                                 </connections>
                             </searchField>
+                            <textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" tag="600" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="14" translatesAutoresizingMaskIntoConstraints="NO" id="VsX-mX-hf3" userLabel="Total Unread Message Count" customClass="RoundedTextField">
+                                <rect key="frame" x="135" y="602" width="10" height="14"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="14" id="5Jq-bx-b4E"/>
+                                    <constraint firstAttribute="width" constant="10" id="9Qo-ai-YOX"/>
+                                </constraints>
+                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" drawsBackground="YES" id="0nG-cC-02J">
+                                    <font key="font" metaFont="system" size="7"/>
+                                    <color key="textColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" red="0.98431372549999996" green="0.28627450980000002" blue="0.28235294119999998" alpha="0.90000000000000002" colorSpace="calibratedRGB"/>
+                                </textFieldCell>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="color" keyPath="bgColor">
+                                        <color key="value" red="1" green="0.23137254901960785" blue="0.18823529411764706" alpha="1" colorSpace="calibratedRGB"/>
+                                    </userDefinedRuntimeAttribute>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <integer key="value" value="6"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </textField>
+                            <textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" tag="700" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="14" translatesAutoresizingMaskIntoConstraints="NO" id="tBR-mv-w66" userLabel="Unhandled Invite Count" customClass="RoundedTextField">
+                                <rect key="frame" x="277" y="602" width="10" height="14"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="10" id="7JN-4z-cSI"/>
+                                    <constraint firstAttribute="height" constant="14" id="jHX-tM-8MD"/>
+                                </constraints>
+                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" drawsBackground="YES" id="8PT-wu-Uso">
+                                    <font key="font" metaFont="system" size="7"/>
+                                    <color key="textColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" red="0.98431372549999996" green="0.28627450980000002" blue="0.28235294119999998" alpha="0.90000000000000002" colorSpace="calibratedRGB"/>
+                                </textFieldCell>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="color" keyPath="bgColor">
+                                        <color key="value" red="1" green="0.23137254901960785" blue="0.18823529411764706" alpha="1" colorSpace="calibratedRGB"/>
+                                    </userDefinedRuntimeAttribute>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <integer key="value" value="6"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </textField>
                         </subviews>
                         <constraints>
                             <constraint firstAttribute="trailing" secondItem="PoQ-x4-ES3" secondAttribute="trailing" constant="20" id="4sB-9A-dhz"/>
+                            <constraint firstItem="3Nq-Rz-Etg" firstAttribute="top" secondItem="PoQ-x4-ES3" secondAttribute="bottom" constant="8" id="9Xh-o4-Yqb"/>
                             <constraint firstItem="PoQ-x4-ES3" firstAttribute="leading" secondItem="YgH-CN-tkB" secondAttribute="leading" constant="20" id="9e0-oX-skE"/>
                             <constraint firstItem="xXW-iq-GcP" firstAttribute="top" secondItem="PoQ-x4-ES3" secondAttribute="bottom" priority="900" constant="8" id="ESF-pw-bYW"/>
-                            <constraint firstItem="3Nq-Rz-Etg" firstAttribute="leading" secondItem="YgH-CN-tkB" secondAttribute="leading" constant="20" id="ETk-YV-FSi"/>
+                            <constraint firstItem="VsX-mX-hf3" firstAttribute="leading" secondItem="3Nq-Rz-Etg" secondAttribute="leading" constant="115" id="Htk-Dx-tQI"/>
                             <constraint firstAttribute="bottom" secondItem="xXW-iq-GcP" secondAttribute="bottom" id="MYN-Zf-Bvk"/>
                             <constraint firstAttribute="trailing" secondItem="xXW-iq-GcP" secondAttribute="trailing" id="TXC-lN-yL8"/>
                             <constraint firstAttribute="width" constant="324" id="Yjy-go-Dgc"/>
                             <constraint firstItem="xXW-iq-GcP" firstAttribute="leading" secondItem="YgH-CN-tkB" secondAttribute="leading" id="aSr-vt-QvR"/>
-                            <constraint firstItem="xXW-iq-GcP" firstAttribute="top" secondItem="3Nq-Rz-Etg" secondAttribute="bottom" constant="8" id="fH7-tg-ezt"/>
+                            <constraint firstItem="tBR-mv-w66" firstAttribute="top" secondItem="3Nq-Rz-Etg" secondAttribute="top" constant="-4" id="bVy-Ou-iav"/>
+                            <constraint firstItem="VsX-mX-hf3" firstAttribute="top" secondItem="3Nq-Rz-Etg" secondAttribute="top" constant="-4" id="eHb-1t-b48"/>
+                            <constraint firstItem="tBR-mv-w66" firstAttribute="leading" secondItem="3Nq-Rz-Etg" secondAttribute="leading" constant="257" id="goI-fi-SN2"/>
+                            <constraint firstItem="xXW-iq-GcP" firstAttribute="top" secondItem="3Nq-Rz-Etg" secondAttribute="bottom" constant="8" id="ka6-To-x0Z"/>
+                            <constraint firstItem="3Nq-Rz-Etg" firstAttribute="leading" secondItem="YgH-CN-tkB" secondAttribute="leading" constant="20" id="oMZ-7J-lNx"/>
                             <constraint firstItem="PoQ-x4-ES3" firstAttribute="top" secondItem="YgH-CN-tkB" secondAttribute="top" constant="16" id="pNA-2g-7AA"/>
-                            <constraint firstAttribute="trailing" secondItem="3Nq-Rz-Etg" secondAttribute="trailing" constant="20" id="tNc-l9-Pmf"/>
-                            <constraint firstItem="3Nq-Rz-Etg" firstAttribute="top" secondItem="PoQ-x4-ES3" secondAttribute="bottom" constant="8" id="zhW-fF-b3T"/>
+                            <constraint firstAttribute="trailing" secondItem="3Nq-Rz-Etg" secondAttribute="trailing" constant="20" id="wzE-rl-hbe"/>
                         </constraints>
                     </customView>
                     <customView translatesAutoresizingMaskIntoConstraints="NO" id="Fzg-MB-mlx" userLabel="HomeView">
@@ -512,6 +598,7 @@
             <connections>
                 <outlet property="delegate" destination="-2" id="SN7-eQ-w8z"/>
                 <outlet property="listTypeSelector" destination="3Nq-Rz-Etg" id="hvc-OL-Hc5"/>
+                <outlet property="listTypeSelectorHeight" destination="6LE-6n-vaC" id="p0M-Hd-Kdg"/>
                 <outlet property="searchField" destination="PoQ-x4-ES3" id="pOb-2e-PPS"/>
                 <outlet property="smartView" destination="tcL-dy-Q3h" id="Zc4-OM-Xk7"/>
                 <outlet property="tabbar" destination="xXW-iq-GcP" id="Mnz-CR-TqJ"/>
@@ -527,8 +614,9 @@
     <resources>
         <image name="NSShareTemplate" width="11" height="16"/>
         <image name="NSUser" width="32" height="32"/>
+        <image name="ic_action_block" width="72" height="72"/>
         <image name="ic_action_cancel" width="72" height="72"/>
-        <image name="ic_action_video" width="72" height="72"/>
+        <image name="ic_person_add" width="48" height="48"/>
         <image name="qrcode" width="72" height="72"/>
         <image name="symbol_blue" width="161.6842041015625" height="161.6842041015625"/>
         <image name="symbol_name" width="573" height="191"/>