diff --git a/ContactsViewModel.cpp b/ContactsViewModel.cpp
index 067f2954f4a52b61ea3c785d9bc3110557422bcd..7fab7433d3c7e24f97a613bcdbe53329e56ff50d 100644
--- a/ContactsViewModel.cpp
+++ b/ContactsViewModel.cpp
@@ -66,6 +66,7 @@ ContactsViewModel::ContactsViewModel()
             saveContactsToFile();
         }
     });
+    RingD::instance->incomingMessage += ref new RingClientUWP::IncomingMessage(this, &RingClientUWP::ViewModel::ContactsViewModel::OnincomingMessage);
 }
 
 Contact^ // refacto : remove "byName"
@@ -167,3 +168,27 @@ ContactsViewModel::Destringify(String^ data)
         }
     }
 }
+
+
+void RingClientUWP::ViewModel::ContactsViewModel::OnincomingMessage(Platform::String ^callId, Platform::String ^from, Platform::String ^payload)
+{
+    auto contact = findContactByName(from);
+
+    /* the contact HAS TO BE already registered */
+    if (contact) {
+        auto item = SmartPanelItemsViewModel::instance->_selectedItem;
+
+        contact->_conversation->addMessage(""/* date not yet used*/, MSG_FROM_CONTACT, payload);
+
+        /* save contacts conversation to disk */
+        contact->saveConversationToFile();
+
+        auto selectedContact = (item) ? item->_contact : nullptr;
+
+        if (contact->ringID_ == from && contact != selectedContact) {
+            contact->_unreadMessages++;
+            /* saveContactsToFile used to save the notification */
+            saveContactsToFile();
+        }
+    }
+}
diff --git a/ContactsViewModel.h b/ContactsViewModel.h
index ab7e56d7d9f2e913a02f9a4180928e95916554c0..b8d720f5892a7fe44c594a89a9a3116c20693947 100644
--- a/ContactsViewModel.h
+++ b/ContactsViewModel.h
@@ -68,6 +68,7 @@ private:
     Contact^ currentItem_;
     Contact^ oldItem_;
 
+    void OnincomingMessage(Platform::String ^callId, Platform::String ^from, Platform::String ^payload);
 };
 }
 }
diff --git a/MessageTextPage.xaml.cpp b/MessageTextPage.xaml.cpp
index aa539a1cfc3fca3f420617ecf69465b550a5f3cc..65e0a68ebf1975c2c0e8e3618db665f5d66b6387 100644
--- a/MessageTextPage.xaml.cpp
+++ b/MessageTextPage.xaml.cpp
@@ -49,6 +49,8 @@ MessageTextPage::MessageTextPage()
     String^ fromRingId, String^ payload) {
         scrollDown();
     });
+    RingD::instance->incomingMessage += ref new RingClientUWP::IncomingMessage(this, &RingClientUWP::Views::MessageTextPage::OnincomingMessage);
+
 }
 
 void
@@ -135,3 +137,9 @@ Object ^ RingClientUWP::Views::BubbleHorizontalAlignement::ConvertBack(Object ^
 
 RingClientUWP::Views::BubbleHorizontalAlignement::BubbleHorizontalAlignement()
 {}
+
+
+void RingClientUWP::Views::MessageTextPage::OnincomingMessage(Platform::String ^callId, Platform::String ^from, Platform::String ^payload)
+{
+    scrollDown();
+}
diff --git a/MessageTextPage.xaml.h b/MessageTextPage.xaml.h
index ce7289cdf003d4c373f75fdea1d586322876ed37..7a7a8284c687b75e45c73c78783846fc2ef40486 100644
--- a/MessageTextPage.xaml.h
+++ b/MessageTextPage.xaml.h
@@ -49,6 +49,7 @@ private:
     void _sendBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _messageTextBox__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
     void sendMessage();
+    void OnincomingMessage(Platform::String ^callId, Platform::String ^from, Platform::String ^payload);
 };
 }
 }
