diff --git a/ContactsViewModel.cpp b/ContactsViewModel.cpp
index 35c5eef805decf98f05e17e18101a41e439a773d..3740038c5ecdf0075dd0d0afc50d5b4ee81de230 100644
--- a/ContactsViewModel.cpp
+++ b/ContactsViewModel.cpp
@@ -85,7 +85,7 @@ ContactsViewModel::addNewContact(String^ name, String^ ringId)
 {
     auto trimmedName = Utils::Trim(name);
     if (contactsList_ && !findContactByName(trimmedName)) {
-        Contact^ contact = ref new Contact(trimmedName, trimmedName, nullptr, 0);
+        Contact^ contact = ref new Contact(trimmedName, ringId, nullptr, 0);
         contactsList_->Append(contact);
         saveContactsToFile();
         contactAdded(contact);
diff --git a/RingD.cpp b/RingD.cpp
index df40a4df397d69a2b270628c7706e2dfb99ed3d8..d27e00330649f1e75e6fd407fb7f9a8e631de7c8 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -675,16 +675,16 @@ RingD::registerCallbacks()
                 switch (status)
                 {
                 case 0: // everything went fine. Name/address pair was found.
-                    registeredNameFound(LookupStatus::SUCCESS);
+                    registeredNameFound(LookupStatus::SUCCESS, address, name);
                     break;
                 case 1: // provided name is not valid.
-                    registeredNameFound(LookupStatus::INVALID_NAME);
+                    registeredNameFound(LookupStatus::INVALID_NAME, address, name);
                     break;
                 case 2: // everything went fine. Name/address pair was not found.
-                    registeredNameFound(LookupStatus::NOT_FOUND);
+                    registeredNameFound(LookupStatus::NOT_FOUND, address, name);
                     break;
                 case 3: // An error happened
-                    registeredNameFound(LookupStatus::ERRORR);
+                    registeredNameFound(LookupStatus::ERRORR, address, name);
                     break;
                 }
             }));
diff --git a/RingD.h b/RingD.h
index f89f2561402a610e95bc73593cdd23a817dee124..1f648b4cccec2e1b9ac14cdaa003568049514b47 100644
--- a/RingD.h
+++ b/RingD.h
@@ -38,7 +38,7 @@ delegate void ExportOnRingEnded(String^ accountId, String^ pin);
 delegate void SummonWizard();
 delegate void AccountUpdated(Account^ account);
 delegate void IncomingVideoMuted(String^ callId, bool state);
-delegate void RegisteredNameFound(LookupStatus status);
+delegate void RegisteredNameFound(LookupStatus status, const std::string& address, const std::string& name);
 delegate void FinishCaptureDeviceEnumeration();
 
 using SharedCallback = std::shared_ptr<DRing::CallbackWrapperBase>;
diff --git a/SmartPanel.xaml b/SmartPanel.xaml
index c0095cbc04072d02e6e3050899b41abeafd80629..21387c0821fd00078f052614fd5ebdacf654f27c 100644
--- a/SmartPanel.xaml
+++ b/SmartPanel.xaml
@@ -223,7 +223,8 @@
         <!-- template for smartpanelitems. -->
         <DataTemplate x:Key="SmartPanelItemsTemplate"
                       x:DataType="controls:SmartPanelItem">
-            <Grid PointerEntered="Grid_PointerEntered" PointerExited="Grid_PointerExited" PointerMoved="Grid_PointerMoved">
+            <Grid PointerEntered="Grid_PointerEntered" PointerExited="Grid_PointerExited" PointerMoved="Grid_PointerMoved"
+                  Visibility="{x:Bind  _showMe, Mode=OneWay}">
                 <Grid.RowDefinitions>
                     <!-- row definition for the contact. -->
                     <RowDefinition Height="auto"/>
@@ -1047,18 +1048,21 @@
                 <Grid.RowDefinitions>
                     <RowDefinition x:Name="_rowRingTxtBx_"
                                    Height="40"/>
+                    <RowDefinition Height="auto"/>
                     <RowDefinition Height="*"/>
                 </Grid.RowDefinitions>
