diff --git a/CallsViewModel.cpp b/CallsViewModel.cpp
index 07e9019fad6a160adfec5eeeee4252d2617d4466..1bdb5a849f625e37f06c82d6c43a1e5fb32af149 100644
--- a/CallsViewModel.cpp
+++ b/CallsViewModel.cpp
@@ -27,58 +27,12 @@ using namespace Windows::ApplicationModel::Core;
 
 CallsViewModel::CallsViewModel()
 {
-    CallsList_ = ref new Vector<Call^>();
+    callIdsList_ = ref new Vector<String^>();
 
     /* connect to delegates. */
 
     RingD::instance->incomingCall += ref new RingClientUWP::IncomingCall([&](
     String^ accountId, String^ callId, String^ from) {
-        auto call = addNewCall(accountId, callId, from);
-        if (call)
-            callRecieved(call);
+        callIdsList_->Append(callId); // TODO : check if the string is remove when the call ends.
     });
-    RingD::instance->stateChange += ref new RingClientUWP::StateChange(this, &RingClientUWP::ViewModel::CallsViewModel::OnstateChange);
-}
-
-Call^
-RingClientUWP::ViewModel::CallsViewModel::addNewCall(String^ accountId, String^ callId, String^ peer)
-{
-    if (accountId == "" | callId == "" | peer == "") {
-        WNG_("call can't be created");
-    }
-    auto call = ref new Call(accountId, callId, peer);
-    CallsList_->Append(call);
-    return call;
-}
-
-void RingClientUWP::ViewModel::CallsViewModel::clearCallsList()
-{
-    CallsList_->Clear();
-}
-
-Call^
-CallsViewModel::findCall(String^ callId)
-{
-    for each (Call^ call in CallsList_)
-        if (call->callId == callId)
-            return call;
-
-    return nullptr;
-}
-
-
-void RingClientUWP::ViewModel::CallsViewModel::OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code)
-{
-    auto call = findCall(callId);
-
-    if (!call)
-        return;
-
-    switch (state)
-    {
-    case CallStatus::ENDED:
-        RingD::instance->hangUpCall(call);
-    default:
-        break;
-    }
 }
diff --git a/CallsViewModel.h b/CallsViewModel.h
index 21c68ff08c8746cc81ae1d7927f4acfeba0d905d..28e086473c38a5ea6d1195b8fd4810b116b69018 100644
--- a/CallsViewModel.h
+++ b/CallsViewModel.h
@@ -41,18 +41,12 @@ internal:
         }
     }
 
-    /* functions */
-    Call^ addNewCall(String^ accountId, String^ callId, String^ from);
-    void clearCallsList();
-    //void setState(String^ callId, String^ state, int code); // used ?
-    Call^ findCall(String^ callId);
-
     /* properties */
-    property Vector<Call^>^ CallsList
+    property Vector<String^>^ _callIdList
     {
-        Vector<Call^>^ get()
+        Vector<String^>^ get()
         {
-            return CallsList_;
+            return callIdsList_;
         }
     }
 
@@ -64,9 +58,8 @@ internal:
 
 private:
     CallsViewModel(); // singleton
-    Vector<Call^>^ CallsList_; // refacto : change C to c
+    Vector<String^>^ callIdsList_;
 
-    void OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code);
 };
 }
 }
diff --git a/Globals.h b/Globals.h
new file mode 100644
index 0000000000000000000000000000000000000000..1f4755b8fd664e13451466ef5e7daf9776fb8c1e
--- /dev/null
+++ b/Globals.h
@@ -0,0 +1,6 @@
+namespace RingClientUWP
+{
+/* public enumerations. */
+public enum class CallStatus { NONE, INCOMING_RINGING, OUTGOING_RINGING, SEARCHING, IN_PROGRESS, ENDED, TERMINATING };
+
+}
\ No newline at end of file
diff --git a/MainPage.xaml.cpp b/MainPage.xaml.cpp
index bdcbb29d3437a4f6a8285ee664b56d61553da05b..6a13b2291e27e1fdd6e2b07611cbe61c46bc1877 100644
--- a/MainPage.xaml.cpp
+++ b/MainPage.xaml.cpp
@@ -246,14 +246,6 @@ void RingClientUWP::MainPage::OnstateChange(Platform::String ^callId, RingClient
             OnsummonMessageTextPage();
         break;
     }
-    /* if the state changes to IN_PROGRESS for any peer, show the video page.
-       nb : the peer is currently selected from the SmartPannel. */
-    case CallStatus::IN_PROGRESS:
-    {
-        if (item)
-            OnsummonVideoPage();
-        break;
-    }
     default:
         break;
     }
