diff --git a/Call.cpp b/Call.cpp
index 24e4353..6b02ec7 100644
--- a/Call.cpp
+++ b/Call.cpp
@@ -53,4 +53,14 @@
         PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName));
 
     }));
-}
\ No newline at end of file
+}
+
+void RingClientUWP::Call::refuse()
+{
+    RingD::instance->refuseIncommingCall(this);
+}
+
+void RingClientUWP::Call::accept()
+{
+    RingD::instance->acceptIncommingCall(this);
+}
diff --git a/Call.h b/Call.h
index aa96993..c0d4fa1 100644
--- a/Call.h
+++ b/Call.h
@@ -43,6 +43,9 @@
     /* properties */
     void NotifyPropertyChanged(String^ propertyName);
 
+internal:
+    void refuse();
+    void accept();
 
 };
 }
diff --git a/CallsViewModel.cpp b/CallsViewModel.cpp
index cf6166f..02a4933 100644
--- a/CallsViewModel.cpp
+++ b/CallsViewModel.cpp
@@ -43,11 +43,11 @@
                 if (state == "OVER") {
                     delete call;
                     call->stateChange("", code);
-                    callStatusUpdated(call);
+                    callStatusUpdated(call); // used ?
                     return;
                 }
                 call->stateChange(state, code);
-                callStatusUpdated(call);
+                callStatusUpdated(call); // same...
                 return;
             }
         }
diff --git a/Contact.h b/Contact.h
index 517d35c..a88d648 100644
--- a/Contact.h
+++ b/Contact.h
@@ -83,6 +83,18 @@
             PropertyChanged(this, ref new PropertyChangedEventArgs("_call"));
         }
     }
+    property Windows::UI::Xaml::GridLength _contactBarHeight
+    {
+        Windows::UI::Xaml::GridLength get()
+        {
+            return contactBarHeight_;
+        }
+        void set(Windows::UI::Xaml::GridLength value)
+        {
+            contactBarHeight_ = value;
+            PropertyChanged(this, ref new PropertyChangedEventArgs("_contactBarHeight"));
+        }
+    }
 
 internal:
     void        saveConversationToFile();
@@ -97,7 +109,7 @@
     Conversation^ conversation_;
     Visibility notificationNewMessage_;
     unsigned int unreadMessages_;
-    Windows::UI::Xaml::GridLength contactBarHeight_;
+    Windows::UI::Xaml::GridLength contactBarHeight_ = 0;
     Call^ call_;
 };
 }
diff --git a/ContactsViewModel.cpp b/ContactsViewModel.cpp
index 68141b5..7ac6dc8 100644
--- a/ContactsViewModel.cpp
+++ b/ContactsViewModel.cpp
@@ -79,6 +79,8 @@
             return;
         }
         contact->_call = call;
+        contact->_contactBarHeight = 50;
+
     });
 
 }
diff --git a/RingD.cpp b/RingD.cpp
index ea6db14..3abac15 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -102,6 +102,7 @@
 void
 RingD::createRINGAccount(String^ alias)
 {
+    // refactoring : create a dedicated class constructor task and removes accountName from RingD
     accountName = Utils::toString(alias);
     tasksList_.push(ref new RingD::Task(Request::AddRingAccount));
 }
@@ -109,10 +110,21 @@
 void
 RingD::createSIPAccount(String^ alias)
 {
+    // refactoring : create a dedicated class constructor task and removes accountName from RingD
     accountName = Utils::toString(alias);
     tasksList_.push(ref new RingD::Task(Request::AddSIPAccount));
 }
 