+                <!--Style="{StaticResource addContactTextBoxStyle}"-->
                 <TextBox x:Name="_ringTxtBx_"
                          HorizontalAlignment="Center"
                          VerticalAlignment="Center"
                          Width="320"
                          TextWrapping="Wrap"
-                         Style="{StaticResource addContactTextBoxStyle}"
+
                          KeyDown="_ringTxtBx__KeyDown"
+                         KeyUp="_ringTxtBx__KeyUp"
                          Text=""/>
                 <ListBox x:Name="_smartList_"
-                         Grid.Row="1"
+                         Grid.Row="2"
                          Margin="0"
                          Padding="0"
                          SelectionChanged="_smartList__SelectionChanged"
diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp
index 9773082d11a086f4ca8b209d904495a3757d0255..9ae201704ef8931d189a4afcee6863e9a904c526 100644
--- a/SmartPanel.xaml.cpp
+++ b/SmartPanel.xaml.cpp
@@ -47,6 +47,7 @@ using namespace Platform::Collections;
 using namespace Windows::ApplicationModel::Core;
 using namespace Windows::Storage;
 using namespace Windows::UI::Core;
+using namespace Windows::System::Threading;
 
 SmartPanel::SmartPanel()
 {
@@ -239,7 +240,7 @@ void RingClientUWP::Views::SmartPanel::_settingsMenu__Unchecked(Object^ sender,
     auto vcm = Video::VideoManager::instance->captureManager();
     if (vcm->deviceList->Size > 0) {
         vcm->StopPreviewAsync()
-            .then([](task<void> stopPreviewTask)
+        .then([](task<void> stopPreviewTask)
         {
             try {
                 stopPreviewTask.get();
@@ -416,15 +417,28 @@ void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyDown(Platform::Object^ sen
 {
     /* add contact, test purpose but will be reused later in some way */
     if (e->Key == Windows::System::VirtualKey::Enter && !_ringTxtBx_->Text->IsEmpty()) {
-        ContactsViewModel::instance->addNewContact(_ringTxtBx_->Text, _ringTxtBx_->Text);
-        _ringTxtBx_->Text = "";
+        for (auto it : SmartPanelItemsViewModel::instance->itemsList) {
+            if (it->_contact->name_ == _ringTxtBx_->Text) {
+                _smartList_->SelectedItem = it;
+                _ringTxtBx_->Text = "";
+                return;
+            }
+        }
+
+        /* if the string has 40 chars, we simply consider it as a ring id. It has to be improved */
+        if (_ringTxtBx_->Text->Length() == 40) {
+            ContactsViewModel::instance->addNewContact(_ringTxtBx_->Text, _ringTxtBx_->Text);
+            _ringTxtBx_->Text = "";
+        }
+
+
+        RingD::instance->lookUpName(_ringTxtBx_->Text);
     }
 }
 
 void RingClientUWP::Views::SmartPanel::_ringTxtBx__Click(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
 {
-    ContactsViewModel::instance->addNewContact(_ringTxtBx_->Text, _ringTxtBx_->Text);
-    _ringTxtBx_->Text = "";
+    RingD::instance->lookUpName(_ringTxtBx_->Text);
 }
 
 void
@@ -703,6 +717,22 @@ void RingClientUWP::Views::SmartPanel::checkStateEditionMenu()
     }
 }
 
+void RingClientUWP::Views::SmartPanel::ringTxtBxPlaceHolderDelay(String^ placeHolderText, int delayInMilliSeconds)
+{
+    _ringTxtBx_->PlaceholderText = placeHolderText;
+    TimeSpan delay;
+    delay.Duration = 10000 * delayInMilliSeconds;
+    ThreadPoolTimer^ delayTimer = ThreadPoolTimer::CreateTimer(
+                                      ref new TimerElapsedHandler([this](ThreadPoolTimer^ source)
+    {
+        Dispatcher->RunAsync(CoreDispatcherPriority::High,
+                             ref new DispatchedHandler([this]()
+        {
+            _ringTxtBx_->PlaceholderText = "";
+        }));
+    }), delay);
+}
+
 Object ^ RingClientUWP::Views::IncomingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
     auto state = static_cast<CallStatus>(value);
@@ -1171,38 +1201,72 @@ void RingClientUWP::Views::SmartPanel::_usernameTextBoxEdition__KeyUp(Platform::
 }
 
 
-void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::LookupStatus status)
+void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string& address, const std::string& name)
 {
-    switch (status)
+    if (_ringTxtBx_->Text->IsEmpty()) // if true, we consider we did the lookup for a new account
+        switch (status)
+        {
+        case LookupStatus::SUCCESS:
+            _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+            _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+            _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+            _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+
+            //_registerOnBlockchainEdition_->IsEnabled = false;
+            break;
+        case LookupStatus::INVALID_NAME:
+            _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+            _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+            _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+            _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+            //_registerOnBlockchainEdition_->IsEnabled = false;
+            break;
+        case LookupStatus::NOT_FOUND:
+            _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+            _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+            _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+            _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+            //_registerOnBlockchainEdition_->IsEnabled = true;
+            break;
+        case LookupStatus::ERRORR:
+            _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+            _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+            _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+            _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+            //_registerOnBlockchainEdition_->IsEnabled = false;
+            break;
+        }
+    else // if false, we consider we are looking for a registered user
     {
-    case LookupStatus::SUCCESS:
-        _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-        _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-        _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-        _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-        //_registerOnBlockchainEdition_->IsEnabled = false;
-        break;
-    case LookupStatus::INVALID_NAME:
-        _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-        _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-        _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-        _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-        //_registerOnBlockchainEdition_->IsEnabled = false;
-        break;
-    case LookupStatus::NOT_FOUND:
-        _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-        _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-        _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-        _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-        //_registerOnBlockchainEdition_->IsEnabled = true;
-        break;
-    case LookupStatus::ERRORR:
-        _usernameValidEdition_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-        _usernameInvalidEdition_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-        _usernameValid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-        _usernameInvalid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
-        //_registerOnBlockchainEdition_->IsEnabled = false;
-        break;
+        switch (status) {
+        case LookupStatus::SUCCESS:
+            ContactsViewModel::instance->addNewContact(Utils::toPlatformString(name), Utils::toPlatformString(address));
+            ringTxtBxPlaceHolderDelay("username found and added.", 1500);
+            break;
+        case LookupStatus::INVALID_NAME:
+            ringTxtBxPlaceHolderDelay("username invalid.", 1500);
+            break;
+        case LookupStatus::NOT_FOUND:
+        {
+            ringTxtBxPlaceHolderDelay("username not found.", 1500);
+            break;
+        }
+        case LookupStatus::ERRORR:
+            ringTxtBxPlaceHolderDelay("network error!", 1500);
+            break;
+        }
+
+        _ringTxtBx_->Text = "";
+
+        for (auto it : SmartPanelItemsViewModel::instance->itemsList) {
+            if (it->_contact->ringID_ == Utils::toPlatformString(address)) {
+                _smartList_->SelectedItem = it;
+                return;
+            }
+        }
+
+        _smartList_->SelectedItem = nullptr;
+
     }
 
     checkStateAddAccountMenu();
@@ -1352,7 +1416,7 @@ SmartPanel::_videoRateComboBox__SelectionChanged(Platform::Object^ sender, Windo
         vcm->activeDevice->currentResolution()->setActiveRate( resolution->rateList()->GetAt(index) );
         if (vcm->isPreviewing) {
             vcm->CleanupCameraAsync()
-                .then([=](task<void> cleanupCameraTask) {
+            .then([=](task<void> cleanupCameraTask) {
                 try {
                     cleanupCameraTask.get();
                     CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
@@ -1439,4 +1503,29 @@ SmartPanel::populateVideoRateSettingsComboBox()
     }
     if (!rateSelected && resolution->rateList()->Size > 0)
         _videoRateComboBox_->SelectedIndex = 0;
-}

+}
+
+
+
+void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
+{
+    if (e->Key == Windows::System::VirtualKey::Enter ) {
+        RingD::instance->lookUpName(_ringTxtBx_->Text);
+
+        for (auto it : SmartPanelItemsViewModel::instance->itemsList) {
+            it->_showMe = Windows::UI::Xaml::Visibility::Visible;
+        }
+        return;
+    }
+
+    for (auto it : SmartPanelItemsViewModel::instance->itemsList) {
+        auto str1 = Utils::toString(it->_contact->name_);
+        auto str2 = Utils::toString(_ringTxtBx_->Text);
+
+        if (str1.find(str2) != std::string::npos)
+            it->_showMe = Windows::UI::Xaml::Visibility::Visible;
+        else
+            it->_showMe = Windows::UI::Xaml::Visibility::Collapsed;
+    }
+
+}
diff --git a/SmartPanel.xaml.h b/SmartPanel.xaml.h
index 20f81afa2444f5805c779093dcc78893ad305f36..ca6f1cd8041587260ef6e1fc8ddd3711d1ad9dfc 100644
--- a/SmartPanel.xaml.h
+++ b/SmartPanel.xaml.h
@@ -128,6 +128,7 @@ private:
     void populateVideoRateSettingsComboBox();
     void checkStateAddAccountMenu();
     void checkStateEditionMenu();
+    void ringTxtBxPlaceHolderDelay(String^ placeHolderText, int delayInMilliSeconds);
 
     /* members */
     void _devicesMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
@@ -154,11 +155,12 @@ private:
     void Grid_PointerMoved(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
     void _registerOnBlockchainEdition__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _usernameTextBoxEdition__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
-    void OnregisteredNameFound(RingClientUWP::LookupStatus status);
+    void OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string& address, const std::string& name);
     void _RegisterState__Toggled(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _usernameTextBox__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
     void _deleteAccountEdition__Toggled(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _RegisterStateEdition__Toggled(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _ringTxtBx__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
 };
 }
 }
diff --git a/SmartPanelItem.h b/SmartPanelItem.h
index a952378b0b03775b19bd610a092f7bc3c42fba43..a1119c2acb1ebe2398c82aa187721568c7d8dc2a 100644
--- a/SmartPanelItem.h
+++ b/SmartPanelItem.h
@@ -83,11 +83,25 @@ public:
         }
     }
 
+    property Visibility _showMe
+    {
+        Visibility get()
+        {
+            return showMe_;
+        }
+        void set(Visibility value)
+        {
+            showMe_ = value;
+            NotifyPropertyChanged("_showMe");
+        }
+    }
+
 protected:
     void NotifyPropertyChanged(String^ propertyName);
 
 private:
     Visibility hovered_ = Visibility::Collapsed;
+    Visibility showMe_ = Visibility::Visible;
     CallStatus callStatus_;
     String^ callId_;
     bool videoMuted_;
diff --git a/Wizard.xaml.cpp b/Wizard.xaml.cpp
index 7a9a2efac465005ef8fa6f7021d91b3a897541ca..720989840a58e0e299b80e12939787566c0d4278 100644
--- a/Wizard.xaml.cpp
+++ b/Wizard.xaml.cpp
@@ -266,7 +266,7 @@ void RingClientUWP::Views::Wizard::_step2button__Click(Platform::Object^ sender,
     _addAccountYes_->Visibility = Windows::UI::Xaml::Visibility::Visible;
 }
 
-void RingClientUWP::Views::Wizard::OnregisteredNameFound(LookupStatus status)
+void RingClientUWP::Views::Wizard::OnregisteredNameFound(LookupStatus status, const std::string& address, const std::string& name)
 {
     switch (status)
     {
diff --git a/Wizard.xaml.h b/Wizard.xaml.h
index b68c1f81af950df598def63d11341ed938262853..5808a6f7e2260ea82c2d8e8916d4bb4e55c054b1 100644
--- a/Wizard.xaml.h
+++ b/Wizard.xaml.h
@@ -27,7 +27,7 @@ private:
     void collapseMenus(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _step1button__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _step2button__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
-    void OnregisteredNameFound(LookupStatus status);
+    void OnregisteredNameFound(LookupStatus status, const std::string& address, const std::string& name);
     void _password__PasswordChanged(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _passwordCheck__PasswordChanged(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void checkState();