@@ -265,14 +257,14 @@ MainPage::Application_Suspending(Object^, Windows::ApplicationModel::SuspendingE
 {
     WriteLine("Application_Suspending");
     if (Frame->CurrentSourcePageType.Name ==
-        Interop::TypeName(MainPage::typeid).Name)
+            Interop::TypeName(MainPage::typeid).Name)
     {
         if (Video::VideoManager::instance->captureManager()->captureTaskTokenSource)
             Video::VideoManager::instance->captureManager()->captureTaskTokenSource->cancel();
         //displayInformation->OrientationChanged -= displayInformationEventToken;
         auto deferral = e->SuspendingOperation->GetDeferral();
         Video::VideoManager::instance->captureManager()->CleanupCameraAsync()
-            .then([this, deferral]() {
+        .then([this, deferral]() {
             deferral->Complete();
         });
     }
@@ -292,4 +284,5 @@ MainPage::Application_VisibilityChanged(Object^ sender, VisibilityChangedEventAr
     {
         WriteLine("->Invisible");
     }
-}

+}
+
diff --git a/MainPage.xaml.h b/MainPage.xaml.h
index 554ae31ba52effa5f105435c5978e8a29c02b888..428c5395714f21a321f32671b387d6e0cd98e223 100644
--- a/MainPage.xaml.h
+++ b/MainPage.xaml.h
@@ -60,6 +60,6 @@ private:
     void OnsummonWelcomePage();
     void OnsummonVideoPage();
     void OnpressHangUpCall();
-    void OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code);
+    void OnstateChange(Platform::String ^callId, CallStatus state, int code);
 };
 }
diff --git a/RingConsolePanel.xaml.cpp b/RingConsolePanel.xaml.cpp
index 797e023a503c00ebda8df0375169a866146da786..1976dc2bf392a00bfab76f2cc841ceacebde3ca4 100644
--- a/RingConsolePanel.xaml.cpp
+++ b/RingConsolePanel.xaml.cpp
@@ -95,7 +95,7 @@ void RingConsolePanel::sendCommand()
     currentCmd = "";
     historyLevel = historyCmds.Size;
 
-    if (cmdInput == "") {
+    if (cmdInput->IsEmpty()) {
         return;
     }
     else if (cmdInput == "help") {
diff --git a/RingD.cpp b/RingD.cpp
index fba4158fd91cfbdf882f5e3887eca9aa3333d911..1308305ea76e73beafbc254fe0e182104712596e 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -114,14 +114,14 @@ RingD::createSIPAccount(String^ alias)
     tasksList_.push(ref new RingD::Task(Request::AddSIPAccount));
 }
 
-void RingClientUWP::RingD::refuseIncommingCall(Call^ call)
+void RingClientUWP::RingD::refuseIncommingCall(String^ callId)
 {
-    tasksList_.push(ref new RingD::Task(Request::RefuseIncommingCall, call));
+    tasksList_.push(ref new RingD::Task(Request::RefuseIncommingCall, callId));
 }
 
-void RingClientUWP::RingD::acceptIncommingCall(Call^ call)
+void RingClientUWP::RingD::acceptIncommingCall(String^ callId)
 {
-    tasksList_.push(ref new RingD::Task(Request::AcceptIncommingCall, call));
+    tasksList_.push(ref new RingD::Task(Request::AcceptIncommingCall, callId));
 }
 
 void RingClientUWP::RingD::placeCall(Contact^ contact)
@@ -137,65 +137,40 @@ void RingClientUWP::RingD::placeCall(Contact^ contact)
 
 
 
-    if (callId2 == "") {
+    if (callId2.empty()) {
         WNG_("call not created, the daemon didn't return a call Id");
         return;
     }
 
     auto callId = Utils::toPlatformString(callId2);
 
+    _callIdsList->Append(callId);
 
     //auto con = ContactsViewModel::instance->findContactByName(to);
     auto item = SmartPanelItemsViewModel::instance->findItem(contact);
     item->_callId = callId;
     MSG_("$1 place call with id : " + Utils::toString(item->_callId));
 
+    callPlaced(callId);
 
-    auto call = CallsViewModel::instance->addNewCall(accountId, callId, to);
-    call->isOutGoing = true;
-
-    if (call == nullptr) {
-        WNG_("call not created, nullptr reason");
-        return;
-    }
-
-    calling(call);
-
-}
-
-void
-RingClientUWP::RingD::cancelOutGoingCall(Call^ call)
-{
-    MSG_("1!--->> cancelOutGoingCall");
-    if (call)
-        tasksList_.push(ref new RingD::Task(Request::CancelOutGoingCall, call));
 }
 
 void RingClientUWP::RingD::cancelOutGoingCall2(String ^ callId)
 {
     MSG_("$1 cancelOutGoingCall2 : " + Utils::toString(callId));
-    tasksList_.push(ref new RingD::Task(Request::HangUpCall, callId, 0));
+    tasksList_.push(ref new RingD::Task(Request::HangUpCall, callId));
 }
 
-void
-RingClientUWP::RingD::hangUpCall(Call^ call)
-{
-    tasksList_.push(ref new RingD::Task(Request::HangUpCall, call));
-}
 
 void RingClientUWP::RingD::hangUpCall2(String ^ callId)
 {
     MSG_("$1 hangUpCall2 : "+Utils::toString(callId));
-    tasksList_.push(ref new RingD::Task(Request::HangUpCall, callId, 0));
+    tasksList_.push(ref new RingD::Task(Request::HangUpCall, callId));
 }
 
 void
 RingClientUWP::RingD::startDaemon()
 {
-    // TODO (during refactoring) : use namespace
-    /* clear the calls list and instantiate the singleton (required)  */
-    RingClientUWP::ViewModel::CallsViewModel::instance->clearCallsList();
-
     create_task([&]()
     {
         using SharedCallback = std::shared_ptr<DRing::CallbackWrapperBase>;
@@ -228,7 +203,6 @@ RingClientUWP::RingD::startDaemon()
                     incomingCall(accountId2, callId2, from2);
                     stateChange(callId2, CallStatus::INCOMING_RINGING, 0);
 
-
                     auto contact = ContactsViewModel::instance->findContactByName(from2);
                     auto item = SmartPanelItemsViewModel::instance->findItem(contact);
                     item->_callId = callId2;
@@ -250,6 +224,9 @@ RingClientUWP::RingD::startDaemon()
 
                 auto state3 = getCallStatus(state2);
 
+                if (state3 == CallStatus::ENDED)
+                    DRing::hangUp(callId); // solve a bug in the daemon API.
+
 
                 CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
                     CoreDispatcherPriority::High, ref new DispatchedHandler([=]()
@@ -293,12 +270,7 @@ RingClientUWP::RingD::startDaemon()
 
                 from2 = Utils::TrimRingId2(from2);
 
-                Call^ call = CallsViewModel::instance->findCall(callId2);
 
-                if (!call)
-                    return;
-
-                String^ accountId2 = call->accountId;
                 const std::string PROFILE_VCF = "x-ring/ring.profile.vcard";
                 static const unsigned int profileSize = PROFILE_VCF.size();
 
@@ -314,7 +286,9 @@ RingClientUWP::RingD::startDaemon()
                     CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
                         CoreDispatcherPriority::High, ref new DispatchedHandler([=]()
                     {
-                        incomingAccountMessage(accountId2, from2, payload);
+                        // DOIT ETRE DIFFEREND.... NE PAS UTILISE accoutId2
+                        //incomingAccountMessage(accountId2, from2, payload);
+                        MSG_("message recu :" + i.second);
                     }));
                 }
             }),
@@ -462,8 +436,8 @@ RingClientUWP::RingD::startDaemon()
             }
             while (true) {
                 DRing::pollEvents();
-                Sleep(1000);
                 dequeueTasks();
+                Sleep(1000);
             }
             DRing::fini();
         }
