diff --git a/Account.h b/Account.h
index ac6b70ba62422a224c0baede3a34e114e2c8fed3..6f11812af5717d6c90d15b1468e6f9df3a236af3 100644
--- a/Account.h
+++ b/Account.h
@@ -34,7 +34,7 @@ public:
 
     property String^ name_;
     property String^ ringID_;
-    property String^ accountType_;
+    property String^ accountType_; // refacto : create a enum accountType
     property String^ accountID_;
     property String^ _deviceId;
     property Windows::Foundation::Collections::IVector<String^>^ _devicesIdList {
diff --git a/AccountsViewModel.cpp b/AccountsViewModel.cpp
index d07f543c01f1477aa70bad1b328b770c47f2a973..655c4e4c1f90c5bb12960ee96500aaae6ced77d4 100644
--- a/AccountsViewModel.cpp
+++ b/AccountsViewModel.cpp
@@ -31,6 +31,7 @@ AccountsViewModel::AccountsViewModel()
 void
 AccountsViewModel::add(std::string& name, std::string& ringID, std::string& accountType, std::string& accountID, std::string& deviceId)
 {
+
     accountsList_->Append(ref new Account(
                               Utils::toPlatformString(name),
                               Utils::toPlatformString(ringID),
diff --git a/RingD.cpp b/RingD.cpp
index 73e96c714f5245ed9af2370d6e7123ffea46b5a8..5d9cf3f6db54ad4dc2ba02ddb0bb83e78dcd0883 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -57,12 +57,12 @@ RingClientUWP::RingD::reloadAccountList()
         if(!ringID.empty())
             ringID = ringID.substr(5);
 
-        RingClientUWP::ViewModel::AccountsViewModel::instance->add(
-            accountDetails.find(DRing::Account::ConfProperties::ALIAS)->second,             // alias
-            ringID,                                                                         // ringid
-            accountDetails.find(DRing::Account::ConfProperties::TYPE)->second,              // account type
-            *rit,                                                                           // account id
-            accountDetails.find(DRing::Account::ConfProperties::RING_DEVICE_ID)->second);   // device id
+        auto alias = accountDetails.find(DRing::Account::ConfProperties::ALIAS)->second;
+        auto type = accountDetails.find(DRing::Account::ConfProperties::TYPE)->second;
+        auto deviceId = (type == "SIP")? std::string() : accountDetails.find(DRing::Account::ConfProperties::RING_DEVICE_ID)->second;
+
+        RingClientUWP::ViewModel::AccountsViewModel::instance->add(alias, ringID, type, *rit /*account id*/, deviceId);
+
     }
 
     // load user preferences
@@ -212,6 +212,15 @@ void RingClientUWP::RingD::askToRefreshKnownDevices(String^ accountId)
     tasksList_.push(task);
 }
 
+void RingClientUWP::RingD::askToExportOnRing(String ^ accountId, String ^ password)
+{
+    auto task = ref new RingD::Task(Request::ExportOnRing);
+    task->_accountId = accountId;
+    task->_password = password;
+
+    tasksList_.push(task);
+}
+
 void
 RingClientUWP::RingD::startDaemon()
 {
@@ -369,7 +378,16 @@ RingClientUWP::RingD::startDaemon()
             {
                 dispatcher->RunAsync(CoreDispatcherPriority::High,
                 ref new DispatchedHandler([=]() {
-                    RingDebug::instance->print("toto");
+                    RingDebug::instance->print("KnownDevicesChanged ---> C PAS FINI");
+                }));
+            }),
+            DRing::exportable_callback<DRing::ConfigurationSignal::ExportOnRingEnded>([&](const std::string& accountId, int status, const std::string& pin)
+            {
+                auto accountId2 = Utils::toPlatformString(accountId);
+                auto pin2 = (pin.empty()) ? "Error Bad Password" : "Your generated pin :" + Utils::toPlatformString(pin);
+                dispatcher->RunAsync(CoreDispatcherPriority::High,
+                ref new DispatchedHandler([=]() {
+                    exportOnRingEnded(accountId2, pin2);
                 }));
             })
 
@@ -584,8 +602,25 @@ RingD::dequeueTasks()
             auto accountId2 = Utils::toString(accountId);
 
             auto devicesList = DRing::getKnownRingDevices(accountId2);
+            if (devicesList.empty())
+                break;
+
             auto devicesList2 = translateKnownRingDevices(devicesList);
 
+            CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,
+            ref new DispatchedHandler([=]() {
+                devicesListRefreshed(devicesList2);
+            }));
+        }
+        case Request::ExportOnRing:
+        {
+            auto accountId = task->_accountId;
+            auto password = task->_password;
+
+            auto accountId2 = Utils::toString(accountId);
+            auto password2 = Utils::toString(password);
+
+            DRing::exportOnRing(accountId2, password2);
         }
         default:
             break;