+void RingClientUWP::RingD::refuseIncommingCall(Call^ call)
+{
+    tasksList_.push(ref new RingD::Task(Request::RefuseIncommingCall, call));
+}
+
+void RingClientUWP::RingD::acceptIncommingCall(Call^ call)
+{
+    tasksList_.push(ref new RingD::Task(Request::AcceptIncommingCall, call));
+}
+
 void
 RingClientUWP::RingD::startDaemon()
 {
@@ -191,13 +203,13 @@
                 }
             }),
             DRing::exportable_callback<DRing::ConfigurationSignal::RegistrationStateChanged>([this](
-            const std::string& account_id, const std::string& state,
-            int detailsCode, const std::string& detailsStr)
+                        const std::string& account_id, const std::string& state,
+                        int detailsCode, const std::string& detailsStr)
             {
                 MSG_("<RegistrationStateChanged>: ID = " + account_id + "state = " + state);
                 if (state == DRing::Account::States::UNREGISTERED) {
                     CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,
-                        ref new DispatchedHandler([=]() {
+                    ref new DispatchedHandler([=]() {
                         reloadAccountList();
                     }));
                 }
@@ -228,8 +240,7 @@
         registerCallHandlers(getAppPathHandler);
 
         DRing::init(static_cast<DRing::InitFlag>(DRing::DRING_FLAG_CONSOLE_LOG |
-                    DRing::DRING_FLAG_DEBUG |
-                    DRing::DRING_FLAG_AUTOANSWER));
+                    DRing::DRING_FLAG_DEBUG));
 
         if (!DRing::start()) {
             ERR_("\ndaemon didn't start.\n");
@@ -267,7 +278,8 @@
 {
     for (int i = 0; i < tasksList_.size(); i++) {
         auto task = tasksList_.front();
-        switch (task->request) {
+        auto request = dynamic_cast<Task^>(task)->request;
+        switch (request) {
         case Request::None:
             break;
         case Request::AddRingAccount:
@@ -286,6 +298,20 @@
             DRing::addAccount(sipAccountDetails);
         }
         break;
+        case Request::RefuseIncommingCall:
+        {
+            auto callId = task->_call->callId;
+            auto callId2 = Utils::toString(callId);
+            DRing::refuse(callId2);
+        }
+        break;
+        case Request::AcceptIncommingCall:
+        {
+            auto callId = task->_call->callId;
+            auto callId2 = Utils::toString(callId);
+            DRing::accept(callId2);
+        }
+        break;
         default:
             break;
         }
diff --git a/RingD.h b/RingD.h
index 4026c54..ceff044 100644
--- a/RingD.h
+++ b/RingD.h
@@ -58,6 +58,8 @@
     void sendAccountTextMessage(String^ message);
     void createRINGAccount(String^ alias);
     void createSIPAccount(String^ alias);
+    void refuseIncommingCall(Call^ call);
+    void acceptIncommingCall(Call^ call);
 
     /* TODO : move members */
     bool hasConfig;
@@ -73,14 +75,23 @@
     enum class Request {
         None,
         AddRingAccount,
-        AddSIPAccount
+        AddSIPAccount,
+        RefuseIncommingCall,
+        AcceptIncommingCall
     };
     ref class Task
     {
     internal:
-        Task(Request r) { request = r; }
+        Task(Request r) {
+            request = r;
+        }
+        Task(Request r, Call^ c) {
+            request = r;
+            _call = c;
+        }
     public:
         property Request request;
+        property Call^ _call;
     };
 
     /* functions */
diff --git a/SmartPanel.xaml b/SmartPanel.xaml
index d113973..65d0543 100644
--- a/SmartPanel.xaml
+++ b/SmartPanel.xaml
@@ -32,7 +32,7 @@
                     <RowDefinition Height="60"/>
                     <!-- use the height of _contactBar_ to make it visible or collapsed. -->
                     <RowDefinition x:Name="_contactBar_"
-                                   Height="0"/>
+                                   Height="{x:Bind _contactBarHeight, Mode=OneWay}"/>
                 </Grid.RowDefinitions>
                 <Grid Grid.Row="0">
                     <Grid.ColumnDefinitions>
@@ -100,10 +100,12 @@
                                 Grid.Row="0"
                                 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"/>
diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp
index 2742708..8ee8d73 100644
--- a/SmartPanel.xaml.cpp
+++ b/SmartPanel.xaml.cpp
@@ -34,6 +34,10 @@
 using namespace Concurrency;
 using namespace Windows::Foundation;
 
+using namespace Windows::ApplicationModel::Core;
+using namespace Windows::Storage;
+using namespace Windows::UI::Core;
+
 SmartPanel::SmartPanel()
 {
     InitializeComponent();
@@ -138,22 +142,22 @@
     switch (_accountTypeComboBox_->SelectedIndex)
     {
     case 0:
-        {
-            RingD::instance->createRINGAccount(_aliasTextBox_->Text);
-            _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-            _accountsMenuButton__Checked(nullptr, nullptr);
-            break;
-        }
+    {
+        RingD::instance->createRINGAccount(_aliasTextBox_->Text);
+        _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+        _accountsMenuButton__Checked(nullptr, nullptr);
         break;
+    }
+    break;
     case 1:
-        {
-            RingD::instance->createSIPAccount(_aliasTextBox_->Text);
-            _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-            _accountsMenuButton__Checked(nullptr, nullptr);
-            break;
-        }
-        default:
-            break;
+    {
+        RingD::instance->createSIPAccount(_aliasTextBox_->Text);
+        _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+        _accountsMenuButton__Checked(nullptr, nullptr);
+        break;
+    }
+    default:
+        break;
     }
 }
 
@@ -189,3 +193,25 @@
         _ringTxtBx_->Text = "";
     }
 }
+
+
+void RingClientUWP::Views::SmartPanel::_rejectIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    auto button = dynamic_cast<Button^>(e->OriginalSource);
+    auto contact = dynamic_cast<Contact^>(button->DataContext);
+    auto call = contact->_call;
+
+    call->refuse();
+    contact->_contactBarHeight = 0;
+}
+
+
+void RingClientUWP::Views::SmartPanel::_acceptIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    auto button = dynamic_cast<Button^>(e->OriginalSource);
+    auto contact = dynamic_cast<Contact^>(button->DataContext);
+    auto call = contact->_call;
+
+    call->accept();
+    contact->_contactBarHeight = 0;
+}
diff --git a/SmartPanel.xaml.h b/SmartPanel.xaml.h
index 29e6a56..1b2f63f 100644
--- a/SmartPanel.xaml.h
+++ b/SmartPanel.xaml.h
@@ -53,6 +53,8 @@
     void _smartList__SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e);
     void _accountList__SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e);
     void _ringTxtBx__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e);
+    void _rejectIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _acceptIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
 };
 }
 }
\ No newline at end of file