@@ -473,6 +447,7 @@ RingClientUWP::RingD::startDaemon()
 RingD::RingD()
 {
     localFolder_ = Utils::toString(ApplicationData::Current->LocalFolder->Path);
+    callIdsList_ = ref new Vector<String^>();
 }
 
 void
@@ -502,14 +477,14 @@ RingD::dequeueTasks()
         break;
         case Request::RefuseIncommingCall:
         {
-            auto callId = task->_call->callId;
+            auto callId = task->_callId;
             auto callId2 = Utils::toString(callId);
             DRing::refuse(callId2);
         }
         break;
         case Request::AcceptIncommingCall:
         {
-            auto callId = task->_call->callId;
+            auto callId = task->_callId;
             auto callId2 = Utils::toString(callId);
             DRing::accept(callId2);
         }
@@ -517,15 +492,8 @@ RingD::dequeueTasks()
         case Request::CancelOutGoingCall:
         case Request::HangUpCall:
         {
-
-            MSG_("1!--->> Request::CancelOutGoingCall");
-            auto id = task->_callId;
-            DRing::hangUp(Utils::toString(id));
-            return;
-
-            auto callId = task->_call->callId;
-            auto callId2 = Utils::toString(callId);
-            DRing::hangUp(callId2);
+            auto callId = task->_callId;
+            DRing::hangUp(Utils::toString(callId));
         }
         break;
         default:
@@ -535,7 +503,7 @@ RingD::dequeueTasks()
     }
 }
 
-CallStatus RingClientUWP::RingD::getCallStatus(String^ state)
+RingClientUWP::CallStatus RingClientUWP::RingD::getCallStatus(String^ state)
 {
     if (state == "INCOMING")
         return CallStatus::INCOMING_RINGING;
diff --git a/RingD.h b/RingD.h
index 7a22790d55566b0fcad5dbdd871598e67208097a..c1eed29a5ad55630a22160afe0812a8ce7312f72 100644
--- a/RingD.h
+++ b/RingD.h
@@ -26,7 +26,7 @@ namespace RingClientUWP
 delegate void IncomingCall(String^ accountId, String^ callId, String^ from);
 delegate void StateChange(String^ callId, CallStatus state, int code);
 delegate void IncomingAccountMessage(String^ accountId, String^ from, String^ payload);
-delegate void Calling(Call^ call);
+delegate void CallPlaced(String^ callId);
 
 
 public ref class RingD sealed
@@ -54,6 +54,15 @@ public:
 
     void cancelOutGoingCall2(String^ callId); // marche
 
+internal: // why this property has to be internal and not public ?
+    property Vector<String^>^ _callIdsList
+    {
+        Vector<String^>^ get()
+        {
+            return callIdsList_;
+        }
+    }
+
 
 internal:
     /* functions */
@@ -62,13 +71,12 @@ internal:
     void sendAccountTextMessage(String^ message);
     void createRINGAccount(String^ alias);
     void createSIPAccount(String^ alias);
-    void refuseIncommingCall(Call^ call);
-    void acceptIncommingCall(Call^ call);
+    void refuseIncommingCall(String^ call);
+    void acceptIncommingCall(String^ call);
     void placeCall(Contact^ contact);
-    void cancelOutGoingCall(Call^ call);
     /*void cancelOutGoingCall2(String^ callId);*/ // marche pas
+    CallStatus getCallStatus(String^ state);
 
-    void hangUpCall(Call^ call);
     void hangUpCall2(String^ callId);
 
     /* TODO : move members */
@@ -79,7 +87,7 @@ internal:
     event IncomingCall^ incomingCall;
     event StateChange^ stateChange;
     event IncomingAccountMessage^ incomingAccountMessage;
-    event Calling^ calling;
+    event CallPlaced^ callPlaced;
 
 private:
     /* sub classes */
@@ -92,30 +100,29 @@ private:
         CancelOutGoingCall,
         HangUpCall
     };