@@ -621,8 +656,11 @@ Vector<String^>^ RingClientUWP::RingD::translateKnownRingDevices(const std::map<
     for (auto i : devices) {
         MSG_("devices.first = " + i.first);
         MSG_("devices.second = " + i.second);
+        auto deviceName = Utils::toPlatformString(i.second);
+        devicesList->Append(deviceName);
     }
 
 
+
     return devicesList;
 }
diff --git a/RingD.h b/RingD.h
index ec32c9156b92a7ea21d743582567e59d3da549db..bcf6cdc123f5e453d7a5c634319359ba0de4769b 100644
--- a/RingD.h
+++ b/RingD.h
@@ -32,7 +32,8 @@ 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^ payload);
-//delegate void DevicesListRefreshed()
+delegate void DevicesListRefreshed(Vector<String^>^ devicesList);
+delegate void ExportOnRingEnded(String^ accountId, String^ pin);
 
 
 public ref class RingD sealed
@@ -90,6 +91,7 @@ internal:
 
     void hangUpCall2(String^ callId);
     void askToRefreshKnownDevices(String^ accountId);
+    void askToExportOnRing(String^ accountId, String^ password);
 
     /* TODO : move members */
     ///bool hasConfig; // replaced by startingStatus
@@ -101,6 +103,8 @@ internal:
     event IncomingAccountMessage^ incomingAccountMessage;
     event IncomingMessage^ incomingMessage;
     event CallPlaced^ callPlaced;
+    event DevicesListRefreshed^ devicesListRefreshed;
+    event ExportOnRingEnded^ exportOnRingEnded;
 
 private:
     /* sub classes */
@@ -113,7 +117,8 @@ private:
         CancelOutGoingCall,
         HangUpCall,
         RegisterDevice,
-        GetKnownDevices
+        GetKnownDevices,
+        ExportOnRing
     };
 
 
diff --git a/SmartPanel.xaml b/SmartPanel.xaml
index d4dd0c96b63f688696ef78d762cb01a64efe3082..9f93ac91c25ae386852d06793535c053963cc4bd 100644
--- a/SmartPanel.xaml
+++ b/SmartPanel.xaml
@@ -383,17 +383,20 @@
                                       Checked="_accountsMenuButton__Checked"
                                       Unchecked="_accountsMenuButton__Unchecked"
                                       Style="{StaticResource ToggleButtonStyle1}"/>
+                        <!-- _shareMenuButton_ collapsed on purpose -->
                         <ToggleButton x:Name="_shareMenuButton_"
                                       VerticalAlignment="Bottom"
+                                      Visibility="Collapsed"
                                       Content="&#xE72D;"
                                       Checked="_shareMenuButton__Checked"
                                       Unchecked="_shareMenuButton__Unchecked"
                                       Style="{StaticResource ToggleButtonStyle1}"/>
                         <ToggleButton x:Name="_devicesMenuButton_"
                                       VerticalAlignment="Bottom"
-                                      Content="devices;"
+                                      Content="&#xE836;"
                                       Checked="_devicesMenuButton__Checked"