diff --git a/RingD.cpp b/RingD.cpp
index fe284c63d9226590c1bbd4eb736f70c149dffe76..fd8412529fa7699940bd338fa65ffbb0729cae05 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -235,7 +235,6 @@ RingClientUWP::RingD::startDaemon()
                     auto contact = ContactsViewModel::instance->findContactByName(from2);
                     auto item = SmartPanelItemsViewModel::instance->findItem(contact);
                     item->_callId = callId2;
-
                 }));
             }),
             DRing::exportable_callback<DRing::CallSignal::StateChange>([this](
@@ -315,8 +314,7 @@ RingClientUWP::RingD::startDaemon()
                     CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
                         CoreDispatcherPriority::High, ref new DispatchedHandler([=]()
                     {
-                        // DOIT ETRE DIFFEREND.... NE PAS UTILISE accoutId2
-                        //incomingAccountMessage(accountId2, from2, payload);
+                        incomingMessage(callId2, from2, payload);
                         MSG_("message recu :" + i.second);
                     }));
                 }
diff --git a/RingD.h b/RingD.h
index d8991f15137795c4bc805c0c8f8b68bdb78af384..c3a39d339ec162fc33bc8e7fe2615782bcdf35c6 100644
--- a/RingD.h
+++ b/RingD.h
@@ -31,6 +31,7 @@ delegate void IncomingCall(String^ accountId, String^ callId, String^ from);
 delegate void StateChange(String^ callId, CallStatus state, int code);
 delegate void IncomingAccountMessage(String^ accountId, String^ from, String^ payload);
 delegate void CallPlaced(String^ callId);
+delegate void IncomingMessage(String^ callId, String^ from, String^ payload);
 
 
 public ref class RingD sealed
@@ -95,6 +96,7 @@ internal:
     event IncomingCall^ incomingCall;
     event StateChange^ stateChange;
     event IncomingAccountMessage^ incomingAccountMessage;
+    event IncomingMessage^ incomingMessage;
     event CallPlaced^ callPlaced;
 
 private:
diff --git a/VideoPage.xaml.cpp b/VideoPage.xaml.cpp
index f6f5f54e151c99e8462db51d6675682eb467e5ba..90241d550d7708663298d9d38b126da76dbb70ff 100644
--- a/VideoPage.xaml.cpp
+++ b/VideoPage.xaml.cpp
@@ -125,10 +125,7 @@ VideoPage::VideoPage()
         }
     });
 
-    RingD::instance->incomingAccountMessage += ref new IncomingAccountMessage([&](String^ accountId,
-    String^ from, String^ payload) {
-        scrollDown();
-    });
+    RingD::instance->incomingMessage += ref new RingClientUWP::IncomingMessage(this, &RingClientUWP::Views::VideoPage::OnincomingMessage);
 }
 
 void
@@ -333,3 +330,9 @@ VideoPage::WriteFrameAsSoftwareBitmapAsync(String^ id, uint8_t* buf, int width,
         }
     });
 }
+
+
+void RingClientUWP::Views::VideoPage::OnincomingMessage(Platform::String ^callId, Platform::String ^from, Platform::String ^payload)
+{
+    scrollDown();
+}
diff --git a/VideoPage.xaml.h b/VideoPage.xaml.h
index d548f959d56bf488fe9690ac453930d7cf7cc07f..5a52bba0a9f6b9cbf4c2bf875cb99c73ed5fe57f 100644
--- a/VideoPage.xaml.h
+++ b/VideoPage.xaml.h
@@ -115,6 +115,7 @@ private:
     void _videoControl__PointerMoved(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
     void btnAny_entered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
     void btnAny_exited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
+    void OnincomingMessage(Platform::String ^callId, Platform::String ^from, Platform::String ^payload);
 };
 }
 }
\ No newline at end of file