+
+
+    Vector<String^>^ callIdsList_;
+
     ref class Task
     {
     internal:
         Task(Request r) {
             request = r;
         }
-        Task(Request r, Call^ c) {
-            request = r;
-            _call = c;
-        }
-        Task(Request r, String^ c, int i) {
+        Task(Request r, String^ c) {
             request = r;
             _callId = c;
         }
     public:
         property Request request;
-        property Call^ _call;
         property String^ _callId;
     };
 
     /* functions */
     RingD(); // singleton
     void dequeueTasks();
-    CallStatus getCallStatus(String^ state);
+//    CallStatus getCallStatus(String^ state);
 
     /* members */
     std::string localFolder_;
diff --git a/SmartPanel.xaml b/SmartPanel.xaml
index 3876183179bbfa2b91eda7d35541d1db2320b57f..4bda00e31b094bcb8f6f9cea8d16585171e3290d 100644
--- a/SmartPanel.xaml
+++ b/SmartPanel.xaml
@@ -203,65 +203,6 @@
                            Text="{x:Bind ringID_}"/>
             </Grid>
         </DataTemplate>
-        <!-- template for incoming calls. -->
-        <DataTemplate x:Key="IncomingCallTemplate" x:DataType="local:Call">
-            <Grid Width="320"
-                      HorizontalAlignment="Left"
-                      Background="DarkGray">
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="30"/>
-                    <RowDefinition Height="30"/>
-                </Grid.RowDefinitions>
-                <TextBlock x:Name="_contactCallStatus_"
-                           Grid.Row="0"
-                           Foreground="White"
-                           Text="{x:Bind state, Mode=OneWay}"
-                           Visibility="Visible"
-                           HorizontalAlignment="Center">
-                </TextBlock>
-                <StackPanel Orientation="Horizontal"
-                            Grid.Row="1"
-                            HorizontalAlignment="Center">
-                    <Button x:Name="_acceptIncomingCallBtn_"
-                            Click="_acceptIncomingCallBtn__Click"
-                            VerticalAlignment="Center"
-                            HorizontalAlignment="Center"
-                            Content="Accept"/>
-                    <Button x:Name="_rejectIncomingCallBtn_"
-                            Click="_rejectIncomingCallBtn__Click"
-                            VerticalAlignment="Center"
-                            HorizontalAlignment="Center"
-                            Content="Reject"/>
-                </StackPanel>
-            </Grid>
-        </DataTemplate>
-        <!-- template for outgoing calls. -->
-        <DataTemplate x:Key="OutGoingCallTemplate" x:DataType="local:Call">
-            <Grid Width="320"
-                      HorizontalAlignment="Left"
-                      Background="DarkGray">
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="30"/>
-                    <RowDefinition Height="30"/>
-                </Grid.RowDefinitions>
-                <TextBlock x:Name="_contactCallStatus_"
-                           Grid.Row="0"
-                           Foreground="White"
-                           Text="{x:Bind state, Mode=OneWay}"
-                           Visibility="Visible"
-                           HorizontalAlignment="Center">
-                </TextBlock>
-                <StackPanel Orientation="Horizontal"
-                            Grid.Row="1"
-                            HorizontalAlignment="Center">
-                    <Button x:Name="_cancelCallBtn_"
-                            Click="_cancelCallBtn__Click"
-                            VerticalAlignment="Center"
-                            HorizontalAlignment="Center"
-                            Content="Cancel"/>
-                </StackPanel>
-            </Grid>
-        </DataTemplate>
         <!-- template for smartpanelitems. -->
         <DataTemplate x:Key="SmartPanelItemsTemplate"
                       x:DataType="controls:SmartPanelItem">
@@ -348,7 +289,7 @@
                         </Grid>
                     </Grid>
                 </Grid>
-                <!-- incomming call bar. -->
+                <!-- call bar. -->
                 <Grid Width="320"
                       Grid.Row="1"
                       HorizontalAlignment="Left"
@@ -357,11 +298,11 @@
                         <RowDefinition Height="auto"/>
                         <RowDefinition Height="auto"/>
                     </Grid.RowDefinitions>
-                    <TextBlock x:Name="_incommingCallStatus_"
+                    <TextBlock x:Name="_CallStatus_"
                            Grid.Row="0"
                            Foreground="White"
-                           Text="{x:Bind _call.state, Mode=OneWay}"
-                           Visibility="{x:Bind _call.state, Converter={StaticResource _HasAnActiveCall_}, Mode=OneWay}"
+                           Text="{x:Bind _callStatus, Mode=OneWay}"
+                           Visibility="{x:Bind _callStatus, Converter={StaticResource _HasAnActiveCall_}, Mode=OneWay}"
                            HorizontalAlignment="Center">
                     </TextBlock>
                     <StackPanel Orientation="Horizontal"
@@ -370,19 +311,19 @@
                                 HorizontalAlignment="Center">
                         <Button x:Name="_acceptIncomingCallBtn_"
                             Click="_acceptIncomingCallBtn__Click"
-                            Visibility="{x:Bind _call.state, Converter={StaticResource _IncomingVisibility_}, Mode=OneWay}"
+                            Visibility="{x:Bind _callStatus, Converter={StaticResource _IncomingVisibility_}, Mode=OneWay}"
                             VerticalAlignment="Center"
                             HorizontalAlignment="Center"
                             Content="Accept"/>
                         <Button x:Name="_rejectIncomingCallBtn_"
                             Click="_rejectIncomingCallBtn__Click"
-                            Visibility="{x:Bind _call.state, Converter={StaticResource _IncomingVisibility_}, Mode=OneWay}"
+                            Visibility="{x:Bind _callStatus, Converter={StaticResource _IncomingVisibility_}, Mode=OneWay}"
                             VerticalAlignment="Center"
                             HorizontalAlignment="Center"
                             Content="Reject"/>
                         <Button x:Name="_cancelCallBtn_"
                             Click="_cancelCallBtn__Click"
-                            Visibility="{x:Bind _call.state, Converter={StaticResource _OutGoingVisibility_}, Mode=OneWay}"
+                            Visibility="{x:Bind _callStatus, Converter={StaticResource _OutGoingVisibility_}, Mode=OneWay}"
                             VerticalAlignment="Center"
                             HorizontalAlignment="Center"
                             Content="Cancel"/>
diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp
index d1d01f5ddfab45755d334c024274e352ad3ff3eb..b91a2ac73de208a6d616a2f08806baac7123ac0f 100644
--- a/SmartPanel.xaml.cpp
+++ b/SmartPanel.xaml.cpp
@@ -62,9 +62,9 @@ SmartPanel::SmartPanel()
         _accountsListScrollView_->UpdateLayout();
         _accountsListScrollView_->ScrollToVerticalOffset(_accountsListScrollView_->ScrollableHeight);
     });