-                                      Unchecked="_devicesMenuButton__Unchecked"/>
+                                      Unchecked="_devicesMenuButton__Unchecked"
+                                      Style="{StaticResource ToggleButtonStyle1}"/>
                     </StackPanel>
                 </StackPanel>
                 <ToggleButton x:Name="_settingsTBtn_"
@@ -561,6 +564,75 @@
                         Click="_addDevice__Click"
                         Style="{StaticResource ButtonStyle6}"/>
             </Grid>
+            <!-- add device (pin generator) menu. -->
+            <Grid x:Name="_addingDeviceGrid_"
+                  Grid.Row="2"
+                  Visibility="Collapsed"
+                  Background="LightBlue">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="30"/>
+                </Grid.RowDefinitions>
+                <Grid Background="#FFE4F1F9">
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="auto"/>
+                        <RowDefinition Height="auto"/>
+                        <RowDefinition Height="*"/>
+                    </Grid.RowDefinitions>
+                    <TextBlock VerticalAlignment="Center"
+                                       Text="PIN generator"
+                               HorizontalAlignment="Center"
+                               Grid.Row="0"
+                                       Margin="10,10,0,10"/>
+                    <PasswordBox x:Name="_passwordForPinGenerator_"
+                                 Margin="10"
+                                 Grid.Row="1"
+                                 PlaceholderText="Enter your password"/>
+                </Grid>
+                <!-- buttons yes/no to generate a PIN. -->
+                <Grid Grid.Row="1">
+                    <StackPanel Orientation="Horizontal"
+                                HorizontalAlignment="Center">
+                        <Button x:Name="_pinGeneratorYes_"
+                                Grid.Row="1"
+                                VerticalAlignment="Center"
+                                HorizontalAlignment="Center"
+                                Content="&#xE081;"
+                                Click="_pinGeneratorYes__Click"
+                                Style="{StaticResource ButtonStyle5}"/>
+                        <Button x:Name="_pinGeneratorNo_"
+                                Grid.Row="1"
+                                VerticalAlignment="Center"
+                                HorizontalAlignment="Center"
+                                Content="&#xE106;"
+                                Click="_pinGeneratorNo__Click"
+                                Style="{StaticResource ButtonStyle5}"/>
+                    </StackPanel>
+                </Grid>
+            </Grid>
+            <!-- waiting for a PIN. -->
+            <Grid x:Name="_waitingForPin_"
+                Grid.Row="2"
+                Visibility="Collapsed"
+                Background="LightBlue">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="30"/>
+                </Grid.RowDefinitions>
+                <Grid Background="#FFE4F1F9">
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="auto"/>
+                        <RowDefinition Height="*"/>
+                    </Grid.RowDefinitions>
+                    <TextBlock x:Name="_waitingAndResult_"
+                               VerticalAlignment="Center"
+                               Text="Exporting account on the Ring..."
+                               HorizontalAlignment="Center"
+                               Grid.Row="0"
+                               Margin="10,10,0,10"/>
+                </Grid>
+            </Grid>
         </Grid>
         <!-- smartList and settings. -->
         <Grid Grid.Row="1">
diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp
index 1e34ae6a08cf57cb667b9d2a6359e8876237a746..8f2f65f15395d72125487aa77e812fc66572845d 100644
--- a/SmartPanel.xaml.cpp
+++ b/SmartPanel.xaml.cpp
@@ -112,6 +112,7 @@ SmartPanel::SmartPanel()
         }
 
     });
+    RingD::instance->devicesListRefreshed += ref new RingClientUWP::DevicesListRefreshed(this, &RingClientUWP::Views::SmartPanel::OndevicesListRefreshed);
 
 
     ContactsViewModel::instance->contactAdded += ref new ContactAdded([this](Contact^ contact) {
@@ -120,6 +121,8 @@ SmartPanel::SmartPanel()
         SmartPanelItemsViewModel::instance->itemsList->Append(smartPanelItem);
     });
 
+    RingD::instance->exportOnRingEnded += ref new RingClientUWP::ExportOnRingEnded(this, &RingClientUWP::Views::SmartPanel::OnexportOnRingEnded);
+
 
 
 }