-    CallsViewModel::instance->callRecieved += ref new RingClientUWP::CallRecieved([&](
-    Call^ call) {
-        auto from = call->from;
+    RingD::instance->incomingCall += ref new RingClientUWP::IncomingCall([&](
+    String^ accountId, String^ callId, String^ from) {
+        ///auto from = call->from;
         auto contact = ContactsViewModel::instance->findContactByName(from);
 
         if (contact == nullptr)
@@ -76,26 +76,36 @@ SmartPanel::SmartPanel()
         }
 
         auto item = SmartPanelItemsViewModel::instance->findItem(contact);
-        item->_call = call;
+        item->_callId = callId;
 
     });
     RingD::instance->stateChange += ref new StateChange([this](String^ callId, CallStatus state, int code) {
-        auto call = CallsViewModel::instance->findCall(callId);
 
-        if (call == nullptr)
-            return;
-
-        auto item = SmartPanelItemsViewModel::instance->findItem(call);
+        auto item = SmartPanelItemsViewModel::instance->findItem(callId);
 
         if (!item) {
             WNG_("item not found");
             return;
         }
 
-        call->state = state;
+        item->_callStatus = state;
 
-        if (state == CallStatus::IN_PROGRESS)
-            _smartList_->SelectedIndex = SmartPanelItemsViewModel::instance->getIndex(call);
+        switch (state) {
+        case CallStatus::NONE:
+        case CallStatus::ENDED:
+        {
+            item->_callId = "";
+            break;
+        }
+        case CallStatus::IN_PROGRESS:
+        {
+            _smartList_->SelectedItem = item;
+            summonVideoPage();
+            break;
+        }
+        default:
+            break;
+        }
 
     });
 
@@ -106,29 +116,7 @@ SmartPanel::SmartPanel()
         SmartPanelItemsViewModel::instance->itemsList->Append(smartPanelItem);
     });
 
-    RingD::instance->calling += ref new RingClientUWP::Calling([&](
-    Call^ call) {
-        MSG_("!--->> Calling lambda from smartpanel");
-        auto from = call->from;
-        auto contact = ContactsViewModel::instance->findContactByName(from);
-
-        if (contact == nullptr) {
-            WNG_("cannot call the peer, contact not found!");
-            return;
-        }
-
-        auto item = SmartPanelItemsViewModel::instance->findItem(contact);
-
-        if (item == nullptr) {
-            WNG_("cannot call the peer, smart panel item not found!");
-            return;
-        }
-
-        call->state = CallStatus::SEARCHING;
-        MSG_("!--->> should be Searching");
 
-        item->_call = call;
-    });
 
 }
 
@@ -256,21 +244,16 @@ SmartPanel::_smartList__SelectionChanged(Platform::Object^ sender, Windows::UI::
         return;
     }
 
-    auto call = item->_call;
     auto contact = item->_contact;
 
-    if (call) {
-        auto state = call->state;
-
-        if (state == CallStatus::IN_PROGRESS) {
-            if (contact) {
-                contact->_unreadMessages = 0;
-                ContactsViewModel::instance->saveContactsToFile();
-            }
-
-            summonVideoPage();
-            return;
+    if (item->_callStatus == CallStatus::IN_PROGRESS) {
+        if (contact) {
+            contact->_unreadMessages = 0;
+            ContactsViewModel::instance->saveContactsToFile();
         }
+
+        summonVideoPage();
+        return;
     }
 
     if (contact) {
@@ -307,7 +290,7 @@ SmartPanel::_accountList__SelectionChanged(Platform::Object^ sender, Windows::UI
 void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
 {
     /* add contact, test purpose but will be reused later in some way */
-    if (e->Key == Windows::System::VirtualKey::Enter && _ringTxtBx_->Text != "") {
+    if (e->Key == Windows::System::VirtualKey::Enter && !_ringTxtBx_->Text->IsEmpty()) {
         ContactsViewModel::instance->addNewContact(_ringTxtBx_->Text, _ringTxtBx_->Text);
         _ringTxtBx_->Text = "";
     }
@@ -319,32 +302,28 @@ void RingClientUWP::Views::SmartPanel::_ringTxtBx__Click(Platform::Object^ sende
     _ringTxtBx_->Text = "";
 }
 
-// REFACTO : change the name IncomingCall if used with OutGoingCall too.
-void RingClientUWP::Views::SmartPanel::_rejectIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+void
+RingClientUWP::Views::SmartPanel::_rejectIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     auto button = dynamic_cast<Button^>(e->OriginalSource);
     if (button) {
         auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
         if (item) {
-            auto call = item->_call;
-            if (call)
-                RingD::instance->refuseIncommingCall(call);
-            //call->refuse();
+            auto callId = item->_callId;
+            RingD::instance->refuseIncommingCall(callId);
         }
     }
 }
 
-
-void RingClientUWP::Views::SmartPanel::_acceptIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+void
+RingClientUWP::Views::SmartPanel::_acceptIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     auto button = dynamic_cast<Button^>(e->OriginalSource);
     if (button) {
         auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
         if (item) {
-            auto call = item->_call;
-            if (call)
-                RingD::instance->acceptIncommingCall(call);
-            //call->accept();
+            auto callId = item->_callId;
+            RingD::instance->acceptIncommingCall(callId);
         }
     }
 }
@@ -352,9 +331,11 @@ void RingClientUWP::Views::SmartPanel::_acceptIncomingCallBtn__Click(Platform::O
 void
 SmartPanel::_callContact__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
-    MSG_("!--->> _callContact__Click");
     auto button = dynamic_cast<Button^>(e->OriginalSource);
     if (button) {
+        /* force to hide the button, avoid attempting to call several times... */
+        button->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+
         auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
         if (item) {
             auto contact = item->_contact;
@@ -364,32 +345,27 @@ SmartPanel::_callContact__Click(Platform::Object^ sender, Windows::UI::Xaml::Rou
     }
 }
 
-
 void RingClientUWP::Views::SmartPanel::_cancelCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     auto button = dynamic_cast<Button^>(e->OriginalSource);
     if (button) {
         auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
         if (item) {
-            auto call = item->_call;
             RingD::instance->cancelOutGoingCall2(item->_callId);
-
+            item->_callStatus = CallStatus::TERMINATING;
             return;
-            if (call)
-                RingD::instance->cancelOutGoingCall(call);
-            //call->cancel();
         }
     }
 }
 
-
 void RingClientUWP::Views::SmartPanel::Grid_PointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
 {
     auto grid = dynamic_cast<Grid^>(sender);
     auto listBoxItem = dynamic_cast<ListBoxItem^>(sender);
     auto item = dynamic_cast<SmartPanelItem^>(grid->DataContext);
 
-    item->_hovered = Windows::UI::Xaml::Visibility::Visible;
+    if (item->_callId->IsEmpty())
+        item->_hovered = Windows::UI::Xaml::Visibility::Visible;
 }
 
 
@@ -418,6 +394,7 @@ void RingClientUWP::Views::SmartPanel::_contactItem__PointerReleased(Platform::O
 Object ^ RingClientUWP::Views::IncomingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
     auto state = static_cast<CallStatus>(value);
+
     if (state == CallStatus::INCOMING_RINGING)
         return  Windows::UI::Xaml::Visibility::Visible;
     else
@@ -464,7 +441,6 @@ Object ^ RingClientUWP::Views::HasAnActiveCall::Convert(Object ^ value, Windows:
 Object ^ RingClientUWP::Views::HasAnActiveCall::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
 {
     throw ref new Platform::NotImplementedException();
-
 }
 
 RingClientUWP::Views::HasAnActiveCall::HasAnActiveCall()
diff --git a/SmartPanelItem.cpp b/SmartPanelItem.cpp
index 35c77deebc1644b2aa8fc466397a724f4d26f634..ebf3eee9dac14f19d3ffe19270ee0b9bb6ac57ff 100644
--- a/SmartPanelItem.cpp
+++ b/SmartPanelItem.cpp
@@ -31,10 +31,9 @@ using namespace ViewModel;
 
 SmartPanelItem::SmartPanelItem()
 {
-    /* create an empty call to avoid the call bar */
-    _call = ref new Call("", "", "");
     _callId = "";
 
+    RingD::instance->callPlaced += ref new RingClientUWP::CallPlaced(this, &RingClientUWP::Controls::SmartPanelItem::OncallPlaced);
 }
 
 void
@@ -47,4 +46,11 @@ SmartPanelItem::NotifyPropertyChanged(String^ propertyName)
     {
         PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName));
     }));
-}
\ No newline at end of file
+}
+
+void RingClientUWP::Controls::SmartPanelItem::OncallPlaced(Platform::String ^callId)
+{
+    if (_callId == callId) {
+        _callStatus = CallStatus::SEARCHING;
+    }
+}
diff --git a/SmartPanelItem.h b/SmartPanelItem.h
index 45a7e39c9ae7ec84899e845cfbdde7a7fbd0c5f9..88cb4869f835cb63939b82f5a6689e02ac5c4acd 100644
--- a/SmartPanelItem.h
+++ b/SmartPanelItem.h
@@ -32,7 +32,7 @@ public:
 
     virtual event PropertyChangedEventHandler^ PropertyChanged;
     property Contact^ _contact;
-    property Call^ _call
+    /*property Call^ _call
     {
         Call^ get()
         {
@@ -43,7 +43,7 @@ public:
             call_ = value;
             PropertyChanged(this, ref new PropertyChangedEventArgs("_call"));
         }
-    }
+    }*/
     property Visibility _hovered
     {
         Visibility get()
@@ -57,15 +57,33 @@ public:
         }
     }
 