@@ -137,9 +140,14 @@ RingClientUWP::Views::SmartPanel::updatePageContent()
     Configuration::UserPreferences::instance->save();
 
     _selectedAccountName_->Text = accountId;
-    _devicesIdList_->ItemsSource = account->_devicesIdList;
+///    _devicesIdList_->ItemsSource = account->_devicesIdList;
     _deviceId_->Text = account->_deviceId; /* this is the current device ...
     ... in the way to get all associated devices, we have to querry the daemon : */
+
+    _devicesMenuButton_->Visibility = (account->accountType_ == "RING")
+                                      ? Windows::UI::Xaml::Visibility::Visible
+                                      : Windows::UI::Xaml::Visibility::Collapsed;
+
     RingD::instance->askToRefreshKnownDevices(accountId);
 
 }
@@ -147,8 +155,11 @@ RingClientUWP::Views::SmartPanel::updatePageContent()
 void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Checked(Object^ sender, RoutedEventArgs^ e)
 {
     _shareMenuButton_->IsChecked = false;
+    _devicesMenuButton_->IsChecked = false;
     _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
     _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
 }
 
 void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Unchecked(Object^ sender, RoutedEventArgs^ e)
@@ -193,12 +204,19 @@ void RingClientUWP::Views::SmartPanel::setMode(RingClientUWP::Views::SmartPanel:
 void RingClientUWP::Views::SmartPanel::_shareMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+    _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _accountsMenuButton_->IsChecked = false;
+    _devicesMenuButton_->IsChecked = false;
 }
 
 void RingClientUWP::Views::SmartPanel::_shareMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
 }
 
 void RingClientUWP::Views::SmartPanel::_addAccountBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
@@ -479,16 +497,57 @@ RingClientUWP::Views::NewMessageBubleNotification::NewMessageBubleNotification()
 void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
     _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
 }
 
 
 void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
+    _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+    _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _accountsMenuButton_->IsChecked = false;
+    _shareMenuButton_->IsChecked = false;
 }
 
 
 void RingClientUWP::Views::SmartPanel::_addDevice__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
+    _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+}
+
+
+void RingClientUWP::Views::SmartPanel::OndevicesListRefreshed(Platform::Collections::Vector<Platform::String ^, std::equal_to<Platform::String ^>, true> ^devicesList)
+{
+    AccountsViewModel::instance->selectedAccount->_devicesIdList = devicesList;
+    _devicesIdList_->ItemsSource = devicesList;
+}
+
+
+void RingClientUWP::Views::SmartPanel::_pinGeneratorYes__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _waitingForPin_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+
+    auto accountId = AccountsViewModel::instance->selectedAccount->accountID_;
+    auto password = _passwordForPinGenerator_->Password;
+
+    RingD::instance->askToExportOnRing(accountId, password);
+}
+
+
+void RingClientUWP::Views::SmartPanel::_pinGeneratorNo__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+    _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _devicesMenuButton_->IsChecked = false;
+}
 
+
+void RingClientUWP::Views::SmartPanel::OnexportOnRingEnded(Platform::String ^accountId, Platform::String ^pin)
+{
+    MSG_("XXXX");
+    _waitingAndResult_->Text = pin;
 }
diff --git a/SmartPanel.xaml.h b/SmartPanel.xaml.h
index 64567ad5acb21c6612b966767724a82115401e7e..8d2872fd5bdd241867c985b9d343506bd4d746c7 100644
--- a/SmartPanel.xaml.h
+++ b/SmartPanel.xaml.h
@@ -98,6 +98,10 @@ private:
     void _devicesMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _devicesMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _addDevice__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void OndevicesListRefreshed(Platform::Collections::Vector<Platform::String ^, std::equal_to<Platform::String ^>, true> ^devicesList);
+    void _pinGeneratorYes__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void _pinGeneratorNo__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+    void OnexportOnRingEnded(Platform::String ^accountId, Platform::String ^pin);
 };
 }
 }
\ No newline at end of file