-    property String^ _callId;
+    property String^ _callId; /*{
+        String^ get() {
+            return callId_;
+        }
+        void set(String^ value) {
+            _callId = value;
+        }
+    }*/
+    property CallStatus _callStatus {
+        CallStatus get() {
+            return callStatus_;
+        }
+        void set(CallStatus value) {
+            callStatus_ = value;
+            PropertyChanged(this, ref new PropertyChangedEventArgs("_callStatus"));
+        }
+    }
 
 protected:
     void NotifyPropertyChanged(String^ propertyName);
 
 private:
-    Call^ call_;
     Visibility hovered_ = Visibility::Collapsed;
+    CallStatus callStatus_;
+    String^ callId_;
 
+    void OncallPlaced(Platform::String ^callId);
 };
 }
 }
diff --git a/SmartPanelItemsViewModel.cpp b/SmartPanelItemsViewModel.cpp
index bdb240693cee4f129449a0d23780b48b65a77193..e567398019c487784b1775ba92f1e7b755167b99 100644
--- a/SmartPanelItemsViewModel.cpp
+++ b/SmartPanelItemsViewModel.cpp
@@ -36,10 +36,10 @@ SmartPanelItemsViewModel::SmartPanelItemsViewModel()
 }
 
 SmartPanelItem^
-SmartPanelItemsViewModel::findItem(Call^ call)
+SmartPanelItemsViewModel::findItem(String^ callId)
 {
     for each (SmartPanelItem^ item in itemsList)
-        if (item->_call == call)
+        if (item->_callId == callId)
             return item;
 
     return nullptr;
@@ -56,11 +56,11 @@ SmartPanelItemsViewModel::findItem(Contact^ contact)
 }
 
 unsigned int
-SmartPanelItemsViewModel::getIndex(Call^ call)
+SmartPanelItemsViewModel::getIndex(String^ callId)
 {
     unsigned int i;
     for (i = 0; i < itemsList_->Size; i++) {
-        if (itemsList_->GetAt(i)->_call == call)
+        if (itemsList_->GetAt(i)->_callId == callId)
             break;
     }
     return i;
diff --git a/SmartPanelItemsViewModel.h b/SmartPanelItemsViewModel.h
index 029b16541c36ec52487a3ed2be0d3e1c3878a8e4..f77d3a0b3d692ff71547bafaffddfeaa6853f43b 100644
--- a/SmartPanelItemsViewModel.h
+++ b/SmartPanelItemsViewModel.h
@@ -27,6 +27,7 @@ using namespace RingClientUWP::Controls;
 namespace RingClientUWP
 {
 namespace ViewModel {
+
 public ref class SmartPanelItemsViewModel sealed
 {
 internal:
@@ -41,9 +42,9 @@ internal:
     }
 
     /* functions */
-    SmartPanelItem^ findItem(Call^ call);
+    SmartPanelItem^ findItem(String^ callId);
     SmartPanelItem^ findItem(Contact^ contact);
-    unsigned int getIndex(Call^ call);
+    unsigned int getIndex(String^ callId);
     unsigned int getIndex(Contact^ contact);
 
     property Vector<SmartPanelItem^>^ itemsList
diff --git a/VideoPage.xaml.cpp b/VideoPage.xaml.cpp
index 657d1c1feb837e8d045fb6140823639371b8407a..1d44ac6d09307d8d904534e2290a9acfb8f6d009 100644
--- a/VideoPage.xaml.cpp
+++ b/VideoPage.xaml.cpp
@@ -203,16 +203,7 @@ void RingClientUWP::Views::VideoPage::_btnCancel__Click(Platform::Object^ sender
 void RingClientUWP::Views::VideoPage::_btnHangUp__Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
 {
     auto item = SmartPanelItemsViewModel::instance->_selectedItem;
-    auto call = item->_call;
-
-    /*if (call)
-        RingD::instance->hangUpCall(call);*/
-
-    if (item->_callId != "") {
-        MSG_("$1 item->callid != vide ");
-        RingD::instance->hangUpCall2(item->_callId);
-        item->_callId = "";
-    }
+    RingD::instance->hangUpCall2(item->_callId);
 
     pressHangUpCall();
 }
diff --git a/pch.h b/pch.h
index 20d873b3df7cb9eba02f6011d0d8a29c7e41e11e..9bd464e9f9b8b6ad4f53c7ce196f7a6498d94719 100644
--- a/pch.h
+++ b/pch.h
@@ -26,13 +26,13 @@
 #include <sstream>
 #include <string>
 
+/* project's globals */
+#include "Globals.h"
 
 /* required by generated headers. */
 #include "App.xaml.h"
 #include "Account.h"
 #include "AccountsViewModel.h"
-#include "Call.h"
-#include "CallsViewModel.h"
 #include "Contact.h"
 #include "ContactsViewModel.h"
 #include "Conversation.h"
diff --git a/ring-client-uwp.vcxproj b/ring-client-uwp.vcxproj
index 6f1281fa3bda30288882f3471956f0e15a58b50f..5a7fe1b9595b43322178560987f7fd40a8e17da1 100644
--- a/ring-client-uwp.vcxproj
+++ b/ring-client-uwp.vcxproj
@@ -161,11 +161,10 @@
   <ItemGroup>
     <ClInclude Include="Account.h" />
     <ClInclude Include="AccountsViewModel.h" />
-    <ClInclude Include="Call.h" />
-    <ClInclude Include="CallsViewModel.h" />
     <ClInclude Include="Contact.h" />
     <ClInclude Include="ContactsViewModel.h" />
     <ClInclude Include="Conversation.h" />
+    <ClInclude Include="Globals.h" />
     <ClInclude Include="LoadingPage.xaml.h">
       <DependentUpon>LoadingPage.xaml</DependentUpon>
     </ClInclude>
@@ -275,8 +274,6 @@
       <DependentUpon>App.xaml</DependentUpon>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\ring-daemon\MSVC;..\ring-daemon\src\media;..\ring-daemon\src;..\ring-daemon\src\dring;..\ring-daemon\contrib\include;..\ring-daemon\contrib\include\pjlib;..\ring-daemon\contrib\pjproject\third_party\speex\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
-    <ClCompile Include="Call.cpp" />
-    <ClCompile Include="CallsViewModel.cpp" />
     <ClCompile Include="Contact.cpp" />
     <ClCompile Include="ContactsViewModel.cpp" />
     <ClCompile Include="Conversation.cpp" />
diff --git a/ring-client-uwp.vcxproj.filters b/ring-client-uwp.vcxproj.filters
index 2d88f468ddc4c376179693b9bce9bb1c1f950eac..e28e7a03e28d8f54f25517b6de71231059bc3ee6 100644
--- a/ring-client-uwp.vcxproj.filters
+++ b/ring-client-uwp.vcxproj.filters
@@ -83,15 +83,9 @@
     <ClCompile Include="Conversation.cpp">
       <Filter>Model</Filter>
     </ClCompile>
-    <ClCompile Include="CallsViewModel.cpp">
-      <Filter>ModelViews</Filter>
-    </ClCompile>
     <ClCompile Include="UserPreferences.cpp">
       <Filter>Common</Filter>
     </ClCompile>
-    <ClCompile Include="Call.cpp">
-      <Filter>Model</Filter>
-    </ClCompile>
     <ClCompile Include="SmartPanelItem.cpp">
       <Filter>Controls</Filter>
     </ClCompile>
@@ -143,18 +137,12 @@
     </ClInclude>
     <ClInclude Include="LoadingPage.xaml.h" />
     <ClInclude Include="Wizard.xaml.h" />
-    <ClInclude Include="CallsViewModel.h">
-      <Filter>ModelViews</Filter>
-    </ClInclude>
     <ClInclude Include="Conversation.h">
       <Filter>Model</Filter>
     </ClInclude>
     <ClInclude Include="UserPreferences.h">
       <Filter>Common</Filter>
     </ClInclude>
-    <ClInclude Include="Call.h">
-      <Filter>Model</Filter>
-    </ClInclude>
     <ClInclude Include="SmartPanelItem.h">
       <Filter>Controls</Filter>
     </ClInclude>
@@ -173,6 +161,9 @@
     <ClInclude Include="Video.h">
       <Filter>Media\Video</Filter>
     </ClInclude>
+    <ClInclude Include="Globals.h">
+      <Filter>Common</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <Image Include="Assets\LockScreenLogo.scale-200.png">