diff --git a/build-daemon.sh b/build-daemon.sh
index 8a38aa3656e62cca626ff383994ee636db71873a..203c4503bf3d01a57b57608171a6e2b634536b1f 100755
--- a/build-daemon.sh
+++ b/build-daemon.sh
@@ -85,7 +85,7 @@ make .gas
 # Generate JNI interface
 JNIDIR=$DAEMON_DIR/bin/jni
 cd $JNIDIR
-PACKAGEDIR=$ANDROID_APP_DIR/libringclient/src/main/java/cx/ring/daemon $JNIDIR/make-swig.sh
+PACKAGEDIR=$ANDROID_APP_DIR/libringclient/src/main/java/net/jami/daemon $JNIDIR/make-swig.sh
 
 # Setup cross-compilation build environemnt
 export AR=$TOOLCHAIN/bin/llvm-ar
diff --git a/ring-android/.gitignore b/ring-android/.gitignore
index 783ebd4573b5495dc429bebc40dfe2056480b2d1..379dc5c37f7a0c0f6a5f455a60d264d1188adf1f 100644
--- a/ring-android/.gitignore
+++ b/ring-android/.gitignore
@@ -29,6 +29,6 @@ tests/bin
 /app/build/
 /androidtv/build/
 /libringclient/build/
-/libringclient/src/main/java/cx/ring/daemon/*
+/libringclient/src/main/java/net/jami/daemon/*
 /build/
 **/google-services.json
diff --git a/ring-android/app/proguard-rules.pro b/ring-android/app/proguard-rules.pro
index 4d0ed664e3882573795f4b7349337bf30d9e43f3..683fa81f7bf0499fe22f73c33524eba0ddd1ae6e 100644
--- a/ring-android/app/proguard-rules.pro
+++ b/ring-android/app/proguard-rules.pro
@@ -15,8 +15,8 @@
     public static final ** CREATOR;
 }
 
--keep,includedescriptorclasses class cx.ring.** { *; }
--keepclassmembers class cx.ring.** { *; }
+-keep,includedescriptorclasses class net.jami.daemon.** { *; }
+-keepclassmembers class net.jami.daemon.** { *; }
 
 # ORMLite
 -keep class com.j256.**
diff --git a/ring-android/app/src/main/java/cx/ring/about/AboutFragment.java b/ring-android/app/src/main/java/cx/ring/about/AboutFragment.java
index f85460b6d468431920557cbe8fa43c8a9672162a..776411a6768167dc7e2e85eb27d0a3c58c341e4e 100644
--- a/ring-android/app/src/main/java/cx/ring/about/AboutFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/about/AboutFragment.java
@@ -39,7 +39,7 @@ import cx.ring.R;
 import cx.ring.client.HomeActivity;
 import cx.ring.databinding.FragAboutBinding;
 import cx.ring.mvp.BaseSupportFragment;
-import cx.ring.mvp.RootPresenter;
+import net.jami.mvp.RootPresenter;
 
 public class AboutFragment extends BaseSupportFragment<RootPresenter> {
 
diff --git a/ring-android/app/src/main/java/cx/ring/account/AccountCreationModelImpl.java b/ring-android/app/src/main/java/cx/ring/account/AccountCreationModelImpl.java
index 4451e7fd0e7f778468184fca943b04cdce01994c..8a755f302b09a24ac548874c60913ed0bf8ca91e 100644
--- a/ring-android/app/src/main/java/cx/ring/account/AccountCreationModelImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/account/AccountCreationModelImpl.java
@@ -23,7 +23,7 @@ import android.graphics.Bitmap;
 
 import java.io.Serializable;
 
-import cx.ring.mvp.AccountCreationModel;
+import net.jami.mvp.AccountCreationModel;
 import cx.ring.utils.BitmapUtils;
 import ezvcard.VCard;
 import ezvcard.property.FormattedName;
diff --git a/ring-android/app/src/main/java/cx/ring/account/AccountEditionPresenter.java b/ring-android/app/src/main/java/cx/ring/account/AccountEditionPresenter.java
index 75e248d71f49e10e0ae630fd6206c3834545b482..1e7710df6438de26d9001c0c1db5172b3e1be83e 100644
--- a/ring-android/app/src/main/java/cx/ring/account/AccountEditionPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/account/AccountEditionPresenter.java
@@ -22,9 +22,9 @@ package cx.ring.account;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.model.Account;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
+import net.jami.model.Account;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
 import io.reactivex.Scheduler;
 
 public class AccountEditionPresenter extends RootPresenter<AccountEditionView> {
diff --git a/ring-android/app/src/main/java/cx/ring/account/AccountWizardActivity.java b/ring-android/app/src/main/java/cx/ring/account/AccountWizardActivity.java
index 472515850d941906118ce8b187bef3c707b67135..200c66da982bc3b450647c53ce8f232be560b8b5 100644
--- a/ring-android/app/src/main/java/cx/ring/account/AccountWizardActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/account/AccountWizardActivity.java
@@ -45,11 +45,14 @@ import cx.ring.application.JamiApplication;
 import cx.ring.client.HomeActivity;
 import cx.ring.fragments.AccountMigrationFragment;
 import cx.ring.fragments.SIPAccountCreationFragment;
-import cx.ring.model.Account;
-import cx.ring.model.AccountConfig;
+
+import net.jami.account.AccountWizardPresenter;
+import net.jami.account.AccountWizardView;
+import net.jami.model.Account;
+import net.jami.model.AccountConfig;
 import cx.ring.mvp.BaseActivity;
-import cx.ring.mvp.AccountCreationModel;
-import cx.ring.utils.VCardUtils;
+import net.jami.mvp.AccountCreationModel;
+import net.jami.utils.VCardUtils;
 import ezvcard.VCard;
 import io.reactivex.Single;
 import io.reactivex.schedulers.Schedulers;
diff --git a/ring-android/app/src/main/java/cx/ring/account/HomeAccountCreationFragment.java b/ring-android/app/src/main/java/cx/ring/account/HomeAccountCreationFragment.java
index 12435750b91ce328efbe914c0638f7f10dcdcdea..18104fe8b78b8c701c2d85e141691d25e2666ea0 100644
--- a/ring-android/app/src/main/java/cx/ring/account/HomeAccountCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/account/HomeAccountCreationFragment.java
@@ -33,6 +33,9 @@ import androidx.fragment.app.Fragment;
 
 import com.google.android.material.snackbar.Snackbar;
 
+import net.jami.account.HomeAccountCreationPresenter;
+import net.jami.account.HomeAccountCreationView;
+
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragAccHomeCreateBinding;
diff --git a/ring-android/app/src/main/java/cx/ring/account/JamiAccountConnectFragment.java b/ring-android/app/src/main/java/cx/ring/account/JamiAccountConnectFragment.java
index 11c73e67209f1359c6c6d8fcb2c52b4047c74045..b2a2d7e12368563ae1e837ba5e786fb4458195ee 100644
--- a/ring-android/app/src/main/java/cx/ring/account/JamiAccountConnectFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/account/JamiAccountConnectFragment.java
@@ -33,7 +33,10 @@ import androidx.annotation.Nullable;
 
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragAccJamiConnectBinding;
-import cx.ring.mvp.AccountCreationModel;
+
+import net.jami.account.JamiAccountConnectPresenter;
+import net.jami.account.JamiConnectAccountView;
+import net.jami.mvp.AccountCreationModel;
 import cx.ring.mvp.BaseSupportFragment;
 
 public class JamiAccountConnectFragment extends BaseSupportFragment<JamiAccountConnectPresenter> implements JamiConnectAccountView {
@@ -63,7 +66,7 @@ public class JamiAccountConnectFragment extends BaseSupportFragment<JamiAccountC
     }
 
     @Override
-    protected void initPresenter(JamiAccountConnectPresenter presenter) {
+    protected void initPresenter(net.jami.account.JamiAccountConnectPresenter presenter) {
         presenter.init(model);
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/account/JamiAccountCreationFragment.java b/ring-android/app/src/main/java/cx/ring/account/JamiAccountCreationFragment.java
index 2a0294c987b99e446b6cf1d260752969cbaa4ab6..aaffc3c52bad9f81d8858a470c0145bc8c752dd3 100644
--- a/ring-android/app/src/main/java/cx/ring/account/JamiAccountCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/account/JamiAccountCreationFragment.java
@@ -36,7 +36,8 @@ import androidx.fragment.app.FragmentStatePagerAdapter;
 import androidx.viewpager.widget.ViewPager;
 
 import cx.ring.databinding.FragAccJamiCreateBinding;
-import cx.ring.mvp.AccountCreationModel;
+import net.jami.mvp.AccountCreationModel;
+
 import cx.ring.views.WizardViewPager;
 
 public class JamiAccountCreationFragment extends Fragment {
diff --git a/ring-android/app/src/main/java/cx/ring/account/JamiAccountPasswordFragment.java b/ring-android/app/src/main/java/cx/ring/account/JamiAccountPasswordFragment.java
index 6db6ca0207f8ddedec0740cb8023722bb14cc594..64efb70acc6dd8c1c8160b78c06e8103c76738eb 100644
--- a/ring-android/app/src/main/java/cx/ring/account/JamiAccountPasswordFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/account/JamiAccountPasswordFragment.java
@@ -36,7 +36,10 @@ import androidx.annotation.Nullable;
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragAccJamiPasswordBinding;
-import cx.ring.mvp.AccountCreationModel;
+
+import net.jami.account.JamiAccountCreationPresenter;
+import net.jami.account.JamiAccountCreationView;
+import net.jami.mvp.AccountCreationModel;
 import cx.ring.mvp.BaseSupportFragment;
 
 public class JamiAccountPasswordFragment extends BaseSupportFragment<JamiAccountCreationPresenter>
diff --git a/ring-android/app/src/main/java/cx/ring/account/JamiAccountSummaryFragment.java b/ring-android/app/src/main/java/cx/ring/account/JamiAccountSummaryFragment.java
index cfcbeda721c11bd06eba1964c1e0a6eb2cd9e9af..9b2c030b09e52636b6bfca255f01cbbebed668f6 100644
--- a/ring-android/app/src/main/java/cx/ring/account/JamiAccountSummaryFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/account/JamiAccountSummaryFragment.java
@@ -71,14 +71,17 @@ import cx.ring.fragments.GeneralAccountFragment;
 import cx.ring.fragments.LinkDeviceFragment;
 import cx.ring.fragments.MediaPreferenceFragment;
 import cx.ring.fragments.QRCodeFragment;
-import cx.ring.model.Account;
+
+import net.jami.account.JamiAccountSummaryPresenter;
+import net.jami.account.JamiAccountSummaryView;
+import net.jami.model.Account;
 import cx.ring.mvp.BaseSupportFragment;
 import cx.ring.settings.AccountFragment;
 import cx.ring.settings.SettingsFragment;
 import cx.ring.utils.AndroidFileUtils;
 import cx.ring.utils.BitmapUtils;
 import cx.ring.utils.ContentUriHandler;
-import cx.ring.utils.StringUtils;
+import net.jami.utils.StringUtils;
 import cx.ring.views.AvatarDrawable;
 import cx.ring.views.SwitchButton;
 import io.reactivex.Single;
diff --git a/ring-android/app/src/main/java/cx/ring/account/JamiAccountUsernameFragment.java b/ring-android/app/src/main/java/cx/ring/account/JamiAccountUsernameFragment.java
index bbd8b045d082e7f4e716555269581ab0be37a645..56aefb57e94fe9c66b2ef02d76a7c06fcf129cdc 100644
--- a/ring-android/app/src/main/java/cx/ring/account/JamiAccountUsernameFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/account/JamiAccountUsernameFragment.java
@@ -21,7 +21,6 @@ package cx.ring.account;
 
 import android.app.Activity;
 import android.content.Context;
-import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.text.Editable;
 import android.text.InputFilter;
@@ -42,7 +41,10 @@ import com.google.android.material.textfield.TextInputLayout;
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragAccJamiUsernameBinding;
-import cx.ring.mvp.AccountCreationModel;
+
+import net.jami.account.JamiAccountCreationPresenter;
+import net.jami.account.JamiAccountCreationView;
+import net.jami.mvp.AccountCreationModel;
 import cx.ring.mvp.BaseSupportFragment;
 import cx.ring.utils.RegisteredNameFilter;
 
diff --git a/ring-android/app/src/main/java/cx/ring/account/JamiLinkAccountFragment.java b/ring-android/app/src/main/java/cx/ring/account/JamiLinkAccountFragment.java
index f983c22c099947bcb61a37cb80ae966f7842f5c4..20f79f4ce949ab0466e27a167152e458dd2535ae 100644
--- a/ring-android/app/src/main/java/cx/ring/account/JamiLinkAccountFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/account/JamiLinkAccountFragment.java
@@ -19,16 +19,12 @@
  */
 package cx.ring.account;
 
-import android.app.Activity;
 import android.content.Context;
 import android.os.Bundle;
-import android.text.Editable;
-import android.text.TextWatcher;
 import android.util.SparseArray;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.inputmethod.EditorInfo;
 
 import androidx.activity.OnBackPressedCallback;
 import androidx.annotation.NonNull;
@@ -38,11 +34,9 @@ import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentStatePagerAdapter;
 import androidx.viewpager.widget.ViewPager;
 
-import cx.ring.R;
-import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragAccJamiLinkBinding;
 import cx.ring.mvp.BaseSupportFragment;
-import cx.ring.mvp.AccountCreationModel;
+import net.jami.mvp.AccountCreationModel;
 
 public class JamiLinkAccountFragment extends BaseSupportFragment {
 
diff --git a/ring-android/app/src/main/java/cx/ring/account/JamiLinkAccountPasswordFragment.java b/ring-android/app/src/main/java/cx/ring/account/JamiLinkAccountPasswordFragment.java
index 1c614317d58e652b2337a2cd8801e8951828e8ff..57552e6946e5b8b38d647e473690821782a49030 100644
--- a/ring-android/app/src/main/java/cx/ring/account/JamiLinkAccountPasswordFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/account/JamiLinkAccountPasswordFragment.java
@@ -36,7 +36,10 @@ import androidx.annotation.Nullable;
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragAccJamiLinkPasswordBinding;
-import cx.ring.mvp.AccountCreationModel;
+
+import net.jami.account.JamiLinkAccountPresenter;
+import net.jami.account.JamiLinkAccountView;
+import net.jami.mvp.AccountCreationModel;
 import cx.ring.mvp.BaseSupportFragment;
 
 public class JamiLinkAccountPasswordFragment extends BaseSupportFragment<JamiLinkAccountPresenter>
@@ -105,7 +108,7 @@ public class JamiLinkAccountPasswordFragment extends BaseSupportFragment<JamiLin
     }
 
     @Override
-    protected void initPresenter(JamiLinkAccountPresenter presenter) {
+    protected void initPresenter(net.jami.account.JamiLinkAccountPresenter presenter) {
         presenter.init(model);
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/account/ProfileCreationFragment.java b/ring-android/app/src/main/java/cx/ring/account/ProfileCreationFragment.java
index 9dd2a4979df3da37342b5c5ca3bcbe5e901f42fd..0632600293a30570a3838f43f48e78ede6901aec 100644
--- a/ring-android/app/src/main/java/cx/ring/account/ProfileCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/account/ProfileCreationFragment.java
@@ -47,8 +47,11 @@ import java.io.IOException;
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragAccProfileCreateBinding;
-import cx.ring.model.Account;
-import cx.ring.mvp.AccountCreationModel;
+
+import net.jami.account.ProfileCreationPresenter;
+import net.jami.account.ProfileCreationView;
+import net.jami.model.Account;
+import net.jami.mvp.AccountCreationModel;
 import cx.ring.mvp.BaseSupportFragment;
 import cx.ring.utils.AndroidFileUtils;
 import cx.ring.utils.ContentUriHandler;
diff --git a/ring-android/app/src/main/java/cx/ring/account/RegisterNameDialog.java b/ring-android/app/src/main/java/cx/ring/account/RegisterNameDialog.java
index 178e5fddc30cb657f3886359251964a05de33e99..947cd827c1294eb68e9102a066fdf99d65237e8e 100644
--- a/ring-android/app/src/main/java/cx/ring/account/RegisterNameDialog.java
+++ b/ring-android/app/src/main/java/cx/ring/account/RegisterNameDialog.java
@@ -39,7 +39,7 @@ import androidx.fragment.app.DialogFragment;
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragRegisterNameBinding;
-import cx.ring.services.AccountService;
+import net.jami.services.AccountService;
 import cx.ring.utils.RegisteredNameFilter;
 import cx.ring.utils.RegisteredNameTextWatcher;
 import io.reactivex.Scheduler;
diff --git a/ring-android/app/src/main/java/cx/ring/adapters/ConfParticipantAdapter.java b/ring-android/app/src/main/java/cx/ring/adapters/ConfParticipantAdapter.java
index 1eac22251bbad1c03b456e75376058e6b9280bcf..ba0ca3243e31e881d5bbd1c8e4d58a4f0ca1eb16 100644
--- a/ring-android/app/src/main/java/cx/ring/adapters/ConfParticipantAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/adapters/ConfParticipantAdapter.java
@@ -14,8 +14,8 @@ import java.util.List;
 import cx.ring.contacts.AvatarFactory;
 import cx.ring.databinding.ItemConferenceParticipantBinding;
 import cx.ring.fragments.CallFragment;
-import cx.ring.model.CallContact;
-import cx.ring.model.SipCall;
+import net.jami.model.CallContact;
+import net.jami.model.SipCall;
 import cx.ring.views.ParticipantView;
 
 public class ConfParticipantAdapter extends RecyclerView.Adapter<ParticipantView> {
diff --git a/ring-android/app/src/main/java/cx/ring/adapters/ConversationAdapter.java b/ring-android/app/src/main/java/cx/ring/adapters/ConversationAdapter.java
index a28b6673cffeef6d2a48d1f290e98f223c44e8ca..ca0cad8955632c227e98e3c2b11eb34ffd61be12 100644
--- a/ring-android/app/src/main/java/cx/ring/adapters/ConversationAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/adapters/ConversationAdapter.java
@@ -75,24 +75,24 @@ import java.util.concurrent.TimeUnit;
 
 import cx.ring.R;
 import cx.ring.client.MediaViewerActivity;
-import cx.ring.conversation.ConversationPresenter;
+import net.jami.conversation.ConversationPresenter;
 import cx.ring.fragments.ConversationFragment;
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.ContactEvent;
-import cx.ring.model.DataTransfer;
-import cx.ring.model.Interaction;
-import cx.ring.model.Interaction.InteractionStatus;
-import cx.ring.model.Interaction.InteractionType;
-import cx.ring.model.SipCall;
-import cx.ring.model.TextMessage;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.ContactEvent;
+import net.jami.model.DataTransfer;
+import net.jami.model.Interaction;
+import net.jami.model.Interaction.InteractionStatus;
+import net.jami.model.Interaction.InteractionType;
+import net.jami.model.SipCall;
+import net.jami.model.TextMessage;
 import cx.ring.service.DRingService;
 import cx.ring.utils.AndroidFileUtils;
 import cx.ring.utils.ContentUriHandler;
 import cx.ring.utils.GlideApp;
 import cx.ring.utils.GlideOptions;
 import cx.ring.utils.ResourceMapper;
-import cx.ring.utils.StringUtils;
+import net.jami.utils.StringUtils;
 import cx.ring.views.ConversationViewHolder;
 import io.reactivex.Observable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
diff --git a/ring-android/app/src/main/java/cx/ring/adapters/NumberAdapter.java b/ring-android/app/src/main/java/cx/ring/adapters/NumberAdapter.java
index 5baba2cd3079a6d2cf1be9cb81ab700086e7326a..de2c44c162f1dfe70ec0036eb031709a902f8c70 100644
--- a/ring-android/app/src/main/java/cx/ring/adapters/NumberAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/adapters/NumberAdapter.java
@@ -32,8 +32,8 @@ import android.widget.TextView;
 import java.util.ArrayList;
 
 import cx.ring.R;
-import cx.ring.model.CallContact;
-import cx.ring.model.Phone;
+import net.jami.model.CallContact;
+import net.jami.model.Phone;
 
 public class NumberAdapter extends BaseAdapter {
     final private Context mContext;
diff --git a/ring-android/app/src/main/java/cx/ring/adapters/RingtoneAdapter.java b/ring-android/app/src/main/java/cx/ring/adapters/RingtoneAdapter.java
index cdb1fb119e563ac07dfd742d9177c275ccf8a415..075c4426eff2a88f5553dc9a81545d1227b61db9 100644
--- a/ring-android/app/src/main/java/cx/ring/adapters/RingtoneAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/adapters/RingtoneAdapter.java
@@ -37,8 +37,8 @@ import java.io.IOException;
 import java.util.List;
 
 import cx.ring.R;
-import cx.ring.model.Ringtone;
-import cx.ring.utils.Log;
+import net.jami.model.Ringtone;
+import net.jami.utils.Log;
 import io.reactivex.Observable;
 import io.reactivex.subjects.PublishSubject;
 import io.reactivex.subjects.Subject;
diff --git a/ring-android/app/src/main/java/cx/ring/adapters/SmartListAdapter.java b/ring-android/app/src/main/java/cx/ring/adapters/SmartListAdapter.java
index 9113f74e5d279c0cc2843afa954dd685094a09a5..16f1c7e85934ec8fd2b41eb591c09e6519495f2e 100644
--- a/ring-android/app/src/main/java/cx/ring/adapters/SmartListAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/adapters/SmartListAdapter.java
@@ -22,11 +22,10 @@ package cx.ring.adapters;
 
 import cx.ring.databinding.ItemSmartlistBinding;
 import cx.ring.databinding.ItemSmartlistHeaderBinding;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.viewholders.SmartListViewHolder;
 
 import android.os.Parcelable;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.ViewGroup;
 
diff --git a/ring-android/app/src/main/java/cx/ring/adapters/SmartListDiffUtil.java b/ring-android/app/src/main/java/cx/ring/adapters/SmartListDiffUtil.java
index 7f0c67db62fa974995ce981f38cd3a447d7ee858..47f6083d8ad65ba6e382a98664ba8f1bfb2a3696 100644
--- a/ring-android/app/src/main/java/cx/ring/adapters/SmartListDiffUtil.java
+++ b/ring-android/app/src/main/java/cx/ring/adapters/SmartListDiffUtil.java
@@ -23,7 +23,7 @@ import androidx.recyclerview.widget.DiffUtil;
 
 import java.util.List;
 
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.smartlist.SmartListViewModel;
 
 public class SmartListDiffUtil extends DiffUtil.Callback {
 
diff --git a/ring-android/app/src/main/java/cx/ring/application/JamiApplication.java b/ring-android/app/src/main/java/cx/ring/application/JamiApplication.java
index c867059aac1209d9b33ecfb33d2e83333994c558..20483562321e2b3b31a1cf8e5edea1bd0b727a3b 100644
--- a/ring-android/app/src/main/java/cx/ring/application/JamiApplication.java
+++ b/ring-android/app/src/main/java/cx/ring/application/JamiApplication.java
@@ -52,29 +52,26 @@ import java.util.concurrent.ScheduledExecutorService;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import androidx.annotation.RequiresApi;
-
 import cx.ring.BuildConfig;
 import cx.ring.R;
 import cx.ring.contacts.AvatarFactory;
-import cx.ring.daemon.Ringservice;
+import net.jami.daemon.Ringservice;
 import cx.ring.dependencyinjection.DaggerJamiInjectionComponent;
 import cx.ring.dependencyinjection.JamiInjectionComponent;
 import cx.ring.dependencyinjection.JamiInjectionModule;
 import cx.ring.dependencyinjection.ServiceInjectionModule;
-import cx.ring.facades.ConversationFacade;
+import net.jami.facades.ConversationFacade;
 import cx.ring.service.DRingService;
 import cx.ring.service.JamiJobService;
-import cx.ring.services.AccountService;
-import cx.ring.services.CallService;
-import cx.ring.services.ContactService;
-import cx.ring.services.DaemonService;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.services.HardwareService;
-import cx.ring.services.PreferencesService;
+import net.jami.services.AccountService;
+import net.jami.services.CallService;
+import net.jami.services.ContactService;
+import net.jami.services.DaemonService;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.HardwareService;
+import net.jami.services.PreferencesService;
 import cx.ring.utils.AndroidFileUtils;
 import io.reactivex.Completable;
-import io.reactivex.plugins.RxJavaPlugins;
 import io.reactivex.schedulers.Schedulers;
 
 public abstract class JamiApplication extends Application {
diff --git a/ring-android/app/src/main/java/cx/ring/client/AccountSpinnerAdapter.java b/ring-android/app/src/main/java/cx/ring/client/AccountSpinnerAdapter.java
index 148b7e43c85a4560c570321731eb50a82ac21d84..1cd0c7cbd417db1ffcb98067a55ab8b7db3d3acf 100644
--- a/ring-android/app/src/main/java/cx/ring/client/AccountSpinnerAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/client/AccountSpinnerAdapter.java
@@ -33,7 +33,7 @@ import java.util.List;
 
 import cx.ring.R;
 import cx.ring.databinding.ItemToolbarSpinnerBinding;
-import cx.ring.model.Account;
+import net.jami.model.Account;
 import cx.ring.views.AvatarDrawable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.CompositeDisposable;
diff --git a/ring-android/app/src/main/java/cx/ring/client/CallActivity.java b/ring-android/app/src/main/java/cx/ring/client/CallActivity.java
index 4c94edc11f413afb30cbee439a59e778f309f363..6dc881841686d65493dcd9d7270238ea0382f3a1 100644
--- a/ring-android/app/src/main/java/cx/ring/client/CallActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/CallActivity.java
@@ -42,7 +42,7 @@ import cx.ring.BuildConfig;
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.fragments.CallFragment;
-import cx.ring.services.NotificationService;
+import net.jami.services.NotificationService;
 import cx.ring.utils.ConversationPath;
 import cx.ring.utils.KeyboardVisibilityManager;
 import cx.ring.utils.MediaButtonsHelper;
diff --git a/ring-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.java b/ring-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.java
index 402cb1aec1367a244079efd90d1ab6b346fb4cf5..a3eda553c6b47d9fc0384acdb4537b3ea9ee4aed 100644
--- a/ring-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.java
@@ -37,7 +37,6 @@ import androidx.annotation.DrawableRes;
 import androidx.annotation.NonNull;
 import androidx.annotation.StringRes;
 import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
 
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -45,7 +44,6 @@ import android.view.ViewGroup;
 import android.widget.Toast;
 
 import java.util.ArrayList;
-import java.util.Map;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -55,20 +53,18 @@ import androidx.recyclerview.widget.RecyclerView;
 
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
-import cx.ring.daemon.Ringservice;
-import cx.ring.daemon.RingserviceJNI;
 import cx.ring.databinding.ActivityContactDetailsBinding;
 import cx.ring.databinding.ItemContactActionBinding;
-import cx.ring.facades.ConversationFacade;
+import net.jami.facades.ConversationFacade;
 import cx.ring.fragments.CallFragment;
 import cx.ring.fragments.ConversationFragment;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conference;
-import cx.ring.model.Conversation;
-import cx.ring.model.SipCall;
-import cx.ring.model.Uri;
-import cx.ring.services.AccountService;
-import cx.ring.services.NotificationService;
+import net.jami.model.CallContact;
+import net.jami.model.Conference;
+import net.jami.model.Conversation;
+import net.jami.model.SipCall;
+import net.jami.model.Uri;
+import net.jami.services.AccountService;
+import net.jami.services.NotificationService;
 import cx.ring.utils.ConversationPath;
 import cx.ring.views.AvatarDrawable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
diff --git a/ring-android/app/src/main/java/cx/ring/client/ConversationSelectionActivity.java b/ring-android/app/src/main/java/cx/ring/client/ConversationSelectionActivity.java
index 36bbcac66f2c42a9861d10bf9f6c2e8479431b1b..84568f6bafebf9a896b4596ebdc7c618783ec282 100644
--- a/ring-android/app/src/main/java/cx/ring/client/ConversationSelectionActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/ConversationSelectionActivity.java
@@ -37,14 +37,14 @@ import javax.inject.Singleton;
 import cx.ring.R;
 import cx.ring.adapters.SmartListAdapter;
 import cx.ring.application.JamiApplication;
-import cx.ring.facades.ConversationFacade;
+import net.jami.facades.ConversationFacade;
 import cx.ring.fragments.CallFragment;
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conference;
-import cx.ring.model.SipCall;
-import cx.ring.services.CallService;
-import cx.ring.smartlist.SmartListViewModel;
+
+import net.jami.model.CallContact;
+import net.jami.model.Conference;
+import net.jami.model.SipCall;
+import net.jami.services.CallService;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.utils.ConversationPath;
 import cx.ring.viewholders.SmartListViewHolder;
 import io.reactivex.android.schedulers.AndroidSchedulers;
diff --git a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
index 03ea2b0c2986026dd18897ffae203185e02fd1e4..1921498d7fdb53f6379d5feaec756f77ac5757b9 100644
--- a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
@@ -72,13 +72,11 @@ import cx.ring.fragments.ConversationFragment;
 import cx.ring.fragments.SmartListFragment;
 import cx.ring.interfaces.BackHandlerInterface;
 import cx.ring.interfaces.Colorable;
-import cx.ring.model.Account;
-import cx.ring.model.AccountConfig;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conversation;
+import net.jami.model.Account;
+import net.jami.model.AccountConfig;
 import cx.ring.service.DRingService;
-import cx.ring.services.AccountService;
-import cx.ring.services.NotificationService;
+import net.jami.services.AccountService;
+import net.jami.services.NotificationService;
 import cx.ring.settings.SettingsFragment;
 import cx.ring.settings.VideoSettingsFragment;
 import cx.ring.settings.pluginssettings.PluginDetails;
@@ -389,9 +387,9 @@ public class HomeActivity extends AppCompatActivity implements BottomNavigationV
         mDisposable.add(mAccountService.getCurrentAccountSubject()
                 .firstElement()
                 .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(account -> startConversation(account.getAccountID(), cx.ring.model.Uri.fromString(conversationId))));
+                .subscribe(account -> startConversation(account.getAccountID(), net.jami.model.Uri.fromString(conversationId))));
     }
-    public void startConversation(String accountId, cx.ring.model.Uri conversationId) {
+    public void startConversation(String accountId, net.jami.model.Uri conversationId) {
         Log.w(TAG, "startConversation " + accountId + " " + conversationId);
         if (!DeviceUtils.isTablet(this)) {
             startActivity(new Intent(Intent.ACTION_VIEW, ConversationPath.toUri(accountId, conversationId), this, ConversationActivity.class));
diff --git a/ring-android/app/src/main/java/cx/ring/client/RingtoneActivity.java b/ring-android/app/src/main/java/cx/ring/client/RingtoneActivity.java
index 00ee3da9036f85a748db6cdc321c60822e754d2e..c85729622b07e1bbe9ca08beaf5d1502bafda38d 100644
--- a/ring-android/app/src/main/java/cx/ring/client/RingtoneActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/RingtoneActivity.java
@@ -54,12 +54,12 @@ import cx.ring.R;
 import cx.ring.account.AccountEditionFragment;
 import cx.ring.adapters.RingtoneAdapter;
 import cx.ring.application.JamiApplication;
-import cx.ring.model.Account;
-import cx.ring.model.ConfigKey;
-import cx.ring.model.Ringtone;
-import cx.ring.services.AccountService;
+import net.jami.model.Account;
+import net.jami.model.ConfigKey;
+import net.jami.model.Ringtone;
+import net.jami.services.AccountService;
 import cx.ring.utils.AndroidFileUtils;
-import cx.ring.utils.Log;
+import net.jami.utils.Log;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.Disposable;
 
diff --git a/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListAdapter.java b/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListAdapter.java
index c3869445a8f16ccae5f74bb2044ddce82f8c73c9..f62a28e7a26f5afca0f91fb448eb683b52cfcee2 100644
--- a/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListAdapter.java
@@ -28,7 +28,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 
 import cx.ring.R;
-import cx.ring.model.CallContact;
+import net.jami.model.CallContact;
 
 public class BlackListAdapter extends RecyclerView.Adapter<BlackListViewHolder> {
 
diff --git a/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListViewHolder.java b/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListViewHolder.java
index c3d1892fccccd78cae1da740e3a358cfc5a12874..af5233d07aebdb5d13ba304637828056b8ce4a43 100644
--- a/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListViewHolder.java
+++ b/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListViewHolder.java
@@ -23,7 +23,7 @@ import androidx.recyclerview.widget.RecyclerView;
 import android.view.View;
 import cx.ring.contacts.AvatarFactory;
 import cx.ring.databinding.ItemContactBlacklistBinding;
-import cx.ring.model.CallContact;
+import net.jami.model.CallContact;
 
 public class BlackListViewHolder extends RecyclerView.ViewHolder {
     private final ItemContactBlacklistBinding binding;
diff --git a/ring-android/app/src/main/java/cx/ring/contactrequests/BlockListFragment.java b/ring-android/app/src/main/java/cx/ring/contactrequests/BlockListFragment.java
index 6d6c8fbfd6d69de41433782b331ae7a40d32dc41..80d87db9c47363ef4fdf35773143b9f083bffb5d 100644
--- a/ring-android/app/src/main/java/cx/ring/contactrequests/BlockListFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/contactrequests/BlockListFragment.java
@@ -35,7 +35,10 @@ import cx.ring.account.AccountEditionFragment;
 import cx.ring.account.JamiAccountSummaryFragment;
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragBlocklistBinding;
-import cx.ring.model.CallContact;
+
+import net.jami.contactrequests.BlackListPresenter;
+import net.jami.contactrequests.BlackListView;
+import net.jami.model.CallContact;
 import cx.ring.mvp.BaseSupportFragment;
 
 public class BlockListFragment extends BaseSupportFragment<BlackListPresenter> implements BlackListView,
diff --git a/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsFragment.java b/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsFragment.java
index 96d7415cae6a45f420708541b59fb79074f0cf06..ce34b95f88d6f30039655b249880be10b2fba50e 100644
--- a/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsFragment.java
@@ -18,9 +18,6 @@
  */
 package cx.ring.contactrequests;
 
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
@@ -38,14 +35,15 @@ import java.util.List;
 import cx.ring.R;
 import cx.ring.adapters.SmartListAdapter;
 import cx.ring.application.JamiApplication;
-import cx.ring.client.ConversationActivity;
 import cx.ring.client.HomeActivity;
 import cx.ring.databinding.FragPendingContactRequestsBinding;
-import cx.ring.model.Uri;
+
+import net.jami.contactrequests.ContactRequestsPresenter;
+import net.jami.contactrequests.ContactRequestsView;
+import net.jami.model.Uri;
 import cx.ring.mvp.BaseSupportFragment;
-import cx.ring.smartlist.SmartListViewModel;
-import cx.ring.utils.ConversationPath;
-import cx.ring.utils.DeviceUtils;
+import net.jami.smartlist.SmartListViewModel;
+
 import cx.ring.viewholders.SmartListViewHolder;
 
 public class ContactRequestsFragment extends BaseSupportFragment<ContactRequestsPresenter> implements ContactRequestsView,
diff --git a/ring-android/app/src/main/java/cx/ring/contacts/AvatarFactory.java b/ring-android/app/src/main/java/cx/ring/contacts/AvatarFactory.java
index f68a032c47496f5cff219ab4d7ff698e7eb28f39..e689b1c2da6f363ba83c6900b10fd415ec04dadb 100644
--- a/ring-android/app/src/main/java/cx/ring/contacts/AvatarFactory.java
+++ b/ring-android/app/src/main/java/cx/ring/contacts/AvatarFactory.java
@@ -32,12 +32,10 @@ import com.bumptech.glide.Glide;
 import com.bumptech.glide.RequestBuilder;
 import com.bumptech.glide.RequestManager;
 
-import java.util.List;
-
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conversation;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.Conversation;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.utils.BitmapUtils;
 import cx.ring.views.AvatarDrawable;
 import io.reactivex.Single;
diff --git a/ring-android/app/src/main/java/cx/ring/dependencyinjection/JamiInjectionComponent.java b/ring-android/app/src/main/java/cx/ring/dependencyinjection/JamiInjectionComponent.java
index 05d74bcf4202a69af5a3c6a237555fa886839c3b..4ff04462bd2fc00f555d81acd510586f3ce91569 100755
--- a/ring-android/app/src/main/java/cx/ring/dependencyinjection/JamiInjectionComponent.java
+++ b/ring-android/app/src/main/java/cx/ring/dependencyinjection/JamiInjectionComponent.java
@@ -41,7 +41,7 @@ import cx.ring.client.ContactDetailsActivity;
 import cx.ring.client.HomeActivity;
 import cx.ring.client.RingtoneActivity;
 import cx.ring.contactrequests.ContactRequestsFragment;
-import cx.ring.facades.ConversationFacade;
+import net.jami.facades.ConversationFacade;
 import cx.ring.fragments.AccountMigrationFragment;
 import cx.ring.fragments.AdvancedAccountFragment;
 import cx.ring.fragments.CallFragment;
@@ -58,14 +58,14 @@ import cx.ring.service.BootReceiver;
 import cx.ring.service.CallNotificationService;
 import cx.ring.service.DRingService;
 import cx.ring.service.JamiJobService;
-import cx.ring.services.AccountService;
-import cx.ring.services.CallService;
-import cx.ring.services.ConferenceService;
+import net.jami.services.AccountService;
+import net.jami.services.CallService;
+import net.jami.services.ConferenceService;
 import cx.ring.services.ContactServiceImpl;
-import cx.ring.services.DaemonService;
+import net.jami.services.DaemonService;
 import cx.ring.services.DataTransferService;
 import cx.ring.services.DeviceRuntimeServiceImpl;
-import cx.ring.services.HardwareService;
+import net.jami.services.HardwareService;
 import cx.ring.services.HistoryServiceImpl;
 import cx.ring.services.LocationSharingService;
 import cx.ring.services.NotificationServiceImpl;
diff --git a/ring-android/app/src/main/java/cx/ring/dependencyinjection/ServiceInjectionModule.java b/ring-android/app/src/main/java/cx/ring/dependencyinjection/ServiceInjectionModule.java
index 539316049761d860cd575b6050bd24fa9edde271..a5a78b102b437c8eb2bb2afd9d4ea9548e9a56bd 100755
--- a/ring-android/app/src/main/java/cx/ring/dependencyinjection/ServiceInjectionModule.java
+++ b/ring-android/app/src/main/java/cx/ring/dependencyinjection/ServiceInjectionModule.java
@@ -21,6 +21,20 @@ package cx.ring.dependencyinjection;
 
 import android.content.Context;
 
+import net.jami.facades.ConversationFacade;
+import net.jami.services.AccountService;
+import net.jami.services.CallService;
+import net.jami.services.ContactService;
+import net.jami.services.DaemonService;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.HardwareService;
+import net.jami.services.HistoryService;
+import net.jami.services.LogService;
+import net.jami.services.NotificationService;
+import net.jami.services.PreferencesService;
+import net.jami.services.VCardService;
+import net.jami.utils.Log;
+
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 
@@ -28,27 +42,14 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 
 import cx.ring.application.JamiApplication;
-import cx.ring.facades.ConversationFacade;
-import cx.ring.services.AccountService;
-import cx.ring.services.CallService;
-import cx.ring.services.ContactService;
 import cx.ring.services.ContactServiceImpl;
-import cx.ring.services.DaemonService;
-import cx.ring.services.DeviceRuntimeService;
 import cx.ring.services.DeviceRuntimeServiceImpl;
-import cx.ring.services.HardwareService;
 import cx.ring.services.HardwareServiceImpl;
-import cx.ring.services.HistoryService;
 import cx.ring.services.HistoryServiceImpl;
-import cx.ring.services.LogService;
 import cx.ring.services.LogServiceImpl;
-import cx.ring.services.NotificationService;
 import cx.ring.services.NotificationServiceImpl;
-import cx.ring.services.PreferencesService;
 import cx.ring.services.SharedPreferencesServiceImpl;
-import cx.ring.services.VCardService;
 import cx.ring.services.VCardServiceImpl;
-import cx.ring.utils.Log;
 import dagger.Module;
 import dagger.Provides;
 import io.reactivex.Scheduler;
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/AccountMigrationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/AccountMigrationFragment.java
index 1348f56ecd8b4ae24753e5803a1385c76c986c65..8c88dc9a30f062cf2fb2abe975a5d1b5dc8b10f0 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/AccountMigrationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/AccountMigrationFragment.java
@@ -45,10 +45,10 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragAccountMigrationBinding;
-import cx.ring.model.Account;
-import cx.ring.model.AccountConfig;
-import cx.ring.model.ConfigKey;
-import cx.ring.services.AccountService;
+import net.jami.model.Account;
+import net.jami.model.AccountConfig;
+import net.jami.model.ConfigKey;
+import net.jami.services.AccountService;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.CompositeDisposable;
 
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/AdvancedAccountFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/AdvancedAccountFragment.java
index 95ac97f7383ea20daa27d5e4ad5c54b2e731d16d..4f3ec7dfc6c17d8031c71c561402b17ab2c00ba8 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/AdvancedAccountFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/AdvancedAccountFragment.java
@@ -34,8 +34,8 @@ import java.util.ArrayList;
 import cx.ring.R;
 import cx.ring.account.AccountEditionFragment;
 import cx.ring.application.JamiApplication;
-import cx.ring.model.AccountConfig;
-import cx.ring.model.ConfigKey;
+import net.jami.model.AccountConfig;
+import net.jami.model.ConfigKey;
 import cx.ring.mvp.BasePreferenceFragment;
 import cx.ring.views.EditTextIntegerPreference;
 import cx.ring.views.EditTextPreferenceDialog;
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/AdvancedAccountPresenter.java b/ring-android/app/src/main/java/cx/ring/fragments/AdvancedAccountPresenter.java
index c724b6b1d5e2b4d35bfb924a366d88c1d02161f1..f8597056d7338de2b0edcb24f787bcbed73d9d6d 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/AdvancedAccountPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/AdvancedAccountPresenter.java
@@ -28,11 +28,11 @@ import java.util.Enumeration;
 
 import javax.inject.Inject;
 
-import cx.ring.facades.ConversationFacade;
-import cx.ring.model.Account;
-import cx.ring.model.ConfigKey;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
+import net.jami.facades.ConversationFacade;
+import net.jami.model.Account;
+import net.jami.model.ConfigKey;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
 
 public class AdvancedAccountPresenter extends RootPresenter<AdvancedAccountView> {
 
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/AdvancedAccountView.java b/ring-android/app/src/main/java/cx/ring/fragments/AdvancedAccountView.java
index 02c7d59ffdd8d7b17d4a87956fc225a29ea92d16..26d8e98287a0f7af1ce78ddd1c9843d93e0405ac 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/AdvancedAccountView.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/AdvancedAccountView.java
@@ -21,7 +21,7 @@ package cx.ring.fragments;
 
 import java.util.ArrayList;
 
-import cx.ring.model.AccountConfig;
+import net.jami.model.AccountConfig;
 
 public interface AdvancedAccountView {
 
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java
index c6babb4f9c3c89f34386843e0d9e7f968fb8845f..6a0a1bef23e2e8f796707ea8bba5c5bb7a0935ab 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java
@@ -99,34 +99,33 @@ import javax.inject.Inject;
 import cx.ring.R;
 import cx.ring.adapters.ConfParticipantAdapter;
 import cx.ring.application.JamiApplication;
-import cx.ring.call.CallPresenter;
-import cx.ring.call.CallView;
+import net.jami.call.CallPresenter;
+import net.jami.call.CallView;
 import cx.ring.client.CallActivity;
 import cx.ring.client.ContactDetailsActivity;
 import cx.ring.client.ConversationActivity;
 import cx.ring.client.ConversationSelectionActivity;
 import cx.ring.client.HomeActivity;
-import cx.ring.daemon.Ringservice;
+import net.jami.daemon.Ringservice;
 import cx.ring.databinding.FragCallBinding;
 import cx.ring.databinding.ItemParticipantLabelBinding;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conference;
-import cx.ring.model.SipCall;
+import net.jami.model.CallContact;
+import net.jami.model.Conference;
+import net.jami.model.SipCall;
 import cx.ring.mvp.BaseSupportFragment;
 import cx.ring.plugins.RecyclerPicker.RecyclerPicker;
 import cx.ring.plugins.RecyclerPicker.RecyclerPickerLayoutManager;
 import cx.ring.service.DRingService;
-import cx.ring.services.AccountService;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.services.HardwareService;
-import cx.ring.services.NotificationService;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.HardwareService;
+import net.jami.services.NotificationService;
 import cx.ring.utils.ActionHelper;
 import cx.ring.utils.ContentUriHandler;
 import cx.ring.utils.ConversationPath;
 import cx.ring.utils.DeviceUtils;
 import cx.ring.utils.KeyboardVisibilityManager;
 import cx.ring.utils.MediaButtonsHelper;
-import cx.ring.utils.StringUtils;
+import net.jami.utils.StringUtils;
 import cx.ring.views.AvatarDrawable;
 import io.reactivex.disposables.CompositeDisposable;
 
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/CodecPreference.java b/ring-android/app/src/main/java/cx/ring/fragments/CodecPreference.java
index 4db22b77181cab58f94b36022fe28746aa1afd4e..351af6d1a52dfa6c91a19160538919d5f3ed6be5 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/CodecPreference.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/CodecPreference.java
@@ -38,7 +38,7 @@ import android.widget.TextView;
 import java.util.ArrayList;
 
 import cx.ring.R;
-import cx.ring.model.Codec;
+import net.jami.model.Codec;
 
 class CodecPreference extends Preference {
     private static final String TAG = CodecPreference.class.getSimpleName();
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/ContactPickerFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/ContactPickerFragment.java
index 97195ac65a7727cbe3e5bfb42c09585090dfc5e8..54b477df6424d73b28533cf65d61b9c5c1ca3413 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/ContactPickerFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/ContactPickerFragment.java
@@ -16,9 +16,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialog;
 import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
 import com.google.android.material.chip.Chip;
 
-import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
 import javax.inject.Inject;
@@ -27,15 +25,12 @@ import cx.ring.R;
 import cx.ring.adapters.SmartListAdapter;
 import cx.ring.application.JamiApplication;
 import cx.ring.client.HomeActivity;
-import cx.ring.contacts.AvatarFactory;
 import cx.ring.databinding.FragContactPickerBinding;
-import cx.ring.facades.ConversationFacade;
-import cx.ring.model.CallContact;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.facades.ConversationFacade;
+import net.jami.model.CallContact;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.viewholders.SmartListViewHolder;
 import cx.ring.views.AvatarDrawable;
-import io.reactivex.Observable;
-import io.reactivex.Single;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.CompositeDisposable;
 
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
index 826c3fb12bd6ccabbd3fddf88e42121f3e7cdfc3..4e87c7d6e8a3c4cd0fc0617aed81c4b775f1c06b 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
@@ -48,7 +48,6 @@ import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.WindowManager;
 import android.view.inputmethod.EditorInfo;
 import android.widget.ImageView;
 import android.widget.RelativeLayout;
@@ -66,7 +65,6 @@ import androidx.appcompat.view.menu.MenuBuilder;
 import androidx.appcompat.view.menu.MenuPopupHelper;
 import androidx.appcompat.widget.PopupMenu;
 import androidx.appcompat.widget.Toolbar;
-import androidx.core.util.Pair;
 import androidx.core.view.ViewCompat;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
@@ -89,23 +87,22 @@ import cx.ring.client.ContactDetailsActivity;
 import cx.ring.client.ConversationActivity;
 import cx.ring.client.HomeActivity;
 import cx.ring.contacts.AvatarFactory;
-import cx.ring.conversation.ConversationPresenter;
-import cx.ring.conversation.ConversationView;
-import cx.ring.daemon.Ringservice;
+import net.jami.conversation.ConversationPresenter;
+import net.jami.conversation.ConversationView;
 import cx.ring.databinding.FragConversationBinding;
 import cx.ring.interfaces.Colorable;
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conversation;
-import cx.ring.model.Interaction;
-import cx.ring.model.DataTransfer;
-import cx.ring.model.Phone;
-import cx.ring.model.Error;
-import cx.ring.model.Uri;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.Conversation;
+import net.jami.model.Interaction;
+import net.jami.model.DataTransfer;
+import net.jami.model.Phone;
+import net.jami.model.Error;
+import net.jami.model.Uri;
 import cx.ring.mvp.BaseSupportFragment;
 import cx.ring.service.DRingService;
 import cx.ring.services.LocationSharingService;
-import cx.ring.services.NotificationService;
+import net.jami.services.NotificationService;
 import cx.ring.services.NotificationServiceImpl;
 import cx.ring.utils.ActionHelper;
 import cx.ring.utils.AndroidFileUtils;
@@ -115,7 +112,6 @@ import cx.ring.utils.ConversationPath;
 import cx.ring.utils.MediaButtonsHelper;
 import cx.ring.views.AvatarDrawable;
 import io.reactivex.Completable;
-import io.reactivex.Observable;
 import io.reactivex.Single;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.CompositeDisposable;
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountFragment.java
index 0a427bcc656a084f2b888d85345bc2b72fbdb62e..af864f5bbfee0508bf5a5b246df2cc1d505f536a 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountFragment.java
@@ -40,13 +40,13 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import cx.ring.R;
 import cx.ring.account.AccountEditionFragment;
 import cx.ring.application.JamiApplication;
-import cx.ring.model.Account;
-import cx.ring.model.AccountConfig;
-import cx.ring.model.ConfigKey;
+import net.jami.model.Account;
+import net.jami.model.AccountConfig;
+import net.jami.model.ConfigKey;
 import cx.ring.mvp.BasePreferenceFragment;
 import cx.ring.services.SharedPreferencesServiceImpl;
-import cx.ring.utils.Log;
-import cx.ring.utils.Tuple;
+import net.jami.utils.Log;
+import net.jami.utils.Tuple;
 import cx.ring.views.EditTextIntegerPreference;
 import cx.ring.views.EditTextPreferenceDialog;
 import cx.ring.views.PasswordPreference;
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountPresenter.java b/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountPresenter.java
index f652992da3ed7a7e2bc309dea806ab6e56c4c15e..b5a20060b4bdc7b9f3e07c85a6b0733297955703 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountPresenter.java
@@ -25,12 +25,12 @@ import android.util.Log;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.model.Account;
-import cx.ring.model.ConfigKey;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.services.HardwareService;
-import cx.ring.services.PreferencesService;
+import net.jami.model.Account;
+import net.jami.model.ConfigKey;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
+import net.jami.services.HardwareService;
+import net.jami.services.PreferencesService;
 import io.reactivex.Scheduler;
 
 public class GeneralAccountPresenter extends RootPresenter<GeneralAccountView> {
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountView.java b/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountView.java
index 3c11027b91c6d8cecb34e16461f03701ad0defe2..9d8f3f58b7f17ca5d20f893592ffb86843963a8c 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountView.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountView.java
@@ -21,8 +21,8 @@ package cx.ring.fragments;
 
 import androidx.annotation.NonNull;
 
-import cx.ring.model.Account;
-import cx.ring.utils.Tuple;
+import net.jami.model.Account;
+import net.jami.utils.Tuple;
 
 public interface GeneralAccountView {
 
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/LinkDeviceFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/LinkDeviceFragment.java
index afc470c8b0bcdf02ee9f1eb2509a70ab320fe0cf..e6fc7ad470bd6e7de47b7f95d4e842ce10faf5fc 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/LinkDeviceFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/LinkDeviceFragment.java
@@ -45,11 +45,11 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 
 import cx.ring.R;
 import cx.ring.account.AccountEditionFragment;
-import cx.ring.account.LinkDevicePresenter;
-import cx.ring.account.LinkDeviceView;
+import net.jami.account.LinkDevicePresenter;
+import net.jami.account.LinkDeviceView;
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragLinkDeviceBinding;
-import cx.ring.model.Account;
+import net.jami.model.Account;
 import cx.ring.mvp.BaseBottomSheetFragment;
 import cx.ring.utils.DeviceUtils;
 import cx.ring.utils.KeyboardVisibilityManager;
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/LocationSharingFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/LocationSharingFragment.java
index 0dbd3162c6cc57ef545c64ea9b143f310956ac7a..b532c7ccff5553dc4a987285a480fb5ac153a688 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/LocationSharingFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/LocationSharingFragment.java
@@ -75,10 +75,10 @@ import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.contacts.AvatarFactory;
 import cx.ring.databinding.FragLocationSharingBinding;
-import cx.ring.facades.ConversationFacade;
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Uri;
+import net.jami.facades.ConversationFacade;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.Uri;
 import cx.ring.services.LocationSharingService;
 import cx.ring.utils.ConversationPath;
 import cx.ring.utils.TouchClickListener;
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferenceFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferenceFragment.java
index 2fbd73a47110f56600d94d6a35754a0139cc497a..8a8d6c3362baef9de3a12280b539f42162a47d13 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferenceFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferenceFragment.java
@@ -37,10 +37,10 @@ import cx.ring.R;
 import cx.ring.account.AccountEditionFragment;
 import cx.ring.application.JamiApplication;
 import cx.ring.client.RingtoneActivity;
-import cx.ring.model.Account;
-import cx.ring.model.AccountConfig;
-import cx.ring.model.Codec;
-import cx.ring.model.ConfigKey;
+import net.jami.model.Account;
+import net.jami.model.AccountConfig;
+import net.jami.model.Codec;
+import net.jami.model.ConfigKey;
 import cx.ring.mvp.BasePreferenceFragment;
 
 public class MediaPreferenceFragment extends BasePreferenceFragment<MediaPreferencePresenter> implements MediaPreferenceView {
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferencePresenter.java b/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferencePresenter.java
index 9c87971456bec279e6fd1c31b514e5aaa5bbb849..96f04927413b549d0997b134edd0287b839c1bc7 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferencePresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferencePresenter.java
@@ -21,18 +21,17 @@ package cx.ring.fragments;
 
 import android.util.Log;
 
-import java.io.File;
 import java.util.ArrayList;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.model.Account;
-import cx.ring.model.Codec;
-import cx.ring.model.ConfigKey;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.services.DeviceRuntimeService;
+import net.jami.model.Account;
+import net.jami.model.Codec;
+import net.jami.model.ConfigKey;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
+import net.jami.services.DeviceRuntimeService;
 import io.reactivex.Scheduler;
 
 public class MediaPreferencePresenter extends RootPresenter<MediaPreferenceView>
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferenceView.java b/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferenceView.java
index d097e9a56cc7dae0b05683b9f4b37c7bd285ade5..4508596391d7803257fd73f48eb8dc54697cd492 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferenceView.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferenceView.java
@@ -21,8 +21,8 @@ package cx.ring.fragments;
 
 import java.util.ArrayList;
 
-import cx.ring.model.Account;
-import cx.ring.model.Codec;
+import net.jami.model.Account;
+import net.jami.model.Codec;
 
 public interface MediaPreferenceView {
 
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/SIPAccountCreationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/SIPAccountCreationFragment.java
index 36edb7b498db262efc35c32d0d305308eabc0105..fa9ef83068010b8d4e4eeb2c9d2a35e015f7a04c 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/SIPAccountCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/SIPAccountCreationFragment.java
@@ -40,8 +40,8 @@ import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragAccSipCreateBinding;
 import cx.ring.mvp.BaseSupportFragment;
-import cx.ring.mvp.SIPCreationView;
-import cx.ring.wizard.SIPCreationPresenter;
+import net.jami.mvp.SIPCreationView;
+import net.jami.wizard.SIPCreationPresenter;
 
 public class SIPAccountCreationFragment extends BaseSupportFragment<SIPCreationPresenter> implements SIPCreationView {
     public static final String TAG = SIPAccountCreationFragment.class.getSimpleName();
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountFragment.java
index ebc8af5d2a8a5752f09197242f8fb37f071fcc02..3e713f1e4cb7bc4eda9c73a3284651339691e269 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountFragment.java
@@ -24,7 +24,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
-import android.os.Build;
 import android.os.Bundle;
 
 import androidx.preference.EditTextPreference;
@@ -33,8 +32,6 @@ import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
 import androidx.preference.TwoStatePreference;
 
-import android.os.Environment;
-import android.provider.DocumentsContract;
 import android.util.Pair;
 
 import java.io.File;
@@ -47,12 +44,12 @@ import java.util.Scanner;
 import cx.ring.R;
 import cx.ring.account.AccountEditionFragment;
 import cx.ring.application.JamiApplication;
-import cx.ring.model.AccountConfig;
-import cx.ring.model.AccountCredentials;
-import cx.ring.model.ConfigKey;
+import net.jami.model.AccountConfig;
+import net.jami.model.AccountCredentials;
+import net.jami.model.ConfigKey;
 import cx.ring.mvp.BasePreferenceFragment;
 import cx.ring.utils.AndroidFileUtils;
-import cx.ring.utils.Tuple;
+import net.jami.utils.Tuple;
 import cx.ring.views.CredentialPreferenceDialog;
 import cx.ring.views.CredentialsPreference;
 
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountPresenter.java b/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountPresenter.java
index 40e502f912bc7cf7a9bdd2b37335b9cfd655dae5..ed09096a868de1afa1e7c7ada06ce7491ce7157a 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountPresenter.java
@@ -23,12 +23,12 @@ import java.util.List;
 
 import javax.inject.Inject;
 
-import cx.ring.model.Account;
-import cx.ring.model.AccountCredentials;
-import cx.ring.model.ConfigKey;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.utils.Tuple;
+import net.jami.model.Account;
+import net.jami.model.AccountCredentials;
+import net.jami.model.ConfigKey;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
+import net.jami.utils.Tuple;
 
 public class SecurityAccountPresenter extends RootPresenter<SecurityAccountView> {
 
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountView.java b/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountView.java
index da15521d7c16ff5306fe48a31ff7c0c8357129d5..bd5f02c681f81093a8bf38464029ea13b09b55e1 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountView.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountView.java
@@ -21,8 +21,8 @@ package cx.ring.fragments;
 
 import java.util.ArrayList;
 
-import cx.ring.model.AccountConfig;
-import cx.ring.model.AccountCredentials;
+import net.jami.model.AccountConfig;
+import net.jami.model.AccountCredentials;
 
 
 public interface SecurityAccountView {
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/ShareWithFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/ShareWithFragment.java
index 7acb77a7f0a0b86479305d414f0ffd0c793b5e05..8ed8b927368056e2d3f1bbc9e3c20a6fab3c546e 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/ShareWithFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/ShareWithFragment.java
@@ -48,9 +48,9 @@ import cx.ring.R;
 import cx.ring.adapters.SmartListAdapter;
 import cx.ring.application.JamiApplication;
 import cx.ring.client.ConversationActivity;
-import cx.ring.facades.ConversationFacade;
-import cx.ring.services.ContactService;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.facades.ConversationFacade;
+import net.jami.services.ContactService;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.utils.ConversationPath;
 import cx.ring.viewholders.SmartListViewHolder;
 import io.reactivex.android.schedulers.AndroidSchedulers;
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java
index a5db7f3bac4902190028fb5f92b789cc8700e58e..d31cd933cab284ca7422920b95923f327d85e1be 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java
@@ -65,12 +65,12 @@ import cx.ring.application.JamiApplication;
 import cx.ring.client.CallActivity;
 import cx.ring.client.HomeActivity;
 import cx.ring.databinding.FragSmartlistBinding;
-import cx.ring.model.Conversation;
+import net.jami.model.Conversation;
 import cx.ring.mvp.BaseSupportFragment;
-import cx.ring.services.AccountService;
-import cx.ring.smartlist.SmartListPresenter;
-import cx.ring.smartlist.SmartListView;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.services.AccountService;
+import net.jami.smartlist.SmartListPresenter;
+import net.jami.smartlist.SmartListView;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.utils.ActionHelper;
 import cx.ring.utils.ClipboardHelper;
 import cx.ring.utils.ConversationPath;
@@ -307,12 +307,12 @@ public class SmartListFragment extends BaseSupportFragment<SmartListPresenter> i
     }
 
     @Override
-    public void removeConversation(cx.ring.model.Uri callContact) {
+    public void removeConversation(net.jami.model.Uri callContact) {
         presenter.removeConversation(callContact);
     }
 
     @Override
-    public void clearConversation(cx.ring.model.Uri callContact) {
+    public void clearConversation(net.jami.model.Uri callContact) {
         presenter.clearConversation(callContact);
     }
 
@@ -380,17 +380,17 @@ public class SmartListFragment extends BaseSupportFragment<SmartListPresenter> i
     }
 
     @Override
-    public void displayClearDialog(cx.ring.model.Uri uri) {
+    public void displayClearDialog(net.jami.model.Uri uri) {
         ActionHelper.launchClearAction(getActivity(), uri, SmartListFragment.this);
     }
 
     @Override
-    public void displayDeleteDialog(cx.ring.model.Uri uri) {
+    public void displayDeleteDialog(net.jami.model.Uri uri) {
         ActionHelper.launchDeleteAction(getActivity(), uri, SmartListFragment.this);
     }
 
     @Override
-    public void copyNumber(cx.ring.model.Uri uri) {
+    public void copyNumber(net.jami.model.Uri uri) {
         ActionHelper.launchCopyNumberToClipboardFromContact(getActivity(), uri, this);
     }
 
@@ -443,13 +443,13 @@ public class SmartListFragment extends BaseSupportFragment<SmartListPresenter> i
         if (requestCode == HomeActivity.REQUEST_CODE_QR_CONVERSATION && data != null && resultCode == Activity.RESULT_OK) {
             String contactId = data.getStringExtra(ConversationFragment.KEY_CONTACT_RING_ID);
             if (contactId != null) {
-                presenter.startConversation(cx.ring.model.Uri.fromString(contactId));
+                presenter.startConversation(net.jami.model.Uri.fromString(contactId));
             }
         }
     }
 
     @Override
-    public void goToConversation(String accountId, cx.ring.model.Uri conversationUri) {
+    public void goToConversation(String accountId, net.jami.model.Uri conversationUri) {
         Log.w(TAG, "goToConversation " + accountId + " " + conversationUri);
         if (mSearchMenuItem != null) {
             mSearchMenuItem.collapseActionView();
@@ -458,7 +458,7 @@ public class SmartListFragment extends BaseSupportFragment<SmartListPresenter> i
     }
 
     @Override
-    public void goToCallActivity(String accountId, cx.ring.model.Uri conversationUri, String contactId) {
+    public void goToCallActivity(String accountId, net.jami.model.Uri conversationUri, String contactId) {
         Intent intent = new Intent(CallActivity.ACTION_CALL)
                 .setClass(requireContext(), CallActivity.class)
                 .putExtras(ConversationPath.toBundle(accountId, conversationUri))
diff --git a/ring-android/app/src/main/java/cx/ring/history/DatabaseHelper.java b/ring-android/app/src/main/java/cx/ring/history/DatabaseHelper.java
index 99b7ee925d660a72736f6c8097c1d724a6036629..eeae509c52a03e06202b36486a6462c038c9ce2a 100644
--- a/ring-android/app/src/main/java/cx/ring/history/DatabaseHelper.java
+++ b/ring-android/app/src/main/java/cx/ring/history/DatabaseHelper.java
@@ -36,10 +36,10 @@ import java.util.ArrayList;
 import javax.inject.Inject;
 
 import cx.ring.application.JamiApplication;
-import cx.ring.model.ConversationHistory;
-import cx.ring.model.DataTransfer;
-import cx.ring.model.Interaction;
-import cx.ring.services.HistoryService;
+import net.jami.model.ConversationHistory;
+import net.jami.model.DataTransfer;
+import net.jami.model.Interaction;
+import net.jami.services.HistoryService;
 
 /*
  * Database History Version
diff --git a/ring-android/app/src/main/java/cx/ring/launch/LaunchPresenter.java b/ring-android/app/src/main/java/cx/ring/launch/LaunchPresenter.java
index ad848c8375687d217b6effc8cbc57b2c79485649..3cb81aa0a41be5dac23ee1f94e04eac9c5d2d24e 100644
--- a/ring-android/app/src/main/java/cx/ring/launch/LaunchPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/launch/LaunchPresenter.java
@@ -21,18 +21,17 @@
 package cx.ring.launch;
 
 import android.Manifest;
-import android.util.Log;
 
 import java.util.ArrayList;
 
 import javax.inject.Inject;
 
-import cx.ring.model.Settings;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.services.HardwareService;
-import cx.ring.services.PreferencesService;
+import net.jami.model.Settings;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.HardwareService;
+import net.jami.services.PreferencesService;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 
 public class LaunchPresenter extends RootPresenter<LaunchView> {
diff --git a/ring-android/app/src/main/java/cx/ring/mvp/BaseActivity.java b/ring-android/app/src/main/java/cx/ring/mvp/BaseActivity.java
index 9e68c85413cf86976f7dcfedd8799185525179e1..109d437531ef165f543905b6a19492ee017ff41f 100644
--- a/ring-android/app/src/main/java/cx/ring/mvp/BaseActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/mvp/BaseActivity.java
@@ -22,6 +22,8 @@ package cx.ring.mvp;
 import android.os.Bundle;
 import androidx.appcompat.app.AppCompatActivity;
 
+import net.jami.mvp.RootPresenter;
+
 import javax.inject.Inject;
 
 public abstract class BaseActivity<T extends RootPresenter> extends AppCompatActivity {
diff --git a/ring-android/app/src/main/java/cx/ring/mvp/BaseBottomSheetFragment.java b/ring-android/app/src/main/java/cx/ring/mvp/BaseBottomSheetFragment.java
index b3634318ac3e961f1a9b53a5afc2190235809f7c..b4f739cc74631d396de187c5737a8c3968f9c96e 100644
--- a/ring-android/app/src/main/java/cx/ring/mvp/BaseBottomSheetFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/mvp/BaseBottomSheetFragment.java
@@ -32,7 +32,9 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
 import javax.inject.Inject;
 
 import cx.ring.R;
-import cx.ring.model.Error;
+import net.jami.model.Error;
+import net.jami.mvp.BaseView;
+import net.jami.mvp.RootPresenter;
 
 public abstract class BaseBottomSheetFragment<T extends RootPresenter> extends BottomSheetDialogFragment implements BaseView {
 
diff --git a/ring-android/app/src/main/java/cx/ring/mvp/BaseFragment.java b/ring-android/app/src/main/java/cx/ring/mvp/BaseFragment.java
index 952c39faa23ea5df07940ea58219fc5a3f7bd54a..93111865e9c4a8cbf726a4f3ffb7dbfe1b791d83 100644
--- a/ring-android/app/src/main/java/cx/ring/mvp/BaseFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/mvp/BaseFragment.java
@@ -28,7 +28,9 @@ import android.widget.Toast;
 import javax.inject.Inject;
 
 import cx.ring.R;
-import cx.ring.model.Error;
+import net.jami.model.Error;
+import net.jami.mvp.BaseView;
+import net.jami.mvp.RootPresenter;
 
 public abstract class BaseFragment<T extends RootPresenter> extends Fragment implements BaseView {
 
diff --git a/ring-android/app/src/main/java/cx/ring/mvp/BasePreferenceFragment.java b/ring-android/app/src/main/java/cx/ring/mvp/BasePreferenceFragment.java
index c63a2921bd2c624d2b15cf33c1b701103c561d02..8a5808241dcd8f7c0af2f1f54e1c7c2bca5b0e9a 100644
--- a/ring-android/app/src/main/java/cx/ring/mvp/BasePreferenceFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/mvp/BasePreferenceFragment.java
@@ -23,6 +23,8 @@ import android.os.Bundle;
 
 import androidx.preference.PreferenceFragmentCompat;
 
+import net.jami.mvp.RootPresenter;
+
 import javax.inject.Inject;
 
 public abstract class BasePreferenceFragment<T extends RootPresenter> extends PreferenceFragmentCompat {
diff --git a/ring-android/app/src/main/java/cx/ring/mvp/BaseSupportFragment.java b/ring-android/app/src/main/java/cx/ring/mvp/BaseSupportFragment.java
index 956db55b52d4972d4ee8b30b5547420f126fa3f1..8838793a9d2573e66d35207f2c281961af7630ad 100644
--- a/ring-android/app/src/main/java/cx/ring/mvp/BaseSupportFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/mvp/BaseSupportFragment.java
@@ -29,7 +29,9 @@ import androidx.annotation.IdRes;
 import androidx.annotation.NonNull;
 import androidx.fragment.app.Fragment;
 import cx.ring.R;
-import cx.ring.model.Error;
+import net.jami.model.Error;
+import net.jami.mvp.BaseView;
+import net.jami.mvp.RootPresenter;
 
 public abstract class BaseSupportFragment<T extends RootPresenter> extends Fragment implements BaseView {
 
diff --git a/ring-android/app/src/main/java/cx/ring/plugins/ButtonPreference/ButtonPreference.java b/ring-android/app/src/main/java/cx/ring/plugins/ButtonPreference/ButtonPreference.java
index acaea8a01ebde3addfed6e96b61dab29fcb5250e..ad6a284d3c764dd48c1894fa2cddab1472e89e1a 100644
--- a/ring-android/app/src/main/java/cx/ring/plugins/ButtonPreference/ButtonPreference.java
+++ b/ring-android/app/src/main/java/cx/ring/plugins/ButtonPreference/ButtonPreference.java
@@ -1,26 +1,17 @@
 package cx.ring.plugins.ButtonPreference;
 
 import android.content.Context;
-import android.content.DialogInterface;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.TextView;
-import android.widget.Toast;
 
-import androidx.appcompat.app.AlertDialog;
-import androidx.arch.core.util.Function;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceViewHolder;
 
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-
-import org.w3c.dom.Text;
-
 import cx.ring.R;
-import cx.ring.daemon.Ringservice;
 
 public class ButtonPreference extends Preference {
     Context mContext;
diff --git a/ring-android/app/src/main/java/cx/ring/plugins/PluginUtils.java b/ring-android/app/src/main/java/cx/ring/plugins/PluginUtils.java
index f3402ee56398d341f39b1ec5849943cf5109a9f1..54f8cf9640529a0313dc896fcb5a7c50d328d8dc 100644
--- a/ring-android/app/src/main/java/cx/ring/plugins/PluginUtils.java
+++ b/ring-android/app/src/main/java/cx/ring/plugins/PluginUtils.java
@@ -1,8 +1,6 @@
 package cx.ring.plugins;
 
 import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
 
 import androidx.annotation.NonNull;
 
@@ -10,10 +8,9 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
-import cx.ring.daemon.Ringservice;
-import cx.ring.daemon.StringMap;
+import net.jami.daemon.Ringservice;
 import cx.ring.settings.pluginssettings.PluginDetails;
-import cx.ring.utils.Log;
+import net.jami.utils.Log;
 
 public class PluginUtils {
 
diff --git a/ring-android/app/src/main/java/cx/ring/service/BootReceiver.java b/ring-android/app/src/main/java/cx/ring/service/BootReceiver.java
index 65e9a336f6ec9564de1a2a714929f411813318af..096a472ac91d977c9180ffb91ebfac981acbd709 100644
--- a/ring-android/app/src/main/java/cx/ring/service/BootReceiver.java
+++ b/ring-android/app/src/main/java/cx/ring/service/BootReceiver.java
@@ -28,7 +28,7 @@ import androidx.core.content.ContextCompat;
 import javax.inject.Inject;
 
 import cx.ring.application.JamiApplication;
-import cx.ring.services.PreferencesService;
+import net.jami.services.PreferencesService;
 import cx.ring.services.SyncService;
 
 public class BootReceiver extends BroadcastReceiver {
diff --git a/ring-android/app/src/main/java/cx/ring/service/CallNotificationService.java b/ring-android/app/src/main/java/cx/ring/service/CallNotificationService.java
index 31ab9e678928caec9fdd19312f0a9eb4aa0aaf23..1170333981ef8c43b6b706bb42403147b5a4ba70 100644
--- a/ring-android/app/src/main/java/cx/ring/service/CallNotificationService.java
+++ b/ring-android/app/src/main/java/cx/ring/service/CallNotificationService.java
@@ -32,7 +32,7 @@ import androidx.annotation.Nullable;
 import javax.inject.Inject;
 
 import cx.ring.application.JamiApplication;
-import cx.ring.services.NotificationService;
+import net.jami.services.NotificationService;
 
 public class CallNotificationService extends Service {
     public static final String ACTION_START = "START";
diff --git a/ring-android/app/src/main/java/cx/ring/service/DRingService.java b/ring-android/app/src/main/java/cx/ring/service/DRingService.java
index e2e01279f14ffa0241fbb96c99a84cbc838bfc99..fe3c04d7fdb3e7608d96235a943e07973784b370 100644
--- a/ring-android/app/src/main/java/cx/ring/service/DRingService.java
+++ b/ring-android/app/src/main/java/cx/ring/service/DRingService.java
@@ -58,19 +58,19 @@ import cx.ring.BuildConfig;
 import cx.ring.application.JamiApplication;
 import cx.ring.client.CallActivity;
 import cx.ring.client.ConversationActivity;
-import cx.ring.facades.ConversationFacade;
-import cx.ring.model.Codec;
-import cx.ring.model.Settings;
-import cx.ring.model.Uri;
-import cx.ring.services.AccountService;
-import cx.ring.services.CallService;
-import cx.ring.services.ContactService;
-import cx.ring.services.DaemonService;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.services.HardwareService;
-import cx.ring.services.HistoryService;
-import cx.ring.services.NotificationService;
-import cx.ring.services.PreferencesService;
+import net.jami.facades.ConversationFacade;
+import net.jami.model.Codec;
+import net.jami.model.Settings;
+import net.jami.model.Uri;
+import net.jami.services.AccountService;
+import net.jami.services.CallService;
+import net.jami.services.ContactService;
+import net.jami.services.DaemonService;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.HardwareService;
+import net.jami.services.HistoryService;
+import net.jami.services.NotificationService;
+import net.jami.services.PreferencesService;
 import cx.ring.tv.call.TVCallActivity;
 import cx.ring.utils.ConversationPath;
 import cx.ring.utils.DeviceUtils;
diff --git a/ring-android/app/src/main/java/cx/ring/service/OutgoingCallHandler.java b/ring-android/app/src/main/java/cx/ring/service/OutgoingCallHandler.java
index 894fa5215d505bb1a6f8c9da78307edcbc9ed391..1d0c3e5afc1647eb536b3defdd3ea6c1aecbfaa0 100644
--- a/ring-android/app/src/main/java/cx/ring/service/OutgoingCallHandler.java
+++ b/ring-android/app/src/main/java/cx/ring/service/OutgoingCallHandler.java
@@ -27,7 +27,7 @@ import android.preference.PreferenceManager;
 
 import cx.ring.R;
 import cx.ring.client.CallActivity;
-import cx.ring.model.Uri;
+import net.jami.model.Uri;
 
 public class OutgoingCallHandler extends BroadcastReceiver {
     public static final String KEY_CACHE_HAVE_RINGACCOUNT = "cache_haveRingAccount";
diff --git a/ring-android/app/src/main/java/cx/ring/services/CameraService.java b/ring-android/app/src/main/java/cx/ring/services/CameraService.java
index d1df48083ce86140a8ce41ef60f6af8223054a7e..241b3c92d22457a16d353a3aabf8561f8f77e626 100644
--- a/ring-android/app/src/main/java/cx/ring/services/CameraService.java
+++ b/ring-android/app/src/main/java/cx/ring/services/CameraService.java
@@ -67,12 +67,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import cx.ring.daemon.IntVect;
-import cx.ring.daemon.Ringservice;
-import cx.ring.daemon.RingserviceJNI;
-import cx.ring.daemon.StringMap;
-import cx.ring.daemon.UintVect;
-import cx.ring.utils.Tuple;
+import net.jami.daemon.IntVect;
+import net.jami.daemon.Ringservice;
+import net.jami.daemon.RingserviceJNI;
+import net.jami.daemon.StringMap;
+import net.jami.daemon.UintVect;
+import net.jami.utils.Tuple;
 import cx.ring.views.AutoFitTextureView;
 import io.reactivex.Completable;
 import io.reactivex.Maybe;
diff --git a/ring-android/app/src/main/java/cx/ring/services/ContactServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/ContactServiceImpl.java
index 6e727d90eac9a0000ca750267335a3e538d5948d..69d12c4b3d5e89d56101489fb686eef20c0ef0b4 100644
--- a/ring-android/app/src/main/java/cx/ring/services/ContactServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/ContactServiceImpl.java
@@ -30,17 +30,21 @@ import android.util.LongSparseArray;
 
 import androidx.annotation.NonNull;
 
+import net.jami.model.Phone;
+
 import java.util.HashMap;
 import java.util.Map;
 
 import javax.inject.Inject;
 
 import cx.ring.contacts.AvatarFactory;
-import cx.ring.model.CallContact;
-import cx.ring.model.Uri;
+import net.jami.model.CallContact;
+import net.jami.model.Uri;
 import cx.ring.utils.AndroidFileUtils;
-import cx.ring.utils.Tuple;
-import cx.ring.utils.VCardUtils;
+
+import net.jami.services.ContactService;
+import net.jami.utils.Tuple;
+import net.jami.utils.VCardUtils;
 import ezvcard.VCard;
 import io.reactivex.Completable;
 import io.reactivex.Single;
@@ -156,11 +160,11 @@ public class ContactServiceImpl extends ContactService {
                             contact.addPhoneNumber(uri, contactType, contactLabel);
                             break;
                         case ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE:
-                            contact.addNumber(uri, contactType, contactLabel, cx.ring.model.Phone.NumberType.SIP);
+                            contact.addNumber(uri, contactType, contactLabel, Phone.NumberType.SIP);
                             break;
                         case ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE:
                             if (uri.isHexId()) {
-                                contact.addNumber(uri, contactType, contactLabel, cx.ring.model.Phone.NumberType.UNKNOWN);
+                                contact.addNumber(uri, contactType, contactLabel, Phone.NumberType.UNKNOWN);
                             }
                             break;
                     }
@@ -277,7 +281,7 @@ public class ContactServiceImpl extends ContactService {
                 final int indexLabel = cursorPhones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.LABEL);
 
                 while (cursorPhones.moveToNext()) {
-                    callContact.addNumber(cursorPhones.getString(indexNumber), cursorPhones.getInt(indexType), cursorPhones.getString(indexLabel), cx.ring.model.Phone.NumberType.TEL);
+                    callContact.addNumber(cursorPhones.getString(indexNumber), cursorPhones.getInt(indexType), cursorPhones.getString(indexLabel), Phone.NumberType.TEL);
                     Log.d(TAG, "Phone:" + cursorPhones.getString(cursorPhones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
                 }
 
@@ -304,7 +308,7 @@ public class ContactServiceImpl extends ContactService {
                     String contactNumber = cursorSip.getString(indexSip);
 
                     if (!contactMime.contentEquals(ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE) || Uri.fromString(contactNumber).isHexId() || "ring".equalsIgnoreCase(cursorSip.getString(indexLabel))) {
-                        callContact.addNumber(contactNumber, cursorSip.getInt(indexType), cursorSip.getString(indexLabel), cx.ring.model.Phone.NumberType.SIP);
+                        callContact.addNumber(contactNumber, cursorSip.getInt(indexType), cursorSip.getString(indexLabel), Phone.NumberType.SIP);
                     }
                     Log.d(TAG, "SIP phone:" + contactNumber + " " + contactMime + " ");
                 }
diff --git a/ring-android/app/src/main/java/cx/ring/services/DataTransferService.java b/ring-android/app/src/main/java/cx/ring/services/DataTransferService.java
index 8ac694471054750675613219cf539a1c83fe9b03..48b0842a41a36d1e4c0155baa7da061874430152 100644
--- a/ring-android/app/src/main/java/cx/ring/services/DataTransferService.java
+++ b/ring-android/app/src/main/java/cx/ring/services/DataTransferService.java
@@ -32,13 +32,15 @@ import androidx.core.app.NotificationManagerCompat;
 import javax.inject.Inject;
 
 import cx.ring.application.JamiApplication;
-import cx.ring.utils.Log;
+
+import net.jami.services.NotificationService;
+import net.jami.utils.Log;
 
 public class DataTransferService extends Service {
     private final String TAG = DataTransferService.class.getSimpleName();
 
     @Inject
-    NotificationService mNotificationService;
+    net.jami.services.NotificationService mNotificationService;
     private NotificationManagerCompat notificationManager;
 
     private boolean isFirst = true;
diff --git a/ring-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.java
index 7e26fb49f01d3ab5b32b6b7e8a4e03b07353960d..6e3768dff7551a2c7d6ca68dfd151fc2b47c9b95 100644
--- a/ring-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.java
@@ -40,12 +40,13 @@ import javax.inject.Inject;
 import javax.inject.Named;
 
 import cx.ring.application.JamiApplication;
-import cx.ring.daemon.IntVect;
-import cx.ring.daemon.StringVect;
+import net.jami.daemon.IntVect;
+import net.jami.daemon.StringVect;
 import cx.ring.utils.AndroidFileUtils;
 import cx.ring.utils.NetworkUtils;
-import cx.ring.utils.StringUtils;
-import io.reactivex.android.schedulers.AndroidSchedulers;
+
+import net.jami.services.DeviceRuntimeService;
+import net.jami.utils.StringUtils;
 
 public class DeviceRuntimeServiceImpl extends DeviceRuntimeService {
 
diff --git a/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java
index 3e190d7b6aeaa932f17ca37a2cf34995992e40bb..f00630d7fffc2a483736983b8270ef197e74745c 100644
--- a/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java
@@ -29,7 +29,6 @@ import android.media.AudioManager;
 import android.media.MediaRecorder;
 import android.media.projection.MediaProjection;
 import android.os.Build;
-import android.text.TextUtils;
 import android.view.SurfaceHolder;
 import android.view.TextureView;
 import android.view.WindowManager;
@@ -46,17 +45,18 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import cx.ring.daemon.IntVect;
-import cx.ring.daemon.Ringservice;
-import cx.ring.daemon.StringMap;
-import cx.ring.daemon.UintVect;
-import cx.ring.model.Conference;
-import cx.ring.model.SipCall;
-import cx.ring.model.SipCall.CallStatus;
+import net.jami.daemon.IntVect;
+import net.jami.daemon.Ringservice;
+import net.jami.daemon.UintVect;
+import net.jami.model.Conference;
+import net.jami.model.SipCall;
+import net.jami.model.SipCall.CallStatus;
 import cx.ring.utils.BluetoothWrapper;
-import cx.ring.utils.Log;
+
+import net.jami.services.HardwareService;
+import net.jami.utils.Log;
 import cx.ring.utils.Ringer;
-import cx.ring.utils.Tuple;
+import net.jami.utils.Tuple;
 import io.reactivex.Completable;
 import io.reactivex.Observable;
 
diff --git a/ring-android/app/src/main/java/cx/ring/services/HistoryServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/HistoryServiceImpl.java
index 04da246d86422721395e65ea3ba3628d6c10f7e9..ea6d46108cf041650c70fcba0bb733df72997440 100644
--- a/ring-android/app/src/main/java/cx/ring/services/HistoryServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/HistoryServiceImpl.java
@@ -23,37 +23,30 @@ package cx.ring.services;
 
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteException;
 import android.util.Log;
 
 import com.j256.ormlite.dao.Dao;
 import com.j256.ormlite.support.ConnectionSource;
 
 import java.io.File;
-import java.io.IOException;
 import java.sql.SQLException;
-import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.inject.Inject;
 
-import cx.ring.R;
 import cx.ring.history.DatabaseHelper;
-import cx.ring.model.Conversation;
-import cx.ring.model.ConversationHistory;
-import cx.ring.model.Interaction;
-import cx.ring.model.Uri;
-import io.reactivex.Observable;
-import io.reactivex.subjects.BehaviorSubject;
-import io.reactivex.subjects.Subject;
+
+import net.jami.model.ConversationHistory;
+import net.jami.model.Interaction;
+import net.jami.model.Uri;
+import net.jami.services.HistoryService;
 
 import static cx.ring.fragments.ConversationFragment.KEY_PREFERENCE_CONVERSATION_LAST_READ;
 
 /**
  * Implements the necessary Android related methods for the {@link HistoryService}
  */
-public class HistoryServiceImpl extends HistoryService {
+public class HistoryServiceImpl extends net.jami.services.HistoryService {
     private static final String TAG = HistoryServiceImpl.class.getSimpleName();
     private final static String DATABASE_NAME = "history.db";
     private final static String LEGACY_DATABASE_KEY = "legacy";
diff --git a/ring-android/app/src/main/java/cx/ring/services/LocationSharingService.java b/ring-android/app/src/main/java/cx/ring/services/LocationSharingService.java
index c849964d503596985353d59f267db1af5c4eef11..d428420eca7b036ac9f1311e7797352ef0dd19a3 100644
--- a/ring-android/app/src/main/java/cx/ring/services/LocationSharingService.java
+++ b/ring-android/app/src/main/java/cx/ring/services/LocationSharingService.java
@@ -61,12 +61,15 @@ import javax.inject.Inject;
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.client.ConversationActivity;
-import cx.ring.daemon.Blob;
-import cx.ring.daemon.Ringservice;
-import cx.ring.daemon.StringMap;
-import cx.ring.facades.ConversationFacade;
+import net.jami.daemon.Blob;
+import net.jami.daemon.Ringservice;
+import net.jami.daemon.StringMap;
+import net.jami.facades.ConversationFacade;
 import cx.ring.fragments.ConversationFragment;
-import cx.ring.model.Uri;
+
+import net.jami.services.AccountService;
+import net.jami.services.CallService;
+
 import cx.ring.utils.ConversationPath;
 import io.reactivex.Observable;
 import io.reactivex.ObservableSource;
@@ -210,7 +213,7 @@ public class LocationSharingService extends Service implements LocationListener
                         .subscribe(location -> {
                             Log.w(TAG, "location send " + location + " to " + contactLocationShare.size());
                             StringMap msgs = new StringMap();
-                            msgs.setRaw(CallService.MIME_GEOLOCATION, Blob.fromString(location.toString()));
+                            msgs.setRaw(net.jami.services.CallService.MIME_GEOLOCATION, Blob.fromString(location.toString()));
                             for (ConversationPath p : contactLocationShare.keySet())  {
                                 Ringservice.sendAccountTextMessage(p.getAccountId(), p.getConversationId(), msgs);
                             }
@@ -228,7 +231,7 @@ public class LocationSharingService extends Service implements LocationListener
 
                 JSONObject jsonObject = new JSONObject();
                 try {
-                    jsonObject.put("type", AccountService.Location.Type.stop.toString());
+                    jsonObject.put("type", net.jami.services.AccountService.Location.Type.stop.toString());
                     jsonObject.put("time", Long.MAX_VALUE);
                 } catch (JSONException e) {
                     e.printStackTrace();
diff --git a/ring-android/app/src/main/java/cx/ring/services/LogServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/LogServiceImpl.java
index b3892c6432ea7afd9358bf6d412895c10e401ae9..5899098c05d053184988d0431b448132419fb4ae 100644
--- a/ring-android/app/src/main/java/cx/ring/services/LogServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/LogServiceImpl.java
@@ -21,6 +21,8 @@ package cx.ring.services;
 
 import android.util.Log;
 
+import net.jami.services.LogService;
+
 public class LogServiceImpl implements LogService {
 
     public void e(String tag, String message) {
diff --git a/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java
index f2b3eef53efeabf03585e6c72f5f6151ecd4c77b..e22755004e59a1a8f63fbfa188e76abc518105d9 100644
--- a/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java
@@ -70,16 +70,16 @@ import cx.ring.client.HomeActivity;
 import cx.ring.contactrequests.ContactRequestsFragment;
 import cx.ring.contacts.AvatarFactory;
 import cx.ring.fragments.ConversationFragment;
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conference;
-import cx.ring.model.Conversation;
-import cx.ring.model.Interaction;
-import cx.ring.model.Interaction.InteractionStatus;
-import cx.ring.model.DataTransfer;
-import cx.ring.model.SipCall;
-import cx.ring.model.TextMessage;
-import cx.ring.model.Uri;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.Conference;
+import net.jami.model.Conversation;
+import net.jami.model.Interaction;
+import net.jami.model.Interaction.InteractionStatus;
+import net.jami.model.DataTransfer;
+import net.jami.model.SipCall;
+import net.jami.model.TextMessage;
+import net.jami.model.Uri;
 import cx.ring.service.CallNotificationService;
 import cx.ring.service.DRingService;
 import cx.ring.settings.SettingsFragment;
@@ -87,7 +87,14 @@ import cx.ring.tv.call.TVCallActivity;
 import cx.ring.utils.ConversationPath;
 import cx.ring.utils.DeviceUtils;
 import cx.ring.utils.ResourceMapper;
-import cx.ring.utils.Tuple;
+
+import net.jami.services.AccountService;
+import net.jami.services.ContactService;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.HistoryService;
+import net.jami.services.NotificationService;
+import net.jami.services.PreferencesService;
+import net.jami.utils.Tuple;
 
 public class NotificationServiceImpl implements NotificationService {
 
diff --git a/ring-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.java
index fbf1637f363d6e0738724d254876a3353917565b..43fd18e97990efa0a08a5c3b5dd4fd1a14d4fd9f 100644
--- a/ring-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.java
@@ -38,7 +38,9 @@ import javax.inject.Inject;
 
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
-import cx.ring.model.Settings;
+import net.jami.model.Settings;
+import net.jami.services.PreferencesService;
+
 import cx.ring.utils.DeviceUtils;
 import cx.ring.utils.NetworkUtils;
 
diff --git a/ring-android/app/src/main/java/cx/ring/services/SyncService.java b/ring-android/app/src/main/java/cx/ring/services/SyncService.java
index 43b162e65c13b847f240d988ae00962a11aa7488..fdfa452237ecdae2b3a84fcc78dfbd8d1f1fdf49 100644
--- a/ring-android/app/src/main/java/cx/ring/services/SyncService.java
+++ b/ring-android/app/src/main/java/cx/ring/services/SyncService.java
@@ -32,6 +32,8 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.app.NotificationCompat;
 
+import net.jami.services.NotificationService;
+
 import java.util.Random;
 
 import javax.inject.Inject;
diff --git a/ring-android/app/src/main/java/cx/ring/services/VCardServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/VCardServiceImpl.java
index afc22c712d54eb249d5d6a1a47bd077734fa2c0f..81363900dbf6ce6f5700da8546b75465578bd1ca 100644
--- a/ring-android/app/src/main/java/cx/ring/services/VCardServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/VCardServiceImpl.java
@@ -28,10 +28,12 @@ import androidx.annotation.NonNull;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 
-import cx.ring.model.Account;
+import net.jami.model.Account;
 import cx.ring.utils.BitmapUtils;
-import cx.ring.utils.Tuple;
-import cx.ring.utils.VCardUtils;
+
+import net.jami.services.VCardService;
+import net.jami.utils.Tuple;
+import net.jami.utils.VCardUtils;
 import ezvcard.VCard;
 import ezvcard.parameter.ImageType;
 import ezvcard.property.Photo;
diff --git a/ring-android/app/src/main/java/cx/ring/settings/AccountFragment.java b/ring-android/app/src/main/java/cx/ring/settings/AccountFragment.java
index 1c5e0e3f48ab571553b6d018cf0ff56b404f0a63..2a7af1458e72d05f3f60213ff7fc7a7b63ec3af7 100644
--- a/ring-android/app/src/main/java/cx/ring/settings/AccountFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/settings/AccountFragment.java
@@ -40,10 +40,12 @@ import cx.ring.account.JamiAccountSummaryFragment;
 import cx.ring.application.JamiApplication;
 import cx.ring.client.HomeActivity;
 import cx.ring.databinding.FragAccountBinding;
-import cx.ring.services.AccountService;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.CompositeDisposable;
+import net.jami.model.Account;
+import net.jami.services.AccountService;
 
+/**
+ * TODO: improvements : handle multiples permissions for feature.
+ */
 public class AccountFragment extends Fragment implements ViewTreeObserver.OnScrollChangedListener {
 
     private static final int SCROLL_DIRECTION_UP = -1;
diff --git a/ring-android/app/src/main/java/cx/ring/settings/SettingsFragment.java b/ring-android/app/src/main/java/cx/ring/settings/SettingsFragment.java
index 2a8d4bde3a3bf0e800bb31558cb8b26919eb65cf..e39d407c193371af83687d95525cef49236d1627 100644
--- a/ring-android/app/src/main/java/cx/ring/settings/SettingsFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/settings/SettingsFragment.java
@@ -45,9 +45,10 @@ import cx.ring.application.JamiApplication;
 import cx.ring.client.HomeActivity;
 import cx.ring.daemon.Ringservice;
 import cx.ring.databinding.FragSettingsBinding;
-import cx.ring.model.Settings;
+import net.jami.model.Settings;
 import cx.ring.mvp.BaseSupportFragment;
-import cx.ring.mvp.GenericView;
+import net.jami.mvp.GenericView;
+import net.jami.settings.SettingsPresenter;
 
 /**
  * TODO: improvements : handle multiples permissions for feature.
diff --git a/ring-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginDetails.java b/ring-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginDetails.java
index 9c5e9cf6c4dd5d0cd603cbc5c1518d3e64ff4ab1..7b25bae52e3fe3fdb1dce2cfc60f241708d221d9 100644
--- a/ring-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginDetails.java
+++ b/ring-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginDetails.java
@@ -24,7 +24,7 @@ import java.io.File;
 import java.util.List;
 import java.util.Map;
 
-import cx.ring.daemon.Ringservice;
+import net.jami.daemon.Ringservice;
 
 /**
  * Class that contains PluginDetails like name, rootPath
diff --git a/ring-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginSettingsFragment.java b/ring-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginSettingsFragment.java
index 872a64d3a1816f0b9d605e5607e74c6cfd5582d6..24ff070903b31b235882f7b299adb296e744811a 100644
--- a/ring-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginSettingsFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginSettingsFragment.java
@@ -36,7 +36,7 @@ import java.util.Set;
 
 import cx.ring.R;
 import cx.ring.client.HomeActivity;
-import cx.ring.daemon.Ringservice;
+import net.jami.daemon.Ringservice;
 import cx.ring.plugins.PluginPreferences;
 import cx.ring.plugins.PluginUtils;
 
diff --git a/ring-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.java b/ring-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.java
index 8921a6461c9cc15162d54e9e610afb3146944c87..bc323bbfd050701a9bf1df804b14c44e54b4d832 100644
--- a/ring-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.java
@@ -25,7 +25,7 @@ import java.util.List;
 import cx.ring.R;
 import cx.ring.account.JamiAccountSummaryFragment;
 import cx.ring.client.HomeActivity;
-import cx.ring.daemon.Ringservice;
+import net.jami.daemon.Ringservice;
 import cx.ring.databinding.FragPluginsListSettingsBinding;
 import cx.ring.plugins.PluginUtils;
 import cx.ring.utils.AndroidFileUtils;
diff --git a/ring-android/app/src/main/java/cx/ring/share/ShareFragment.java b/ring-android/app/src/main/java/cx/ring/share/ShareFragment.java
index 560db7bd381f8d0c93cd2c785667fb98ec08ea7e..72dd53565cdc419888ee5847930306d1190d9837 100644
--- a/ring-android/app/src/main/java/cx/ring/share/ShareFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/share/ShareFragment.java
@@ -34,10 +34,12 @@ import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.FragShareBinding;
 import cx.ring.mvp.BaseSupportFragment;
-import cx.ring.mvp.GenericView;
-import cx.ring.utils.QRCodeUtils;
+import net.jami.mvp.GenericView;
+import net.jami.share.SharePresenter;
+import net.jami.share.ShareViewModel;
+import net.jami.utils.QRCodeUtils;
 
-public class ShareFragment extends BaseSupportFragment<SharePresenter> implements GenericView<ShareViewModel> {
+public class ShareFragment extends BaseSupportFragment<SharePresenter> implements GenericView<net.jami.share.ShareViewModel> {
 
     private String mUriToShow;
     private boolean isShareLocked = false;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsFragment.java b/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsFragment.java
index ef8bbe407104fdee32926f438388accac605f2ed..21c8b1ec53df4387b4ea88c4adb5b5edf806c6ad 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsFragment.java
@@ -36,7 +36,7 @@ import cx.ring.R;
 import cx.ring.tv.cards.Card;
 import cx.ring.tv.cards.iconcards.IconCard;
 import cx.ring.tv.cards.iconcards.IconCardHelper;
-import cx.ring.utils.Log;
+import net.jami.utils.Log;
 
 public class AboutDetailsFragment extends DetailsFragment {
     private static final String TAG = "AboutDetailsFragment";
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/JamiGuidedStepFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/JamiGuidedStepFragment.java
index 0bc109bff2876bc5546c0459aa3d3499ddf56133..1fe4786635b0ec31f0f5158734c2e7ad1c9d0dee 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/JamiGuidedStepFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/JamiGuidedStepFragment.java
@@ -29,7 +29,7 @@ import java.util.List;
 
 import javax.inject.Inject;
 
-import cx.ring.mvp.RootPresenter;
+import net.jami.mvp.RootPresenter;
 
 public abstract class JamiGuidedStepFragment<T extends RootPresenter> extends GuidedStepSupportFragment {
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/JamiPreferenceFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/JamiPreferenceFragment.java
index aa68ba3f246d0543aac79a59a4bdd16df4286e23..940b135cd9868cfd92964fa3a8284b0a5bb4af54 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/JamiPreferenceFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/JamiPreferenceFragment.java
@@ -28,7 +28,7 @@ import android.view.View;
 
 import javax.inject.Inject;
 
-import cx.ring.mvp.RootPresenter;
+import net.jami.mvp.RootPresenter;
 
 public abstract class JamiPreferenceFragment<T extends RootPresenter> extends LeanbackPreferenceFragmentCompat {
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountExport.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountExport.java
index ad3821779d118a5a1753464ad85ed3f4ce51a17b..510641a1ba6be5285df8c973909896fabbb4efae 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountExport.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountExport.java
@@ -43,10 +43,10 @@ import java.util.List;
 import java.util.Map;
 
 import cx.ring.R;
-import cx.ring.account.JamiAccountSummaryPresenter;
-import cx.ring.account.JamiAccountSummaryView;
+import net.jami.account.JamiAccountSummaryPresenter;
+import net.jami.account.JamiAccountSummaryView;
 import cx.ring.application.JamiApplication;
-import cx.ring.model.Account;
+import net.jami.model.Account;
 import cx.ring.utils.AndroidFileUtils;
 
 public class TVAccountExport extends JamiGuidedStepFragment<JamiAccountSummaryPresenter>
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountWizard.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountWizard.java
index c3fbaa92482fd857000128195cfef2582925ee77..051fe4399ad6563b85441a782276bb4146af9059 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountWizard.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountWizard.java
@@ -33,14 +33,14 @@ import java.io.File;
 
 import cx.ring.R;
 import cx.ring.account.AccountCreationModelImpl;
-import cx.ring.account.AccountWizardPresenter;
-import cx.ring.account.AccountWizardView;
+import net.jami.account.AccountWizardPresenter;
+import net.jami.account.AccountWizardView;
 import cx.ring.application.JamiApplication;
-import cx.ring.model.Account;
-import cx.ring.model.AccountConfig;
-import cx.ring.mvp.AccountCreationModel;
+import net.jami.model.Account;
+import net.jami.model.AccountConfig;
+import net.jami.mvp.AccountCreationModel;
 import cx.ring.mvp.BaseActivity;
-import cx.ring.utils.VCardUtils;
+import net.jami.utils.VCardUtils;
 import ezvcard.VCard;
 import io.reactivex.Single;
 import io.reactivex.schedulers.Schedulers;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVHomeAccountCreationFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVHomeAccountCreationFragment.java
index 0731bbf2bf2ed610835b92b60d7cd46b0dbd20a3..f9613338792e5c90e3d66f4b71cbc4552bd50c64 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVHomeAccountCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVHomeAccountCreationFragment.java
@@ -29,8 +29,8 @@ import java.util.List;
 
 import cx.ring.R;
 import cx.ring.account.AccountCreationModelImpl;
-import cx.ring.account.HomeAccountCreationPresenter;
-import cx.ring.account.HomeAccountCreationView;
+import net.jami.account.HomeAccountCreationPresenter;
+import net.jami.account.HomeAccountCreationView;
 import cx.ring.application.JamiApplication;
 
 public class TVHomeAccountCreationFragment
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVJamiAccountCreationFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVJamiAccountCreationFragment.java
index 78f953fe015ce69f7d2fe2e5f43b1a89baab3d39..4e12e00f045212b5d3aaf5fd68aecc71ee6c8a6b 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVJamiAccountCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVJamiAccountCreationFragment.java
@@ -21,7 +21,6 @@ import android.app.Activity;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import androidx.annotation.NonNull;
-import androidx.core.content.ContextCompat;
 import androidx.leanback.widget.GuidanceStylist;
 import androidx.leanback.widget.GuidedAction;
 import android.text.Editable;
@@ -34,12 +33,12 @@ import java.util.List;
 
 import cx.ring.R;
 import cx.ring.account.AccountCreationModelImpl;
-import cx.ring.account.JamiAccountCreationPresenter;
-import cx.ring.account.JamiAccountCreationView;
+import net.jami.account.JamiAccountCreationPresenter;
+import net.jami.account.JamiAccountCreationView;
 import cx.ring.application.JamiApplication;
-import cx.ring.mvp.AccountCreationModel;
-import cx.ring.utils.Log;
-import cx.ring.utils.StringUtils;
+import net.jami.mvp.AccountCreationModel;
+import net.jami.utils.Log;
+import net.jami.utils.StringUtils;
 
 public class TVJamiAccountCreationFragment
         extends JamiGuidedStepFragment<JamiAccountCreationPresenter>
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVJamiLinkAccountFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVJamiLinkAccountFragment.java
index a897d2a4e816d08b92a553bb121b051baf0c82ed..e0175df48a5c4cf136dbce044757059b6e91ff7d 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVJamiLinkAccountFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVJamiLinkAccountFragment.java
@@ -29,11 +29,11 @@ import java.util.List;
 
 import cx.ring.R;
 import cx.ring.account.AccountCreationModelImpl;
-import cx.ring.account.JamiLinkAccountPresenter;
-import cx.ring.account.JamiLinkAccountView;
+import net.jami.account.JamiLinkAccountPresenter;
+import net.jami.account.JamiLinkAccountView;
 import cx.ring.application.JamiApplication;
-import cx.ring.mvp.AccountCreationModel;
-import cx.ring.utils.StringUtils;
+import net.jami.mvp.AccountCreationModel;
+import net.jami.utils.StringUtils;
 
 public class TVJamiLinkAccountFragment extends JamiGuidedStepFragment<JamiLinkAccountPresenter>
         implements JamiLinkAccountView {
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileCreationFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileCreationFragment.java
index 8e7a77525163ad9a460722de4f02bc332e8e171a..14e519e3d25fa93eaab5b8d15b777acd5c32346b 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileCreationFragment.java
@@ -45,11 +45,11 @@ import java.util.List;
 import cx.ring.R;
 import cx.ring.account.AccountCreationModelImpl;
 import cx.ring.account.ProfileCreationFragment;
-import cx.ring.account.ProfileCreationPresenter;
-import cx.ring.account.ProfileCreationView;
+import net.jami.account.ProfileCreationPresenter;
+import net.jami.account.ProfileCreationView;
 import cx.ring.application.JamiApplication;
-import cx.ring.model.Account;
-import cx.ring.mvp.AccountCreationModel;
+import net.jami.model.Account;
+import net.jami.mvp.AccountCreationModel;
 import cx.ring.tv.camera.CustomCameraActivity;
 import cx.ring.utils.AndroidFileUtils;
 import cx.ring.views.AvatarDrawable;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileEditingFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileEditingFragment.java
index a2626e070fa5ff1fa71a3cea749526d71e59a4f2..e1de94c77bd4b4b8b8029f768d44fc1c11954ee6 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileEditingFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileEditingFragment.java
@@ -41,10 +41,10 @@ import java.util.List;
 import cx.ring.R;
 import cx.ring.account.ProfileCreationFragment;
 import cx.ring.application.JamiApplication;
-import cx.ring.model.Account;
-import cx.ring.navigation.HomeNavigationPresenter;
-import cx.ring.navigation.HomeNavigationView;
-import cx.ring.navigation.HomeNavigationViewModel;
+import net.jami.model.Account;
+import net.jami.navigation.HomeNavigationPresenter;
+import net.jami.navigation.HomeNavigationView;
+import net.jami.navigation.HomeNavigationViewModel;
 import cx.ring.tv.camera.CustomCameraActivity;
 import cx.ring.utils.AndroidFileUtils;
 import cx.ring.utils.BitmapUtils;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVSettingsFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVSettingsFragment.java
index 33c1acef6fd7e7205a8b664176d9820a0b427c70..0e3c172c0c258202917f65c2e674759b3db1a903 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVSettingsFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVSettingsFragment.java
@@ -41,10 +41,10 @@ import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.fragments.GeneralAccountPresenter;
 import cx.ring.fragments.GeneralAccountView;
-import cx.ring.model.Account;
-import cx.ring.model.ConfigKey;
+import net.jami.model.Account;
+import net.jami.model.ConfigKey;
 import cx.ring.services.SharedPreferencesServiceImpl;
-import cx.ring.utils.Tuple;
+import net.jami.utils.Tuple;
 
 public class TVSettingsFragment extends LeanbackSettingsFragmentCompat {
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVShareFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVShareFragment.java
index f70c9f12c9922226681c375bbf448ce2d59d0c7f..646a8757d38f31aecf1dd0a1b4524b2cb4863444 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVShareFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVShareFragment.java
@@ -31,14 +31,14 @@ import androidx.annotation.Nullable;
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.databinding.TvFragShareBinding;
-import cx.ring.model.Account;
+import net.jami.model.Account;
 import cx.ring.mvp.BaseSupportFragment;
-import cx.ring.mvp.GenericView;
+import net.jami.mvp.GenericView;
 import cx.ring.services.VCardServiceImpl;
-import cx.ring.share.SharePresenter;
-import cx.ring.share.ShareViewModel;
-import cx.ring.utils.Log;
-import cx.ring.utils.QRCodeUtils;
+import net.jami.share.SharePresenter;
+import net.jami.share.ShareViewModel;
+import net.jami.utils.Log;
+import net.jami.utils.QRCodeUtils;
 import cx.ring.views.AvatarDrawable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.CompositeDisposable;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallActivity.java b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallActivity.java
index 1077b0582b4d177a2023722527fee1983bd27d0d..1bf07419d3798838c5d319b8bcdc09a5a2d45f01 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallActivity.java
@@ -34,10 +34,10 @@ import androidx.fragment.app.FragmentTransaction;
 
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
-import cx.ring.call.CallView;
+import net.jami.call.CallView;
 import cx.ring.fragments.ConversationFragment;
-import cx.ring.services.NotificationService;
-import cx.ring.utils.Log;
+import net.jami.services.NotificationService;
+import net.jami.utils.Log;
 
 public class TVCallActivity extends FragmentActivity {
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java
index 90c20b9f4b0be1bd5e8f5c6c1971d2819dfa6317..0ebcbca71eb2c32fadc73ee5cddaa3f8006c4c77 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java
@@ -70,8 +70,8 @@ import javax.inject.Inject;
 
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
-import cx.ring.call.CallPresenter;
-import cx.ring.call.CallView;
+import net.jami.call.CallPresenter;
+import net.jami.call.CallView;
 import cx.ring.client.ContactDetailsActivity;
 import cx.ring.client.ConversationSelectionActivity;
 import cx.ring.databinding.ItemParticipantLabelBinding;
@@ -79,12 +79,14 @@ import cx.ring.databinding.TvFragCallBinding;
 import cx.ring.fragments.CallFragment;
 import cx.ring.adapters.ConfParticipantAdapter;
 import cx.ring.fragments.ConversationFragment;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conference;
-import cx.ring.model.SipCall;
+import net.jami.model.CallContact;
+import net.jami.model.Conference;
+import net.jami.model.SipCall;
 import cx.ring.mvp.BaseSupportFragment;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.services.HardwareService;
+
+import net.jami.daemon.RingserviceJNI;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.HardwareService;
 import cx.ring.tv.main.HomeActivity;
 import cx.ring.utils.ActionHelper;
 import cx.ring.utils.ContentUriHandler;
@@ -698,7 +700,7 @@ public class TVCallFragment extends BaseSupportFragment<CallPresenter> implement
 
     @Override
     public void toggleCallMediaHandler(String id, String callId, boolean toggle) {
-        cx.ring.daemon.RingserviceJNI.toggleCallMediaHandler(id, callId, toggle);
+        RingserviceJNI.toggleCallMediaHandler(id, callId, toggle);
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/tv/cards/contacts/ContactCard.java b/ring-android/app/src/main/java/cx/ring/tv/cards/contacts/ContactCard.java
index f85cfdaae2c2591ab8bec4b5c556281d5574b7a7..6cbf3abee375b4f2d38f4e0d38150f1e6992d122 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/cards/contacts/ContactCard.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/cards/contacts/ContactCard.java
@@ -19,8 +19,8 @@
  */
 package cx.ring.tv.cards.contacts;
 
-import cx.ring.model.CallContact;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.model.CallContact;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.tv.cards.Card;
 
 public class ContactCard extends Card {
diff --git a/ring-android/app/src/main/java/cx/ring/tv/cards/contacts/ContactCardPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/cards/contacts/ContactCardPresenter.java
index f0798ae0f5bfa139240b0488fec12fbcc53d65c5..f215482ee9a72ee921f8d0fbb109c9487bd36c26 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/cards/contacts/ContactCardPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/cards/contacts/ContactCardPresenter.java
@@ -20,19 +20,13 @@
 package cx.ring.tv.cards.contacts;
 
 import android.content.Context;
-import android.graphics.drawable.Drawable;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+
 import androidx.leanback.widget.ImageCardView;
 import android.view.ContextThemeWrapper;
 
-import com.bumptech.glide.request.target.ViewTarget;
-import com.bumptech.glide.request.transition.Transition;
-
 import cx.ring.R;
-import cx.ring.contacts.AvatarFactory;
-import cx.ring.model.CallContact;
-import cx.ring.smartlist.SmartListViewModel;
+
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.tv.cards.AbstractCardPresenter;
 import cx.ring.tv.cards.Card;
 import cx.ring.views.AvatarDrawable;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactDetailPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactDetailPresenter.java
index 494c1d7af65ad29aaf1a93241dcc8693458a2078..d1a0320640171bb60032c51b987d774117ac6e61 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactDetailPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactDetailPresenter.java
@@ -28,7 +28,7 @@ import androidx.fragment.app.FragmentManager;
 import androidx.leanback.widget.Presenter;
 
 import cx.ring.R;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.tv.conversation.TvConversationFragment;
 import cx.ring.utils.ConversationPath;
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactFragment.java b/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactFragment.java
index 5b75bac06d3b9bade0e3af2cc8413c9c13e0ffd6..9f5978db08f04f77b53d45d7cb951224dc9e45a8 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactFragment.java
@@ -47,9 +47,9 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.fragments.ConversationFragment;
-import cx.ring.model.Uri;
-import cx.ring.services.NotificationService;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.model.Uri;
+import net.jami.services.NotificationService;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.tv.call.TVCallActivity;
 import cx.ring.tv.contactrequest.TVContactRequestDetailPresenter;
 import cx.ring.tv.main.BaseDetailFragment;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactPresenter.java
index a3734c74bbaf636108e63d5d02a7f21b83cf11c2..0d4ae932869eff5ba033df0a11ca9a6db49687b6 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactPresenter.java
@@ -22,19 +22,19 @@ package cx.ring.tv.contact;
 
 import javax.inject.Inject;
 
-import cx.ring.daemon.Blob;
-import cx.ring.facades.ConversationFacade;
-import cx.ring.model.Account;
-import cx.ring.model.Conference;
-import cx.ring.model.Conversation;
-import cx.ring.model.SipCall;
-import cx.ring.model.Uri;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.services.VCardService;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.daemon.Blob;
+import net.jami.facades.ConversationFacade;
+import net.jami.model.Account;
+import net.jami.model.Conference;
+import net.jami.model.Conversation;
+import net.jami.model.SipCall;
+import net.jami.model.Uri;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
+import net.jami.services.VCardService;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.utils.ConversationPath;
-import cx.ring.utils.VCardUtils;
+import net.jami.utils.VCardUtils;
 import io.reactivex.Scheduler;
 
 public class TVContactPresenter extends RootPresenter<TVContactView> {
diff --git a/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactView.java b/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactView.java
index 251a976a3577b60ce31170ac04f69fb26b1b3775..f7304a4b9ac5cc63bc2aa53181ae3a8526fa4461 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactView.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/contact/TVContactView.java
@@ -20,9 +20,9 @@
  */
 package cx.ring.tv.contact;
 
-import cx.ring.model.Uri;
-import cx.ring.mvp.BaseView;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.model.Uri;
+import net.jami.mvp.BaseView;
+import net.jami.smartlist.SmartListViewModel;
 
 public interface TVContactView extends BaseView {
     void showContact(SmartListViewModel model);
diff --git a/ring-android/app/src/main/java/cx/ring/tv/contactrequest/TVContactRequestDetailPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/contactrequest/TVContactRequestDetailPresenter.java
index f797751982263ec50925c09ec07e3d494cdb6262..6a14df79bf16759a9cc1ac65a302c50f29e3ee3b 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/contactrequest/TVContactRequestDetailPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/contactrequest/TVContactRequestDetailPresenter.java
@@ -21,7 +21,7 @@ package cx.ring.tv.contactrequest;
 
 import androidx.leanback.widget.AbstractDetailsDescriptionPresenter;
 
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.smartlist.SmartListViewModel;
 
 public class TVContactRequestDetailPresenter extends AbstractDetailsDescriptionPresenter {
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.java b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.java
index 4e968ad08a721097d50f1dd42aac1e939bedd471..fa11b97b10387f981810458764a029c176af8182 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.java
@@ -67,22 +67,22 @@ import java.util.concurrent.TimeUnit;
 
 import cx.ring.R;
 import cx.ring.client.MediaViewerActivity;
-import cx.ring.conversation.ConversationPresenter;
-import cx.ring.model.CallContact;
-import cx.ring.model.ContactEvent;
-import cx.ring.model.DataTransfer;
-import cx.ring.model.Interaction;
-import cx.ring.model.Interaction.InteractionStatus;
-import cx.ring.model.Interaction.InteractionType;
-import cx.ring.model.SipCall;
-import cx.ring.model.TextMessage;
+import net.jami.conversation.ConversationPresenter;
+import net.jami.model.CallContact;
+import net.jami.model.ContactEvent;
+import net.jami.model.DataTransfer;
+import net.jami.model.Interaction;
+import net.jami.model.Interaction.InteractionStatus;
+import net.jami.model.Interaction.InteractionType;
+import net.jami.model.SipCall;
+import net.jami.model.TextMessage;
 import cx.ring.service.DRingService;
 import cx.ring.utils.AndroidFileUtils;
 import cx.ring.utils.ContentUriHandler;
 import cx.ring.utils.GlideApp;
 import cx.ring.utils.GlideOptions;
 import cx.ring.utils.ResourceMapper;
-import cx.ring.utils.StringUtils;
+import net.jami.utils.StringUtils;
 import io.reactivex.Observable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.schedulers.Schedulers;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.java b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.java
index bcdae780995c75f2c73ef26d00d0c6a9ff885f95..3b15f10f9c618421a86fad4ab500b6667a707679 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.java
@@ -64,22 +64,22 @@ import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.client.MediaViewerActivity;
 import cx.ring.contacts.AvatarFactory;
-import cx.ring.conversation.ConversationPresenter;
-import cx.ring.conversation.ConversationView;
-import cx.ring.model.Account;
+import net.jami.conversation.ConversationPresenter;
+import net.jami.conversation.ConversationView;
+import net.jami.model.Account;
 import cx.ring.databinding.FragConversationTvBinding;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conversation;
-import cx.ring.model.DataTransfer;
-import cx.ring.model.Error;
-import cx.ring.model.Interaction;
+import net.jami.model.CallContact;
+import net.jami.model.Conversation;
+import net.jami.model.DataTransfer;
+import net.jami.model.Error;
+import net.jami.model.Interaction;
 import cx.ring.mvp.BaseSupportFragment;
 import cx.ring.service.DRingService;
 import cx.ring.tv.camera.CustomCameraActivity;
 import cx.ring.utils.AndroidFileUtils;
 import cx.ring.utils.ContentUriHandler;
 import cx.ring.utils.ConversationPath;
-import cx.ring.utils.StringUtils;
+import net.jami.utils.StringUtils;
 import cx.ring.views.AvatarDrawable;
 import io.reactivex.Completable;
 import io.reactivex.Single;
@@ -737,7 +737,7 @@ public class TvConversationFragment extends BaseSupportFragment<ConversationPres
     }
 
     @Override
-    public void displayNumberSpinner(Conversation conversation, cx.ring.model.Uri number) {
+    public void displayNumberSpinner(Conversation conversation, net.jami.model.Uri number) {
 
     }
 
@@ -767,12 +767,12 @@ public class TvConversationFragment extends BaseSupportFragment<ConversationPres
     }
 
     @Override
-    public void goToCallActivityWithResult(String accountId, cx.ring.model.Uri conversationUri, cx.ring.model.Uri contactRingId, boolean audioOnly) {
+    public void goToCallActivityWithResult(String accountId, net.jami.model.Uri conversationUri, net.jami.model.Uri contactRingId, boolean audioOnly) {
 
     }
 
     @Override
-    public void goToContactActivity(String accountId, cx.ring.model.Uri contactRingId) {
+    public void goToContactActivity(String accountId, net.jami.model.Uri contactRingId) {
 
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/BaseBrowseFragment.java b/ring-android/app/src/main/java/cx/ring/tv/main/BaseBrowseFragment.java
index c04ec34defa1f0dbeb435ce1a0013d41bf77d8b4..965e64dfc7edc0cb8dd8fd33cd8e2d14f2d8b639 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/BaseBrowseFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/BaseBrowseFragment.java
@@ -27,9 +27,9 @@ import android.widget.Toast;
 import javax.inject.Inject;
 
 import cx.ring.R;
-import cx.ring.model.Error;
-import cx.ring.mvp.BaseView;
-import cx.ring.mvp.RootPresenter;
+import net.jami.model.Error;
+import net.jami.mvp.BaseView;
+import net.jami.mvp.RootPresenter;
 
 public class BaseBrowseFragment<T extends RootPresenter> extends BrowseSupportFragment implements BaseView {
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/BaseDetailFragment.java b/ring-android/app/src/main/java/cx/ring/tv/main/BaseDetailFragment.java
index b0824ebd22c5f770185ed5bc4960797bf6257f34..8e9dc7740f95cb21b85ed914070f71532c705eeb 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/BaseDetailFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/BaseDetailFragment.java
@@ -27,9 +27,9 @@ import javax.inject.Inject;
 
 import androidx.leanback.app.DetailsSupportFragment;
 import cx.ring.R;
-import cx.ring.model.Error;
-import cx.ring.mvp.BaseView;
-import cx.ring.mvp.RootPresenter;
+import net.jami.model.Error;
+import net.jami.mvp.BaseView;
+import net.jami.mvp.RootPresenter;
 
 public class BaseDetailFragment<T extends RootPresenter> extends DetailsSupportFragment implements BaseView {
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/HomeActivity.java b/ring-android/app/src/main/java/cx/ring/tv/main/HomeActivity.java
index c48391d2185f3342c44e06af8cd3822a361fc38e..4b43296beb028a5386a1637a5d42bc1646eb83d1 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/HomeActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/HomeActivity.java
@@ -31,7 +31,7 @@ import javax.inject.Inject;
 
 import cx.ring.R;
 import cx.ring.application.JamiApplication;
-import cx.ring.services.AccountService;
+import net.jami.services.AccountService;
 import cx.ring.tv.account.TVAccountWizard;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.CompositeDisposable;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/MainFragment.java b/ring-android/app/src/main/java/cx/ring/tv/main/MainFragment.java
index 63cd7f69cd38e4b15ac5504ac5eb8ce5e5a54375..c87b454370e2c193c25b63e602b591387a88d4cf 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/MainFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/MainFragment.java
@@ -66,10 +66,10 @@ import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.contacts.AvatarFactory;
 import cx.ring.fragments.ConversationFragment;
-import cx.ring.model.Account;
-import cx.ring.navigation.HomeNavigationViewModel;
+import net.jami.model.Account;
+import net.jami.navigation.HomeNavigationViewModel;
 import cx.ring.services.VCardServiceImpl;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.tv.about.AboutActivity;
 import cx.ring.tv.account.TVAccountExport;
 import cx.ring.tv.account.TVProfileEditingFragment;
@@ -91,7 +91,7 @@ import cx.ring.utils.AndroidFileUtils;
 import cx.ring.utils.BitmapUtils;
 import cx.ring.utils.ContentUriHandler;
 import cx.ring.utils.ConversationPath;
-import cx.ring.utils.QRCodeUtils;
+import net.jami.utils.QRCodeUtils;
 import cx.ring.views.AvatarDrawable;
 import io.reactivex.Observable;
 import io.reactivex.Single;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java
index b42421a6c71e7e54ec51355af362dc4ccdee72ec..7975e58611da29fbb9337bad2c2c54fabff44785 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java
@@ -29,11 +29,11 @@ import java.util.concurrent.TimeUnit;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.facades.ConversationFacade;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.navigation.HomeNavigationViewModel;
-import cx.ring.services.AccountService;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.facades.ConversationFacade;
+import net.jami.mvp.RootPresenter;
+import net.jami.navigation.HomeNavigationViewModel;
+import net.jami.services.AccountService;
+import net.jami.smartlist.SmartListViewModel;
 import io.reactivex.Observable;
 import io.reactivex.Scheduler;
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/MainView.java b/ring-android/app/src/main/java/cx/ring/tv/main/MainView.java
index 596f3e0d7dd6b2af7dd4fddaaa65cb5d60234762..32bd0cec342581efc0f7dcc377ef33e803e76bd6 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/MainView.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/MainView.java
@@ -21,10 +21,10 @@ package cx.ring.tv.main;
 
 import java.util.List;
 
-import cx.ring.model.Account;
-import cx.ring.navigation.HomeNavigationViewModel;
-import cx.ring.smartlist.SmartListViewModel;
-import cx.ring.model.Error;
+import net.jami.model.Account;
+import net.jami.navigation.HomeNavigationViewModel;
+import net.jami.smartlist.SmartListViewModel;
+import net.jami.model.Error;
 
 public interface MainView {
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/search/BaseSearchFragment.java b/ring-android/app/src/main/java/cx/ring/tv/search/BaseSearchFragment.java
index 2a2475c5c05cd2d92f27ecaaf8c40e4e0fa12d4a..0f988e99bcb576bd5b3f2b20d19318af9c9026e2 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/search/BaseSearchFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/search/BaseSearchFragment.java
@@ -28,9 +28,9 @@ import androidx.leanback.app.SearchSupportFragment;
 import javax.inject.Inject;
 
 import cx.ring.R;
-import cx.ring.model.Error;
-import cx.ring.mvp.BaseView;
-import cx.ring.mvp.RootPresenter;
+import net.jami.model.Error;
+import net.jami.mvp.BaseView;
+import net.jami.mvp.RootPresenter;
 
 public class BaseSearchFragment<T extends RootPresenter> extends SearchSupportFragment
         implements BaseView {
diff --git a/ring-android/app/src/main/java/cx/ring/tv/search/ContactSearchFragment.java b/ring-android/app/src/main/java/cx/ring/tv/search/ContactSearchFragment.java
index 90a4440eb643e9a9e300288f7cdfaf49817c680d..4221f588ed3d6da82db6d23e660cf76ea3528533 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/search/ContactSearchFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/search/ContactSearchFragment.java
@@ -37,8 +37,8 @@ import cx.ring.R;
 import cx.ring.application.JamiApplication;
 import cx.ring.client.CallActivity;
 import cx.ring.fragments.ConversationFragment;
-import cx.ring.model.CallContact;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.model.CallContact;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.tv.call.TVCallActivity;
 import cx.ring.tv.cards.Card;
 import cx.ring.tv.cards.CardPresenterSelector;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/search/ContactSearchPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/search/ContactSearchPresenter.java
index 76d8723501a865aa437abebcba2a98ce3c003a88..68e432226662f36ae652abcac447437ff4b1eac4 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/search/ContactSearchPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/search/ContactSearchPresenter.java
@@ -25,14 +25,14 @@ import java.util.concurrent.TimeUnit;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Uri;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.services.HardwareService;
-import cx.ring.services.VCardService;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.Uri;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
+import net.jami.services.HardwareService;
+import net.jami.services.VCardService;
+import net.jami.smartlist.SmartListViewModel;
 import io.reactivex.Scheduler;
 import io.reactivex.subjects.PublishSubject;
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/search/ContactSearchView.java b/ring-android/app/src/main/java/cx/ring/tv/search/ContactSearchView.java
index 2559163392274f67f8ef0f74b9acaa884d7a6ea7..292bcc1a4d0f4cfbda1d9b5a747251354e7ac694 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/search/ContactSearchView.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/search/ContactSearchView.java
@@ -19,9 +19,9 @@
  */
 package cx.ring.tv.search;
 
-import cx.ring.model.CallContact;
-import cx.ring.model.Error;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.model.CallContact;
+import net.jami.model.Error;
+import net.jami.smartlist.SmartListViewModel;
 
 public interface ContactSearchView {
 
diff --git a/ring-android/app/src/main/java/cx/ring/utils/ActionHelper.java b/ring-android/app/src/main/java/cx/ring/utils/ActionHelper.java
index 9b02f1102c214c036f5484392e71460cc3d2f551..67d1086e080c8727a8320b86bf3f9f36cb136bc9 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/ActionHelper.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/ActionHelper.java
@@ -24,15 +24,16 @@ import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
 import android.provider.ContactsContract;
+import android.util.Log;
 
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 
 import java.util.ArrayList;
 
 import cx.ring.R;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conversation;
-import cx.ring.model.Uri;
+import net.jami.model.CallContact;
+import net.jami.model.Conversation;
+import net.jami.model.Uri;
 
 public class ActionHelper {
 
diff --git a/ring-android/app/src/main/java/cx/ring/utils/AndroidFileUtils.java b/ring-android/app/src/main/java/cx/ring/utils/AndroidFileUtils.java
index 6e0f8cef853a3ea69b9f00f72200fd2063b83415..beb579c449853861d853a8f71d1f51d2c99f15f4 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/AndroidFileUtils.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/AndroidFileUtils.java
@@ -52,6 +52,8 @@ import java.util.Locale;
 
 import androidx.annotation.NonNull;
 
+import net.jami.utils.FileUtils;
+
 import io.reactivex.Completable;
 import io.reactivex.Single;
 import io.reactivex.schedulers.Schedulers;
@@ -156,7 +158,7 @@ public class AndroidFileUtils {
     public static boolean copyAsset(AssetManager assetManager, String fromAssetPath, File toPath) {
         try (InputStream in = assetManager.open(fromAssetPath);
              OutputStream out = new FileOutputStream(toPath)) {
-            FileUtils.copyFile(in, out);
+            net.jami.utils.FileUtils.copyFile(in, out);
             out.flush();
             return true;
         } catch (IOException e) {
@@ -308,7 +310,7 @@ public class AndroidFileUtils {
                   FileOutputStream output = new FileOutputStream(file)) {
                 if (inputStream == null)
                     throw new FileNotFoundException();
-                FileUtils.copyFile(inputStream, output);
+                net.jami.utils.FileUtils.copyFile(inputStream, output);
                 output.flush();
             }
             return file;
@@ -338,7 +340,7 @@ public class AndroidFileUtils {
     public static Completable copyFileToUri(ContentResolver cr, File input, Uri outUri){
         return Completable.fromAction(() -> {
             try (InputStream inputStream = new FileInputStream(input); OutputStream outputStream = cr.openOutputStream(outUri)) {
-                FileUtils.copyFile(inputStream, outputStream);
+                net.jami.utils.FileUtils.copyFile(inputStream, outputStream);
             }
         }).subscribeOn(Schedulers.io());
     }
@@ -347,7 +349,7 @@ public class AndroidFileUtils {
         File file = getConversationPath(context, conversationId, name);
         FileOutputStream output = new FileOutputStream(file);
         InputStream inputStream = context.getContentResolver().openInputStream(uri);
-        FileUtils.copyFile(inputStream, output);
+        net.jami.utils.FileUtils.copyFile(inputStream, output);
         return file;
     }
 
@@ -401,7 +403,7 @@ public class AndroidFileUtils {
         Log.d(TAG, "writeCacheFileToExtStorage: finalFile=" + finalFile + ",exists=" + finalFile.exists());
         try (InputStream inputStream = context.getContentResolver().openInputStream(cacheFile);
              FileOutputStream output = new FileOutputStream(finalFile)) {
-            FileUtils.copyFile(inputStream, output);
+            net.jami.utils.FileUtils.copyFile(inputStream, output);
         }
         return finalFile.toString();
     }
diff --git a/ring-android/app/src/main/java/cx/ring/utils/BitmapUtils.java b/ring-android/app/src/main/java/cx/ring/utils/BitmapUtils.java
index 2723437521321d898384e6c33703c7d013e27bf2..776d6ae48d0e3427834e767fe84a1a52655bc09d 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/BitmapUtils.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/BitmapUtils.java
@@ -25,8 +25,10 @@ import android.graphics.Canvas;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.util.Base64;
+import android.util.Log;
 
 import androidx.annotation.NonNull;
+
 import ezvcard.parameter.ImageType;
 import ezvcard.property.Photo;
 
@@ -109,7 +111,7 @@ public final class BitmapUtils
         width /= ratio;
         bmp = Bitmap.createScaledBitmap(bmp, width, height, true);
 
-        Log.d(TAG, "reduceBitmap: bitmap size after x" + ratio + " reduce " + bmp.getByteCount());
+        net.jami.utils.Log.d(TAG, "reduceBitmap: bitmap size after x" + ratio + " reduce " + bmp.getByteCount());
         return bmp;
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/utils/ContentUriHandler.java b/ring-android/app/src/main/java/cx/ring/utils/ContentUriHandler.java
index a29eabbe11e9776b366068a2d941fe43fe747e1a..5dfc0f760a74715df4b0fbf86680e5db6598ca8e 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/ContentUriHandler.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/ContentUriHandler.java
@@ -28,6 +28,9 @@ import android.os.Build;
 import androidx.annotation.NonNull;
 import androidx.core.content.FileProvider;
 
+import net.jami.utils.FileUtils;
+import net.jami.utils.Log;
+
 import java.io.File;
 
 import cx.ring.BuildConfig;
@@ -77,10 +80,10 @@ public class ContentUriHandler {
                 return FileProvider.getUriForFile(context, authority, file);
             } catch (IllegalArgumentException e) {
                 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
-                    Log.w(TAG, "Returning Uri.fromFile to avoid Huawei 'external-files-path' bug for pre-N devices", e);
+                    net.jami.utils.Log.w(TAG, "Returning Uri.fromFile to avoid Huawei 'external-files-path' bug for pre-N devices", e);
                     return Uri.fromFile(file);
                 } else {
-                    Log.w(TAG, "ANR Risk -- Copying the file the location cache to avoid Huawei 'external-files-path' bug for N+ devices", e);
+                    net.jami.utils.Log.w(TAG, "ANR Risk -- Copying the file the location cache to avoid Huawei 'external-files-path' bug for N+ devices", e);
                     // Note: Periodically clear this cache
                     final File cacheFolder = new File(context.getCacheDir(), HUAWEI_MANUFACTURER);
                     final File cacheLocation = new File(cacheFolder, file.getName());
@@ -88,7 +91,7 @@ public class ContentUriHandler {
                         Log.i(TAG, "Completed Android N+ Huawei file copy. Attempting to return the cached file");
                         return FileProvider.getUriForFile(context, authority, cacheLocation);
                     }
-                    Log.e(TAG, "Failed to copy the Huawei file. Re-throwing exception");
+                    net.jami.utils.Log.e(TAG, "Failed to copy the Huawei file. Re-throwing exception");
                     throw new IllegalArgumentException("Huawei devices are unsupported for Android N");
                 }
             }
diff --git a/ring-android/app/src/main/java/cx/ring/utils/ConversationPath.java b/ring-android/app/src/main/java/cx/ring/utils/ConversationPath.java
index 5eb454eece8b8970046dc881fe59fc601e7ba18c..c8f695cf754f0794dfc1d3770e88746d291937fd 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/ConversationPath.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/ConversationPath.java
@@ -12,8 +12,9 @@ import java.util.List;
 import java.util.Objects;
 
 import cx.ring.fragments.ConversationFragment;
-import cx.ring.model.Conversation;
-import cx.ring.model.Interaction;
+import net.jami.model.Conversation;
+import net.jami.model.Interaction;
+import net.jami.utils.Tuple;
 
 public class ConversationPath {
     private final String accountId;
@@ -53,7 +54,7 @@ public class ConversationPath {
                 .appendEncodedPath(contactId)
                 .build();
     }
-    public static Uri toUri(String accountId, @NonNull cx.ring.model.Uri conversationUri) {
+    public static Uri toUri(String accountId, @NonNull net.jami.model.Uri conversationUri) {
         return ContentUriHandler.CONVERSATION_CONTENT_URI.buildUpon()
                 .appendEncodedPath(accountId)
                 .appendEncodedPath(conversationUri.getUri())
@@ -63,7 +64,7 @@ public class ConversationPath {
         return toUri(conversation.getAccountId(), conversation.getUri());
     }
     public static Uri toUri(@NonNull Interaction interaction) {
-        return toUri(interaction.getAccount(), cx.ring.model.Uri.fromString(interaction.getConversation().getParticipant()));
+        return toUri(interaction.getAccount(), net.jami.model.Uri.fromString(interaction.getConversation().getParticipant()));
     }
 
     public Bundle toBundle() {
@@ -79,7 +80,7 @@ public class ConversationPath {
         bundle.putString(ConversationFragment.KEY_ACCOUNT_ID, accountId);
         return bundle;
     }
-    public static Bundle toBundle(String accountId, cx.ring.model.Uri uri) {
+    public static Bundle toBundle(String accountId, net.jami.model.Uri uri) {
         return toBundle(accountId, uri.getUri());
     }
 
@@ -159,7 +160,7 @@ public class ConversationPath {
         return Objects.hash(accountId, conversationId);
     }
 
-    public cx.ring.model.Uri getConversationUri() {
-        return cx.ring.model.Uri.fromString(conversationId);
+    public net.jami.model.Uri getConversationUri() {
+        return net.jami.model.Uri.fromString(conversationId);
     }
 }
diff --git a/ring-android/app/src/main/java/cx/ring/utils/DeviceUtils.java b/ring-android/app/src/main/java/cx/ring/utils/DeviceUtils.java
index cce21bd0f64a6c4d410a98ec8ed4bd04c6a13cbc..64dbed9a445e8882124852e5dd784bac40d61edc 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/DeviceUtils.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/DeviceUtils.java
@@ -24,6 +24,8 @@ import android.app.UiModeManager;
 import android.content.Context;
 import android.content.res.Configuration;
 
+import net.jami.utils.Log;
+
 import static android.content.Context.UI_MODE_SERVICE;
 
 public class DeviceUtils {
@@ -37,7 +39,7 @@ public class DeviceUtils {
 
     public static boolean isTv(Context context) {
         if (context == null) {
-            Log.e(TAG, "null context");
+            net.jami.utils.Log.e(TAG, "null context");
             return false;
         }
         UiModeManager uiModeManager = (UiModeManager) context.getSystemService(UI_MODE_SERVICE);
diff --git a/ring-android/app/src/main/java/cx/ring/utils/RegisteredNameTextWatcher.java b/ring-android/app/src/main/java/cx/ring/utils/RegisteredNameTextWatcher.java
index 90ed158fc6f7a7613e5ce2dc6c7956ed230e3113..355723412ed177873496399ea7e02e2a31bc56fb 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/RegisteredNameTextWatcher.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/RegisteredNameTextWatcher.java
@@ -28,7 +28,8 @@ import android.widget.EditText;
 import java.lang.ref.WeakReference;
 
 import cx.ring.R;
-import cx.ring.services.AccountService;
+import net.jami.services.AccountService;
+import net.jami.utils.NameLookupInputHandler;
 
 public class RegisteredNameTextWatcher implements TextWatcher {
 
@@ -41,7 +42,7 @@ public class RegisteredNameTextWatcher implements TextWatcher {
         mInputLayout = new WeakReference<>(inputLayout);
         mInputText = new WeakReference<>(inputText);
         mLookingForAvailability = context.getString(R.string.looking_for_username_availability);
-        mNameLookupInputHandler = new NameLookupInputHandler(accountService, accountId);
+        mNameLookupInputHandler = new net.jami.utils.NameLookupInputHandler(accountService, accountId);
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/utils/ResourceMapper.java b/ring-android/app/src/main/java/cx/ring/utils/ResourceMapper.java
index ebf443ced39eeab3b43c75ee17c3668bf67ad2b3..2d1662334987ff1cd2e8d1b1e0b87b05c62932e6 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/ResourceMapper.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/ResourceMapper.java
@@ -23,7 +23,7 @@ package cx.ring.utils;
 import android.content.Context;
 
 import cx.ring.R;
-import cx.ring.model.Interaction.InteractionStatus;
+import net.jami.model.Interaction.InteractionStatus;
 
 public class ResourceMapper {
 
diff --git a/ring-android/app/src/main/java/cx/ring/utils/UiUpdater.java b/ring-android/app/src/main/java/cx/ring/utils/UiUpdater.java
index fe3514796cd7f813864eee0ccf5551242185408f..1c82c6795b55d45160f84dbd931b7dc5aa708516 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/UiUpdater.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/UiUpdater.java
@@ -3,6 +3,8 @@ package cx.ring.utils;
 import android.os.Handler;
 import android.os.Looper;
 
+import net.jami.utils.Log;
+
 public class UiUpdater {
         private static final String TAG = UiUpdater.class.getSimpleName();
 
diff --git a/ring-android/app/src/main/java/cx/ring/viewholders/SmartListViewHolder.java b/ring-android/app/src/main/java/cx/ring/viewholders/SmartListViewHolder.java
index 875325ca56be58e69e85c04711ed748da9880c32..9daff026965556b7ffe67e68904cae0f6b5530a3 100644
--- a/ring-android/app/src/main/java/cx/ring/viewholders/SmartListViewHolder.java
+++ b/ring-android/app/src/main/java/cx/ring/viewholders/SmartListViewHolder.java
@@ -22,11 +22,11 @@ package cx.ring.viewholders;
 import cx.ring.R;
 import cx.ring.databinding.ItemSmartlistBinding;
 import cx.ring.databinding.ItemSmartlistHeaderBinding;
-import cx.ring.model.ContactEvent;
-import cx.ring.model.Interaction;
-import cx.ring.model.SipCall;
-import cx.ring.smartlist.SmartListViewModel;
-import cx.ring.utils.Log;
+import net.jami.model.ContactEvent;
+import net.jami.model.Interaction;
+import net.jami.model.SipCall;
+import net.jami.smartlist.SmartListViewModel;
+
 import cx.ring.utils.ResourceMapper;
 import cx.ring.views.AvatarDrawable;
 import io.reactivex.Observable;
diff --git a/ring-android/app/src/main/java/cx/ring/views/AvatarDrawable.java b/ring-android/app/src/main/java/cx/ring/views/AvatarDrawable.java
index 550e0ad3e4f569dab70785b8407adec7a98d236e..e2d982cf7a24c71deb801905e0da060d25095882 100644
--- a/ring-android/app/src/main/java/cx/ring/views/AvatarDrawable.java
+++ b/ring-android/app/src/main/java/cx/ring/views/AvatarDrawable.java
@@ -37,18 +37,17 @@ import android.graphics.drawable.Drawable;
 import androidx.annotation.NonNull;
 import androidx.core.content.ContextCompat;
 import cx.ring.R;
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conversation;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.Conversation;
 import cx.ring.services.VCardServiceImpl;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.smartlist.SmartListViewModel;
 import cx.ring.utils.DeviceUtils;
-import cx.ring.utils.HashUtils;
+import net.jami.utils.HashUtils;
 import io.reactivex.Single;
 
 import android.graphics.drawable.VectorDrawable;
 import android.text.TextUtils;
-import android.util.Log;
 import android.util.TypedValue;
 
 import java.util.ArrayList;
diff --git a/ring-android/app/src/main/java/cx/ring/views/CredentialPreferenceDialog.java b/ring-android/app/src/main/java/cx/ring/views/CredentialPreferenceDialog.java
index e5459f0a2d54b31ac171474962da1ab2011c0ace..5ac2d735f19b02f7914fdc2f99117bacf101ca5e 100644
--- a/ring-android/app/src/main/java/cx/ring/views/CredentialPreferenceDialog.java
+++ b/ring-android/app/src/main/java/cx/ring/views/CredentialPreferenceDialog.java
@@ -28,7 +28,7 @@ import android.widget.EditText;
 
 import androidx.preference.PreferenceDialogFragmentCompat;
 import cx.ring.R;
-import cx.ring.model.AccountCredentials;
+import net.jami.model.AccountCredentials;
 
 public class CredentialPreferenceDialog extends PreferenceDialogFragmentCompat {
     private static final String SAVE_STATE_TEXT = "CredentialPreferenceDialog.creds";
diff --git a/ring-android/app/src/main/java/cx/ring/views/CredentialsPreference.java b/ring-android/app/src/main/java/cx/ring/views/CredentialsPreference.java
index eeff75b04f807f7f007d9e843ad8c2fd20dea5c1..9fc4f9d7bcea50e6b24afde195373a4ba2b481d1 100644
--- a/ring-android/app/src/main/java/cx/ring/views/CredentialsPreference.java
+++ b/ring-android/app/src/main/java/cx/ring/views/CredentialsPreference.java
@@ -27,7 +27,7 @@ import android.text.TextUtils;
 import android.util.AttributeSet;
 
 import cx.ring.R;
-import cx.ring.model.AccountCredentials;
+import net.jami.model.AccountCredentials;
 
 public class CredentialsPreference extends DialogPreference {
     private AccountCredentials creds;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/AccountWizardPresenter.java b/ring-android/libringclient/src/main/java/net/jami/account/AccountWizardPresenter.java
similarity index 89%
rename from ring-android/libringclient/src/main/java/cx/ring/account/AccountWizardPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/account/AccountWizardPresenter.java
index d13213ae81beb59e84151f047ef2408ce63936e3..4523cb124c8c1419bfdf28381c1b11f5eb2dccf3 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/AccountWizardPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/AccountWizardPresenter.java
@@ -17,7 +17,11 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.account;
+package net.jami.account;
+
+import net.jami.services.AccountService;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.PreferencesService;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -25,29 +29,26 @@ import java.util.Map;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.model.Account;
-import cx.ring.model.AccountConfig;
-import cx.ring.model.ConfigKey;
-import cx.ring.model.Settings;
-import cx.ring.mvp.AccountCreationModel;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.services.PreferencesService;
-import cx.ring.utils.Log;
-import cx.ring.utils.StringUtils;
+import net.jami.model.Account;
+import net.jami.model.AccountConfig;
+import net.jami.model.ConfigKey;
+import net.jami.model.Settings;
+import net.jami.mvp.AccountCreationModel;
+import net.jami.mvp.RootPresenter;
+import net.jami.utils.Log;
+import net.jami.utils.StringUtils;
 import io.reactivex.Observable;
 import io.reactivex.Scheduler;
 import io.reactivex.Single;
 import io.reactivex.subjects.BehaviorSubject;
 
-public class AccountWizardPresenter extends RootPresenter<AccountWizardView> {
+public class AccountWizardPresenter extends RootPresenter<net.jami.account.AccountWizardView> {
 
     public static final String TAG = AccountWizardPresenter.class.getSimpleName();
 
-    private final AccountService mAccountService;
-    private final PreferencesService mPreferences;
-    private final DeviceRuntimeService mDeviceService;
+    private final net.jami.services.AccountService mAccountService;
+    private final net.jami.services.PreferencesService mPreferences;
+    private final net.jami.services.DeviceRuntimeService mDeviceService;
     private final Scheduler mUiScheduler;
 
     //private boolean mCreationError = false;
@@ -55,7 +56,7 @@ public class AccountWizardPresenter extends RootPresenter<AccountWizardView> {
     private String mAccountType;
     private AccountCreationModel mAccountCreationModel;
 
-    private Observable<Account> newAccount;
+    private Observable<net.jami.model.Account> newAccount;
 
     @Inject
     public AccountWizardPresenter(AccountService accountService,
@@ -77,7 +78,7 @@ public class AccountWizardPresenter extends RootPresenter<AccountWizardView> {
         }
     }
 
-    private void setProxyDetails(AccountCreationModel accountCreationModel, Map<String, String> details)  {
+    private void setProxyDetails(net.jami.mvp.AccountCreationModel accountCreationModel, Map<String, String> details)  {
         if (accountCreationModel.isPush()) {
             details.put(ConfigKey.PROXY_ENABLED.key(), AccountConfig.TRUE_STR);
             String pushToken = mDeviceService.getPushToken();
@@ -106,7 +107,7 @@ public class AccountWizardPresenter extends RootPresenter<AccountWizardView> {
         createAccount(accountCreationModel, newAccount);
     }
 
-    public void initJamiAccountCreation(AccountCreationModel accountCreationModel, String defaultAccountName) {
+    public void initJamiAccountCreation(net.jami.mvp.AccountCreationModel accountCreationModel, String defaultAccountName) {
         Single<Map<String, String>> newAccount = initRingAccountDetails(defaultAccountName)
                 .map(accountDetails -> {
                     if (!StringUtils.isEmpty(accountCreationModel.getUsername())) {
@@ -121,7 +122,7 @@ public class AccountWizardPresenter extends RootPresenter<AccountWizardView> {
         createAccount(accountCreationModel, newAccount);
     }
 
-    public void initJamiAccountLink(AccountCreationModel accountCreationModel, String defaultAccountName) {
+    public void initJamiAccountLink(net.jami.mvp.AccountCreationModel accountCreationModel, String defaultAccountName) {
         Single<Map<String, String>> newAccount = initRingAccountDetails(defaultAccountName)
                 .map(accountDetails -> {
                     Settings settings = mPreferences.getSettings();
@@ -160,7 +161,7 @@ public class AccountWizardPresenter extends RootPresenter<AccountWizardView> {
                     .observeOn(mUiScheduler)
                     .subscribe(acc -> {
                         accountCreationModel.setNewAccount(acc);
-                        AccountWizardView view = getView();
+                        net.jami.account.AccountWizardView view = getView();
                         if (view != null) {
                             view.displayProgress(false);
                             String newState = acc.getRegistrationState();
@@ -185,7 +186,7 @@ public class AccountWizardPresenter extends RootPresenter<AccountWizardView> {
     }
 
     public void successDialogClosed() {
-        AccountWizardView view = getView();
+        net.jami.account.AccountWizardView view = getView();
         if (view != null) {
             getView().finish(true);
         }
@@ -243,7 +244,7 @@ public class AccountWizardPresenter extends RootPresenter<AccountWizardView> {
         return account;
     }
 
-    public void profileCreated(AccountCreationModel accountCreationModel, boolean saveProfile) {
+    public void profileCreated(net.jami.mvp.AccountCreationModel accountCreationModel, boolean saveProfile) {
         getView().blockOrientation();
         getView().displayProgress(true);
 
@@ -265,7 +266,7 @@ public class AccountWizardPresenter extends RootPresenter<AccountWizardView> {
                 .observeOn(mUiScheduler)
                 .subscribe(account -> {
                     mCreatingAccount = false;
-                    AccountWizardView view = getView();
+                    net.jami.account.AccountWizardView view = getView();
                     if (view != null) {
                         view.displayProgress(false);
                         String newState = account.getRegistrationState();
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/AccountWizardView.java b/ring-android/libringclient/src/main/java/net/jami/account/AccountWizardView.java
similarity index 93%
rename from ring-android/libringclient/src/main/java/cx/ring/account/AccountWizardView.java
rename to ring-android/libringclient/src/main/java/net/jami/account/AccountWizardView.java
index 98410c17feca4207e2b56d7f18c689850d4415bb..15cf6d01a4ef0f5bc4548b8717580b38c903f1ae 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/AccountWizardView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/AccountWizardView.java
@@ -17,10 +17,10 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.account;
+package net.jami.account;
 
-import cx.ring.model.Account;
-import cx.ring.mvp.AccountCreationModel;
+import net.jami.model.Account;
+import net.jami.mvp.AccountCreationModel;
 import ezvcard.VCard;
 import io.reactivex.Single;
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/HomeAccountCreationPresenter.java b/ring-android/libringclient/src/main/java/net/jami/account/HomeAccountCreationPresenter.java
similarity index 95%
rename from ring-android/libringclient/src/main/java/cx/ring/account/HomeAccountCreationPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/account/HomeAccountCreationPresenter.java
index e2bcaf82dcc90f21891c55b258933ed729e77523..785054519e8989fafdcd91a6d88fd5f46f8a5f88 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/HomeAccountCreationPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/HomeAccountCreationPresenter.java
@@ -18,11 +18,11 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.account;
+package net.jami.account;
 
 import javax.inject.Inject;
 
-import cx.ring.mvp.RootPresenter;
+import net.jami.mvp.RootPresenter;
 
 public class HomeAccountCreationPresenter extends RootPresenter<HomeAccountCreationView> {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/HomeAccountCreationView.java b/ring-android/libringclient/src/main/java/net/jami/account/HomeAccountCreationView.java
similarity index 97%
rename from ring-android/libringclient/src/main/java/cx/ring/account/HomeAccountCreationView.java
rename to ring-android/libringclient/src/main/java/net/jami/account/HomeAccountCreationView.java
index f5b8474584d7d86d9bd301938dae2b73842ee1df..5655da80593b9ae0b92efab0d805a1125ed90df7 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/HomeAccountCreationView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/HomeAccountCreationView.java
@@ -18,7 +18,7 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.account;
+package net.jami.account;
 
 public interface HomeAccountCreationView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountConnectPresenter.java b/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountConnectPresenter.java
similarity index 94%
rename from ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountConnectPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/account/JamiAccountConnectPresenter.java
index 5037d62719bd836674e494757d3ef4b7dda267ff..3afb60f43ce59e46fbd8fcf326c6d97dbff6887a 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountConnectPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountConnectPresenter.java
@@ -17,13 +17,13 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.account;
+package net.jami.account;
 
 import javax.inject.Inject;
 
-import cx.ring.mvp.AccountCreationModel;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.utils.StringUtils;
+import net.jami.mvp.AccountCreationModel;
+import net.jami.mvp.RootPresenter;
+import net.jami.utils.StringUtils;
 
 public class JamiAccountConnectPresenter extends RootPresenter<JamiConnectAccountView> {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountCreationPresenter.java b/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountCreationPresenter.java
similarity index 86%
rename from ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountCreationPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/account/JamiAccountCreationPresenter.java
index 203b4a88ba72742d345a576bb29d43f64a7ed391..760a6e4fb9cb4a4972be8c0b269406efeaf4d266 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountCreationPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountCreationPresenter.java
@@ -18,27 +18,28 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.account;
+package net.jami.account;
+
+import net.jami.services.AccountService;
 
 import java.util.concurrent.TimeUnit;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.mvp.AccountCreationModel;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.utils.StringUtils;
+import net.jami.mvp.AccountCreationModel;
+import net.jami.mvp.RootPresenter;
+import net.jami.utils.StringUtils;
 import io.reactivex.Scheduler;
 import io.reactivex.subjects.PublishSubject;
 
-public class JamiAccountCreationPresenter extends RootPresenter<JamiAccountCreationView> {
+public class JamiAccountCreationPresenter extends RootPresenter<net.jami.account.JamiAccountCreationView> {
 
     public static final String TAG = JamiAccountCreationPresenter.class.getSimpleName();
     private static final int PASSWORD_MIN_LENGTH = 6;
     private static final long TYPING_DELAY = 350L;
     private final PublishSubject<String> contactQuery = PublishSubject.create();
-    protected AccountService mAccountService;
+    protected net.jami.services.AccountService mAccountService;
     @Inject
     @Named("UiScheduler")
     protected Scheduler mUiScheduler;
@@ -55,7 +56,7 @@ public class JamiAccountCreationPresenter extends RootPresenter<JamiAccountCreat
     }
 
     @Override
-    public void bindView(JamiAccountCreationView view) {
+    public void bindView(net.jami.account.JamiAccountCreationView view) {
         super.bindView(view);
         mCompositeDisposable.add(contactQuery
                 .debounce(TYPING_DELAY, TimeUnit.MILLISECONDS)
@@ -84,9 +85,9 @@ public class JamiAccountCreationPresenter extends RootPresenter<JamiAccountCreat
         isUsernameCorrect = false;
 
         if (showLoadingAnimation) {
-            JamiAccountCreationView view = getView();
+            net.jami.account.JamiAccountCreationView view = getView();
             if (view != null)
-                view.updateUsernameAvailability(JamiAccountCreationView.UsernameAvailabilityStatus.LOADING);
+                view.updateUsernameAvailability(net.jami.account.JamiAccountCreationView.UsernameAvailabilityStatus.LOADING);
             showLoadingAnimation = false;
         }
     }
@@ -149,7 +150,7 @@ public class JamiAccountCreationPresenter extends RootPresenter<JamiAccountCreat
 
     public void createAccount() {
         if (isInputValid()) {
-            JamiAccountCreationView view = getView();
+            net.jami.account.JamiAccountCreationView view = getView();
             view.goToAccountCreation(mAccountCreationModel);
         }
     }
@@ -163,12 +164,12 @@ public class JamiAccountCreationPresenter extends RootPresenter<JamiAccountCreat
     private void checkForms() {
         boolean valid = isInputValid();
         if(valid && isUsernameCorrect)
-            getView().updateUsernameAvailability(JamiAccountCreationView.
+            getView().updateUsernameAvailability(net.jami.account.JamiAccountCreationView.
                     UsernameAvailabilityStatus.AVAILABLE);
     }
 
     private void onLookupResult(String name, String address, int state) {
-        JamiAccountCreationView view = getView();
+        net.jami.account.JamiAccountCreationView view = getView();
         //Once we get the result, we can show the loading animation again when the user types
         showLoadingAnimation = true;
         if (view == null) {
@@ -176,26 +177,26 @@ public class JamiAccountCreationPresenter extends RootPresenter<JamiAccountCreat
         }
         if (name == null || name.isEmpty()) {
 
-            view.updateUsernameAvailability(JamiAccountCreationView.
+            view.updateUsernameAvailability(net.jami.account.JamiAccountCreationView.
                     UsernameAvailabilityStatus.RESET);
             isUsernameCorrect = false;
         } else {
             switch (state) {
                 case 0:
                     // on found
-                    view.updateUsernameAvailability(JamiAccountCreationView.
+                    view.updateUsernameAvailability(net.jami.account.JamiAccountCreationView.
                             UsernameAvailabilityStatus.ERROR_USERNAME_TAKEN);
                     isUsernameCorrect = false;
                     break;
                 case 1:
                     // invalid name
-                    view.updateUsernameAvailability(JamiAccountCreationView.
+                    view.updateUsernameAvailability(net.jami.account.JamiAccountCreationView.
                             UsernameAvailabilityStatus.ERROR_USERNAME_INVALID);
                     isUsernameCorrect = false;
                     break;
                 case 2:
                     // available
-                    view.updateUsernameAvailability(JamiAccountCreationView.
+                    view.updateUsernameAvailability(net.jami.account.JamiAccountCreationView.
                             UsernameAvailabilityStatus.AVAILABLE);
                     mAccountCreationModel.setUsername(name);
                     isUsernameCorrect = true;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountCreationView.java b/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountCreationView.java
similarity index 95%
rename from ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountCreationView.java
rename to ring-android/libringclient/src/main/java/net/jami/account/JamiAccountCreationView.java
index d76f698951d0e1850e3433467937d8a1411900e3..642a8e919320a1ebbe94738010797b7ae328e87d 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountCreationView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountCreationView.java
@@ -17,9 +17,9 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.account;
+package net.jami.account;
 
-import cx.ring.mvp.AccountCreationModel;
+import net.jami.mvp.AccountCreationModel;
 
 public interface JamiAccountCreationView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java b/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountSummaryPresenter.java
similarity index 91%
rename from ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/account/JamiAccountSummaryPresenter.java
index 6776d89eb0db12f61f1a22ee8305e153cee8aadc..fcf37148a35824e14110b5f1f207a20439df77b0 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountSummaryPresenter.java
@@ -18,7 +18,10 @@
  *  along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package cx.ring.account;
+package net.jami.account;
+
+import net.jami.services.AccountService;
+import net.jami.services.DeviceRuntimeService;
 
 import java.io.File;
 import java.net.SocketException;
@@ -26,13 +29,11 @@ import java.net.SocketException;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.model.Account;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.utils.Log;
-import cx.ring.utils.StringUtils;
-import cx.ring.utils.VCardUtils;
+import net.jami.model.Account;
+import net.jami.mvp.RootPresenter;
+import net.jami.utils.Log;
+import net.jami.utils.StringUtils;
+import net.jami.utils.VCardUtils;
 import ezvcard.VCard;
 import ezvcard.property.FormattedName;
 import ezvcard.property.Photo;
@@ -42,12 +43,12 @@ import io.reactivex.Scheduler;
 import io.reactivex.Single;
 import io.reactivex.schedulers.Schedulers;
 
-public class JamiAccountSummaryPresenter extends RootPresenter<JamiAccountSummaryView> {
+public class JamiAccountSummaryPresenter extends RootPresenter<net.jami.account.JamiAccountSummaryView> {
 
     private static final String TAG = JamiAccountSummaryPresenter.class.getSimpleName();
 
-    private final DeviceRuntimeService mDeviceRuntimeService;
-    private final AccountService mAccountService;
+    private final net.jami.services.DeviceRuntimeService mDeviceRuntimeService;
+    private final net.jami.services.AccountService mAccountService;
     private String mAccountID;
 
     @Inject
@@ -93,14 +94,14 @@ public class JamiAccountSummaryPresenter extends RootPresenter<JamiAccountSummar
     public void setAccountId(String accountID) {
         mCompositeDisposable.clear();
         mAccountID = accountID;
-        JamiAccountSummaryView v = getView();
+        net.jami.account.JamiAccountSummaryView v = getView();
         Account account = mAccountService.getAccount(mAccountID);
         if (v != null && account != null)
             v.accountChanged(account);
         mCompositeDisposable.add(mAccountService.getObservableAccountUpdates(mAccountID)
                 .observeOn(mUiScheduler)
                 .subscribe(a -> {
-                    JamiAccountSummaryView view = getView();
+                    net.jami.account.JamiAccountSummaryView view = getView();
                     if (view != null)
                         view.accountChanged(a);
                 }));
@@ -118,7 +119,7 @@ public class JamiAccountSummaryPresenter extends RootPresenter<JamiAccountSummar
     }
 
     public void changePassword(String oldPassword, String newPassword) {
-        JamiAccountSummaryView view = getView();
+        net.jami.account.JamiAccountSummaryView view = getView();
         if (view != null)
             view.showPasswordProgressDialog();
         mCompositeDisposable.add(mAccountService.setAccountPassword(mAccountID, oldPassword, newPassword)
@@ -192,7 +193,7 @@ public class JamiAccountSummaryPresenter extends RootPresenter<JamiAccountSummar
     public void cameraClicked() {
         boolean hasPermission = mDeviceRuntimeService.hasVideoPermission() &&
                 mDeviceRuntimeService.hasWriteExternalStoragePermission();
-        JamiAccountSummaryView view = getView();
+        net.jami.account.JamiAccountSummaryView view = getView();
         if (view != null) {
             if (hasPermission) {
                 view.gotToImageCapture();
@@ -229,9 +230,9 @@ public class JamiAccountSummaryPresenter extends RootPresenter<JamiAccountSummar
         return null;
     }
 
-    public String getAccountAlias(Account account) {
+    public String getAccountAlias(net.jami.model.Account account) {
         if (account == null) {
-            cx.ring.utils.Log.e(TAG, "Not able to get account alias");
+            Log.e(TAG, "Not able to get account alias");
             return null;
         }
         String alias = getAlias(account);
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryView.java b/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountSummaryView.java
similarity index 96%
rename from ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryView.java
rename to ring-android/libringclient/src/main/java/net/jami/account/JamiAccountSummaryView.java
index 85eb6d0208b0d8cc089ac83a298410ebbbf6b365..51960f6b431f75bc2b75ca96b1650fa5774f3506 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/JamiAccountSummaryView.java
@@ -17,12 +17,12 @@
  *  along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package cx.ring.account;
+package net.jami.account;
 
 import java.io.File;
 import java.util.Map;
 
-import cx.ring.model.Account;
+import net.jami.model.Account;
 
 public interface JamiAccountSummaryView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/JamiConnectAccountView.java b/ring-android/libringclient/src/main/java/net/jami/account/JamiConnectAccountView.java
similarity index 93%
rename from ring-android/libringclient/src/main/java/cx/ring/account/JamiConnectAccountView.java
rename to ring-android/libringclient/src/main/java/net/jami/account/JamiConnectAccountView.java
index 650ac1daa355dcc4131229557b6937c3e30f54c7..d838414c822a8bd55ac904581e2f125601a1cfef 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/JamiConnectAccountView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/JamiConnectAccountView.java
@@ -17,9 +17,9 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.account;
+package net.jami.account;
 
-import cx.ring.mvp.AccountCreationModel;
+import net.jami.mvp.AccountCreationModel;
 
 public interface JamiConnectAccountView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/JamiLinkAccountPresenter.java b/ring-android/libringclient/src/main/java/net/jami/account/JamiLinkAccountPresenter.java
similarity index 91%
rename from ring-android/libringclient/src/main/java/cx/ring/account/JamiLinkAccountPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/account/JamiLinkAccountPresenter.java
index c875815e06e79a247156facf4f6af08a1275bba6..a0c73d3641a190b2c63e11e68c9727ca7b31ecef 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/JamiLinkAccountPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/JamiLinkAccountPresenter.java
@@ -17,14 +17,14 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.account;
+package net.jami.account;
 
 import javax.inject.Inject;
 
-import cx.ring.mvp.AccountCreationModel;
-import cx.ring.mvp.RootPresenter;
+import net.jami.mvp.AccountCreationModel;
+import net.jami.mvp.RootPresenter;
 
-public class JamiLinkAccountPresenter extends RootPresenter<JamiLinkAccountView> {
+public class JamiLinkAccountPresenter extends RootPresenter<net.jami.account.JamiLinkAccountView> {
 
     private AccountCreationModel mAccountCreationModel;
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/JamiLinkAccountView.java b/ring-android/libringclient/src/main/java/net/jami/account/JamiLinkAccountView.java
similarity index 93%
rename from ring-android/libringclient/src/main/java/cx/ring/account/JamiLinkAccountView.java
rename to ring-android/libringclient/src/main/java/net/jami/account/JamiLinkAccountView.java
index 256c62805a835cde0169f1f1fb09469cc0153d74..7ad90609319fcccf473bc160efc6b87af8cd1ea1 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/JamiLinkAccountView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/JamiLinkAccountView.java
@@ -17,9 +17,9 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.account;
+package net.jami.account;
 
-import cx.ring.mvp.AccountCreationModel;
+import net.jami.mvp.AccountCreationModel;
 
 public interface JamiLinkAccountView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/LinkDevicePresenter.java b/ring-android/libringclient/src/main/java/net/jami/account/LinkDevicePresenter.java
similarity index 93%
rename from ring-android/libringclient/src/main/java/cx/ring/account/LinkDevicePresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/account/LinkDevicePresenter.java
index 3c9a520542599f4ec8fa3abaa97b38611b63a486..52f238d0fd4fefaa9a72c95bb554082dfe734f59 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/LinkDevicePresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/LinkDevicePresenter.java
@@ -18,23 +18,25 @@
  *  along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package cx.ring.account;
+package net.jami.account;
+
+import net.jami.services.AccountService;
 
 import java.net.SocketException;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.model.Account;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
+import net.jami.model.Account;
+import net.jami.mvp.RootPresenter;
+
 import io.reactivex.Scheduler;
 
 public class LinkDevicePresenter extends RootPresenter<LinkDeviceView> {
 
     private static final String TAG = LinkDevicePresenter.class.getSimpleName();
 
-    private AccountService mAccountService;
+    private net.jami.services.AccountService mAccountService;
     private String mAccountID;
 
     @Inject
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/LinkDeviceView.java b/ring-android/libringclient/src/main/java/net/jami/account/LinkDeviceView.java
similarity index 94%
rename from ring-android/libringclient/src/main/java/cx/ring/account/LinkDeviceView.java
rename to ring-android/libringclient/src/main/java/net/jami/account/LinkDeviceView.java
index 6f11e70857b7539efba60b63de472b05108cf294..864c59336b79d4782ada3459308641c215550657 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/LinkDeviceView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/LinkDeviceView.java
@@ -17,9 +17,9 @@
  *  along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package cx.ring.account;
+package net.jami.account;
 
-import cx.ring.model.Account;
+import net.jami.model.Account;
 
 public interface LinkDeviceView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/ProfileCreationPresenter.java b/ring-android/libringclient/src/main/java/net/jami/account/ProfileCreationPresenter.java
similarity index 87%
rename from ring-android/libringclient/src/main/java/cx/ring/account/ProfileCreationPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/account/ProfileCreationPresenter.java
index 7eca959bd9be42f2e164e77f34f376b6a9ced2a0..c814a92cb0a7a92742716f57aecebd9e536ab542 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/ProfileCreationPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/ProfileCreationPresenter.java
@@ -17,27 +17,28 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.account;
+package net.jami.account;
+
+import net.jami.mvp.AccountCreationModel;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.HardwareService;
 
 import javax.inject.Inject;
 
-import cx.ring.mvp.AccountCreationModel;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.services.HardwareService;
-import cx.ring.utils.Log;
+import net.jami.mvp.RootPresenter;
+import net.jami.utils.Log;
 import io.reactivex.Scheduler;
 import io.reactivex.Single;
 
-public class ProfileCreationPresenter extends RootPresenter<ProfileCreationView> {
+public class ProfileCreationPresenter extends RootPresenter<net.jami.account.ProfileCreationView> {
 
     public static final String TAG = ProfileCreationPresenter.class.getSimpleName();
 
-    private final DeviceRuntimeService mDeviceRuntimeService;
-    private final HardwareService mHardwareService;
+    private final net.jami.services.DeviceRuntimeService mDeviceRuntimeService;
+    private final net.jami.services.HardwareService mHardwareService;
     private final Scheduler mUiScheduler;
 
-    private AccountCreationModel mAccountCreationModel;
+    private net.jami.mvp.AccountCreationModel mAccountCreationModel;
 
     @Inject
     public ProfileCreationPresenter(DeviceRuntimeService deviceRuntimeService, HardwareService hardwareService, Scheduler uiScheduler) {
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/ProfileCreationView.java b/ring-android/libringclient/src/main/java/net/jami/account/ProfileCreationView.java
similarity index 94%
rename from ring-android/libringclient/src/main/java/cx/ring/account/ProfileCreationView.java
rename to ring-android/libringclient/src/main/java/net/jami/account/ProfileCreationView.java
index 2620b25849f733e9eba5c156b7737e2d709f37a8..7a4fcbbfca2cac637e7f4b2b3b42a10713d59134 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/ProfileCreationView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/account/ProfileCreationView.java
@@ -17,9 +17,9 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.account;
+package net.jami.account;
 
-import cx.ring.mvp.AccountCreationModel;
+import net.jami.mvp.AccountCreationModel;
 
 public interface ProfileCreationView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java b/ring-android/libringclient/src/main/java/net/jami/call/CallPresenter.java
similarity index 91%
rename from ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/call/CallPresenter.java
index ae402b826b7d8905c2006c7ddd611d3b782f4585..44a695b2aed0198385adb01bf9bc02f2b0c6f37f 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/call/CallPresenter.java
@@ -18,7 +18,21 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.call;
+package net.jami.call;
+
+import net.jami.daemon.Ringservice;
+import net.jami.facades.ConversationFacade;
+import net.jami.model.Conference;
+import net.jami.model.Conversation;
+import net.jami.model.SipCall;
+import net.jami.model.Uri;
+import net.jami.services.AccountService;
+import net.jami.services.CallService;
+import net.jami.services.ContactService;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.HardwareService;
+import net.jami.utils.Log;
+import net.jami.utils.StringUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -28,20 +42,8 @@ import java.util.concurrent.TimeUnit;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.daemon.Ringservice;
-import cx.ring.facades.ConversationFacade;
-import cx.ring.model.Conference;
-import cx.ring.model.Conversation;
-import cx.ring.model.SipCall;
-import cx.ring.model.Uri;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.services.CallService;
-import cx.ring.services.ContactService;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.services.HardwareService;
-import cx.ring.utils.Log;
-import cx.ring.utils.StringUtils;
+import net.jami.mvp.RootPresenter;
+
 import io.reactivex.Maybe;
 import io.reactivex.Observable;
 import io.reactivex.Observer;
@@ -89,7 +91,7 @@ public class CallPresenter extends RootPresenter<CallView> {
     @Inject
     public CallPresenter(AccountService accountService,
                          ContactService contactService,
-                         HardwareService hardwareService,
+                         net.jami.services.HardwareService hardwareService,
                          CallService callService,
                          DeviceRuntimeService deviceRuntimeService,
                          ConversationFacade conversationFacade) {
@@ -162,8 +164,8 @@ public class CallPresenter extends RootPresenter<CallView> {
         }
         //getView().blockScreenRotation();
 
-        Observable<Conference> callObservable = mCallService
-                .placeCall(accountId, conversationUri, Uri.fromString(StringUtils.toNumber(contactId)), audioOnly)
+        Observable<net.jami.model.Conference> callObservable = mCallService
+                .placeCall(accountId, conversationUri, net.jami.model.Uri.fromString(StringUtils.toNumber(contactId)), audioOnly)
                 //.map(mCallService::getConference)
                 .flatMapObservable(call -> mCallService.getConfUpdates(call))
                 .share();
@@ -175,7 +177,7 @@ public class CallPresenter extends RootPresenter<CallView> {
                     confUpdate(conference);
                 }, e -> {
                     hangupCall();
-                    Log.e(TAG, "Error with initOutgoing: " + e.getMessage());
+                    net.jami.utils.Log.e(TAG, "Error with initOutgoing: " + e.getMessage());
                 }));
 
         showConference(callObservable);
@@ -193,7 +195,7 @@ public class CallPresenter extends RootPresenter<CallView> {
         // if the call is incoming through a full intent, this allows the incoming call to display
         incomingIsFullIntent = actionViewOnly;
 
-        Observable<Conference> callObservable = mCallService.getConfUpdates(confId)
+        Observable<net.jami.model.Conference> callObservable = mCallService.getConfUpdates(confId)
                 .observeOn(mUiScheduler)
                 .share();
 
@@ -209,7 +211,7 @@ public class CallPresenter extends RootPresenter<CallView> {
                     }
                 }, e -> {
                     hangupCall();
-                    Log.e(TAG, "Error with initIncoming, preparing call flow :" , e);
+                    net.jami.utils.Log.e(TAG, "Error with initIncoming, preparing call flow :" , e);
                 }));
 
         // Handles retrieving call updates. Items emitted are only used if call is already in process or if user is returning to a call.
@@ -221,7 +223,7 @@ public class CallPresenter extends RootPresenter<CallView> {
                     }
                 }, e -> {
                     hangupCall();
-                    Log.e(TAG, "Error with initIncoming, action view flow: ", e);
+                    net.jami.utils.Log.e(TAG, "Error with initIncoming, action view flow: ", e);
                 }));
 
         showConference(callObservable);
@@ -258,7 +260,7 @@ public class CallPresenter extends RootPresenter<CallView> {
         if (mConference == null || mConference.getParticipants().isEmpty()) {
             return;
         }
-        SipCall firstCall = mConference.getParticipants().get(0);
+        net.jami.model.SipCall firstCall = mConference.getParticipants().get(0);
         if (firstCall == null
                 || firstCall.getContact() == null
                 || firstCall.getContact().getIds() == null
@@ -396,7 +398,7 @@ public class CallPresenter extends RootPresenter<CallView> {
 
 
     public void uiVisibilityChanged(boolean displayed) {
-        CallView view = getView();
+        net.jami.call.CallView view = getView();
         if (view != null)
             view.displayHangupButton(mOnGoingCall && displayed);
     }
@@ -414,7 +416,7 @@ public class CallPresenter extends RootPresenter<CallView> {
 
     private Disposable contactDisposable = null;
 
-    private void contactUpdate(final Conference conference) {
+    private void contactUpdate(final net.jami.model.Conference conference) {
         if (mConference != conference) {
             mConference = conference;
             if (contactDisposable != null && !contactDisposable.isDisposed()) {
@@ -424,19 +426,19 @@ public class CallPresenter extends RootPresenter<CallView> {
                 return;
 
             // Updates of participant (and  pending participant) list
-            Observable<List<SipCall>> callsObservable = mPendingSubject
+            Observable<List<net.jami.model.SipCall>> callsObservable = mPendingSubject
                     .map(pendingList -> {
-                        Log.w(TAG, "mPendingSubject onNext " + pendingList.size() + " " + conference.getParticipants().size());
+                        net.jami.utils.Log.w(TAG, "mPendingSubject onNext " + pendingList.size() + " " + conference.getParticipants().size());
                         if (pendingList.isEmpty())
                             return conference.getParticipants();
-                        List<SipCall> newList = new ArrayList<>(conference.getParticipants().size() + pendingList.size());
+                        List<net.jami.model.SipCall> newList = new ArrayList<>(conference.getParticipants().size() + pendingList.size());
                         newList.addAll(conference.getParticipants());
                         newList.addAll(pendingList);
                         return newList;
                     });
 
             // Updates of individual contacts
-            Observable<List<Observable<SipCall>>> contactsObservable = callsObservable
+            Observable<List<Observable<net.jami.model.SipCall>>> contactsObservable = callsObservable
                     .flatMapSingle(calls -> Observable
                             .fromIterable(calls)
                             .map(call -> mContactService.observeContact(call.getAccount(), call.getContact(), false)
@@ -444,20 +446,20 @@ public class CallPresenter extends RootPresenter<CallView> {
                             .toList(calls.size()));
 
             // Combined updates of contacts as participant list updates
-            Observable<List<SipCall>> contactUpdates = contactsObservable
+            Observable<List<net.jami.model.SipCall>> contactUpdates = contactsObservable
                     .switchMap(list -> Observable
                             .combineLatest(list, objects -> {
-                                Log.w(TAG, "flatMapObservable " + objects.length);
-                                ArrayList<SipCall> calls = new ArrayList<>(objects.length);
+                                net.jami.utils.Log.w(TAG, "flatMapObservable " + objects.length);
+                                ArrayList<net.jami.model.SipCall> calls = new ArrayList<>(objects.length);
                                 for (Object call : objects)
-                                    calls.add((SipCall)call);
-                                return (List<SipCall>)calls;
+                                    calls.add((net.jami.model.SipCall)call);
+                                return (List<net.jami.model.SipCall>)calls;
                             }))
                     .filter(list -> !list.isEmpty());
 
             contactDisposable = contactUpdates
                     .observeOn(mUiScheduler)
-                    .subscribe(cs -> getView().updateContactBubble(cs), e -> Log.e(TAG, "Error updating contact data", e));
+                    .subscribe(cs -> getView().updateContactBubble(cs), e -> net.jami.utils.Log.e(TAG, "Error updating contact data", e));
             mCompositeDisposable.add(contactDisposable);
         }
         mPendingSubject.onNext(mPendingCalls);
diff --git a/ring-android/libringclient/src/main/java/cx/ring/call/CallView.java b/ring-android/libringclient/src/main/java/net/jami/call/CallView.java
similarity index 87%
rename from ring-android/libringclient/src/main/java/cx/ring/call/CallView.java
rename to ring-android/libringclient/src/main/java/net/jami/call/CallView.java
index 350cf82a7cdefcb474d03260f4bf405f28536d41..6dd422a788c9c90d0f6de3cd064e24b297f653b1 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/call/CallView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/call/CallView.java
@@ -17,17 +17,14 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.call;
+package net.jami.call;
 
 import java.util.List;
 import java.util.Set;
 
-import cx.ring.model.CallContact;
-import cx.ring.model.Conference;
-import cx.ring.model.SipCall.CallStatus;
-import cx.ring.model.SipCall;
-import cx.ring.services.HardwareService;
-
+import net.jami.model.CallContact;
+import net.jami.model.Conference;
+import net.jami.services.HardwareService;
 
 public interface CallView {
 
@@ -48,9 +45,9 @@ public interface CallView {
 
     void updateTime(long duration);
 
-    void updateContactBubble(List<SipCall> contact);
+    void updateContactBubble(List<net.jami.model.SipCall> contact);
 
-    void updateCallStatus(CallStatus callState);
+    void updateCallStatus(net.jami.model.SipCall.CallStatus callState);
 
     void initMenu(boolean isSpeakerOn, boolean displayFlip, boolean canDial, boolean showPluginBtn, boolean onGoingCall);
 
@@ -66,7 +63,7 @@ public interface CallView {
 
     void goToConversation(String accountId, String conversationId);
 
-    void goToAddContact(CallContact callContact);
+    void goToAddContact(net.jami.model.CallContact callContact);
 
     void startAddParticipant(String conferenceId);
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/contactrequests/BlackListPresenter.java b/ring-android/libringclient/src/main/java/net/jami/contactrequests/BlackListPresenter.java
similarity index 92%
rename from ring-android/libringclient/src/main/java/cx/ring/contactrequests/BlackListPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/contactrequests/BlackListPresenter.java
index 8a92725cd445a2f63faab01593e0cffe28b6e098..b57d232be10f6cb151d8d5ba2765c98d5dd67f4a 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/contactrequests/BlackListPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/contactrequests/BlackListPresenter.java
@@ -18,18 +18,18 @@
  *  along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package cx.ring.contactrequests;
+package net.jami.contactrequests;
 
 import java.util.Collection;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.utils.Log;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
+import net.jami.utils.Log;
 import io.reactivex.Scheduler;
 
 public class BlackListPresenter extends RootPresenter<BlackListView> {
diff --git a/ring-android/libringclient/src/main/java/cx/ring/contactrequests/BlackListView.java b/ring-android/libringclient/src/main/java/net/jami/contactrequests/BlackListView.java
similarity index 91%
rename from ring-android/libringclient/src/main/java/cx/ring/contactrequests/BlackListView.java
rename to ring-android/libringclient/src/main/java/net/jami/contactrequests/BlackListView.java
index 1bff066c21be5f2ed68a5e4c209bccdc4b6c3c59..67cac6fa5f6108b683ca41898c3a63b537a0d18e 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/contactrequests/BlackListView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/contactrequests/BlackListView.java
@@ -17,12 +17,11 @@
  *  along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package cx.ring.contactrequests;
+package net.jami.contactrequests;
 
 import java.util.Collection;
-import java.util.List;
 
-import cx.ring.model.CallContact;
+import net.jami.model.CallContact;
 
 public interface BlackListView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/contactrequests/ContactRequestsPresenter.java b/ring-android/libringclient/src/main/java/net/jami/contactrequests/ContactRequestsPresenter.java
similarity index 88%
rename from ring-android/libringclient/src/main/java/cx/ring/contactrequests/ContactRequestsPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/contactrequests/ContactRequestsPresenter.java
index c5678e6a31f8b151f9ef790c1ba059115d01ba45..79ac23d2f7348e9d872a7e2ad435f533fee54bf1 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/contactrequests/ContactRequestsPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/contactrequests/ContactRequestsPresenter.java
@@ -17,7 +17,7 @@
  *  You should have received a copy of the GNU General Public License
  *  along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
-package cx.ring.contactrequests;
+package net.jami.contactrequests;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -25,18 +25,18 @@ import java.util.List;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.facades.ConversationFacade;
-import cx.ring.model.Account;
-import cx.ring.model.Uri;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.smartlist.SmartListViewModel;
-import cx.ring.utils.Log;
+import net.jami.facades.ConversationFacade;
+import net.jami.model.Account;
+import net.jami.model.Uri;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
+import net.jami.smartlist.SmartListViewModel;
+import net.jami.utils.Log;
 import io.reactivex.Observable;
 import io.reactivex.Scheduler;
 import io.reactivex.subjects.BehaviorSubject;
 
-public class ContactRequestsPresenter extends RootPresenter<ContactRequestsView> {
+public class ContactRequestsPresenter extends RootPresenter<net.jami.contactrequests.ContactRequestsView> {
 
     static private final String TAG = ContactRequestsPresenter.class.getSimpleName();
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/contactrequests/ContactRequestsView.java b/ring-android/libringclient/src/main/java/net/jami/contactrequests/ContactRequestsView.java
similarity index 90%
rename from ring-android/libringclient/src/main/java/cx/ring/contactrequests/ContactRequestsView.java
rename to ring-android/libringclient/src/main/java/net/jami/contactrequests/ContactRequestsView.java
index 4e9e0013e0932d4c61a267586df5b00e9d5ecd83..a5f4272ae7f30c70ab71f578cbcfae0b56093b19 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/contactrequests/ContactRequestsView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/contactrequests/ContactRequestsView.java
@@ -17,12 +17,12 @@
  *  along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package cx.ring.contactrequests;
+package net.jami.contactrequests;
 
 import java.util.List;
 
-import cx.ring.model.Uri;
-import cx.ring.smartlist.SmartListViewModel;
+import net.jami.model.Uri;
+import net.jami.smartlist.SmartListViewModel;
 
 public interface ContactRequestsView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/conversation/ConversationPresenter.java b/ring-android/libringclient/src/main/java/net/jami/conversation/ConversationPresenter.java
similarity index 95%
rename from ring-android/libringclient/src/main/java/cx/ring/conversation/ConversationPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/conversation/ConversationPresenter.java
index 8a94b9d2a2b10fafb562fd4c80d39a9918e76a8a..4723612c3da9d272ac359d85c186973e90633838 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/conversation/ConversationPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/conversation/ConversationPresenter.java
@@ -18,36 +18,36 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.conversation;
+package net.jami.conversation;
 
 import java.io.File;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.daemon.Blob;
-import cx.ring.facades.ConversationFacade;
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conference;
-import cx.ring.model.Conversation;
-import cx.ring.model.DataTransfer;
-import cx.ring.model.Error;
-import cx.ring.model.Interaction;
-import cx.ring.model.SipCall;
-import cx.ring.model.TrustRequest;
-import cx.ring.model.Uri;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.services.ContactService;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.services.HardwareService;
-import cx.ring.services.PreferencesService;
-import cx.ring.services.VCardService;
-import cx.ring.utils.Log;
-import cx.ring.utils.StringUtils;
-import cx.ring.utils.Tuple;
-import cx.ring.utils.VCardUtils;
+import net.jami.daemon.Blob;
+import net.jami.facades.ConversationFacade;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.Conference;
+import net.jami.model.Conversation;
+import net.jami.model.DataTransfer;
+import net.jami.model.Error;
+import net.jami.model.Interaction;
+import net.jami.model.SipCall;
+import net.jami.model.TrustRequest;
+import net.jami.model.Uri;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
+import net.jami.services.ContactService;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.HardwareService;
+import net.jami.services.PreferencesService;
+import net.jami.services.VCardService;
+import net.jami.utils.Log;
+import net.jami.utils.StringUtils;
+import net.jami.utils.Tuple;
+import net.jami.utils.VCardUtils;
 import io.reactivex.Observable;
 import io.reactivex.Scheduler;
 import io.reactivex.disposables.CompositeDisposable;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/conversation/ConversationView.java b/ring-android/libringclient/src/main/java/net/jami/conversation/ConversationView.java
similarity index 90%
rename from ring-android/libringclient/src/main/java/cx/ring/conversation/ConversationView.java
rename to ring-android/libringclient/src/main/java/net/jami/conversation/ConversationView.java
index 8c881ec0124a3671100ed9c1ff75c37eaad0e8ec..f3f75490e7c3b5e96727ac1bec93d5e1cbef328a 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/conversation/ConversationView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/conversation/ConversationView.java
@@ -17,19 +17,19 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.conversation;
+package net.jami.conversation;
 
 import java.io.File;
 import java.util.List;
 
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conversation;
-import cx.ring.model.Error;
-import cx.ring.model.Interaction;
-import cx.ring.model.DataTransfer;
-import cx.ring.model.Uri;
-import cx.ring.mvp.BaseView;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.Conversation;
+import net.jami.model.Error;
+import net.jami.model.Interaction;
+import net.jami.model.DataTransfer;
+import net.jami.model.Uri;
+import net.jami.mvp.BaseView;
 
 public interface ConversationView extends BaseView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/facades/ConversationFacade.java b/ring-android/libringclient/src/main/java/net/jami/facades/ConversationFacade.java
similarity index 79%
rename from ring-android/libringclient/src/main/java/cx/ring/facades/ConversationFacade.java
rename to ring-android/libringclient/src/main/java/net/jami/facades/ConversationFacade.java
index 30e416ac20ec840ff7adc4bbe934340cce1380aa..80d785f7ea86a6809e591668864e65b028136681 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/facades/ConversationFacade.java
+++ b/ring-android/libringclient/src/main/java/net/jami/facades/ConversationFacade.java
@@ -18,7 +18,17 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.facades;
+package net.jami.facades;
+
+import net.jami.services.AccountService;
+import net.jami.services.CallService;
+import net.jami.services.ContactService;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.HardwareService;
+import net.jami.services.HistoryService;
+import net.jami.services.NotificationService;
+import net.jami.services.PreferencesService;
+import net.jami.smartlist.SmartListViewModel;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -30,29 +40,20 @@ import java.util.concurrent.TimeUnit;
 
 import javax.inject.Inject;
 
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conference;
-import cx.ring.model.Conversation;
-import cx.ring.model.DataTransfer;
-import cx.ring.model.Interaction;
-import cx.ring.model.Interaction.InteractionStatus;
-import cx.ring.model.Interaction.InteractionType;
-import cx.ring.model.SipCall;
-import cx.ring.model.TextMessage;
-import cx.ring.model.Uri;
-import cx.ring.services.AccountService;
-import cx.ring.services.CallService;
-import cx.ring.services.ContactService;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.services.HardwareService;
-import cx.ring.services.HistoryService;
-import cx.ring.services.NotificationService;
-import cx.ring.services.PreferencesService;
-import cx.ring.smartlist.SmartListViewModel;
-import cx.ring.utils.FileUtils;
-import cx.ring.utils.Log;
-import cx.ring.utils.Tuple;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.Conference;
+import net.jami.model.Conversation;
+import net.jami.model.DataTransfer;
+import net.jami.model.Interaction;
+import net.jami.model.Interaction.InteractionStatus;
+import net.jami.model.Interaction.InteractionType;
+import net.jami.model.SipCall;
+import net.jami.model.TextMessage;
+import net.jami.model.Uri;
+import net.jami.utils.Log;
+import net.jami.utils.FileUtils;
+import net.jami.utils.Tuple;
 import io.reactivex.Completable;
 import io.reactivex.Observable;
 import io.reactivex.Single;
@@ -65,11 +66,11 @@ public class ConversationFacade {
 
     private final static String TAG = ConversationFacade.class.getSimpleName();
 
-    private final AccountService mAccountService;
-    private final HistoryService mHistoryService;
-    private final CallService mCallService;
-    private final ContactService mContactService;
-    private final NotificationService mNotificationService;
+    private final net.jami.services.AccountService mAccountService;
+    private final net.jami.services.HistoryService mHistoryService;
+    private final net.jami.services.CallService mCallService;
+    private final net.jami.services.ContactService mContactService;
+    private final net.jami.services.NotificationService mNotificationService;
 
     @Inject
     HardwareService mHardwareService;
@@ -82,13 +83,13 @@ public class ConversationFacade {
 
     private final CompositeDisposable mDisposableBag = new CompositeDisposable();
 
-    private final Observable<Account> currentAccountSubject;
+    private final Observable<net.jami.model.Account> currentAccountSubject;
 
-    private final Subject<Conversation> conversationSubject = PublishSubject.create();
+    private final Subject<net.jami.model.Conversation> conversationSubject = PublishSubject.create();
 
     public ConversationFacade(HistoryService historyService,
                               CallService callService,
-                              AccountService accountService,
+                              net.jami.services.AccountService accountService,
                               ContactService contactService,
                               NotificationService notificationService) {
         mHistoryService = historyService;
@@ -147,14 +148,14 @@ public class ConversationFacade {
 
         mDisposableBag.add(mAccountService.getObservableAccountList()
                 .switchMap(accounts -> {
-                    List<Observable<Tuple<Account, Account.ContactLocationEntry>>> r = new ArrayList<>(accounts.size());
+                    List<Observable<Tuple<Account, net.jami.model.Account.ContactLocationEntry>>> r = new ArrayList<>(accounts.size());
                     for (Account a : accounts)
                         r.add(a.getLocationUpdates().map(s -> new Tuple<>(a, s)));
                     return Observable.merge(r);
                 })
                 .distinctUntilChanged()
                 .subscribe(t -> {
-                    Log.e(TAG, "Location reception started for " + t.second.contact);
+                    net.jami.utils.Log.e(TAG, "Location reception started for " + t.second.contact);
                     mNotificationService.showLocationNotification(t.first, t.second.contact);
                     mDisposableBag.add(t.second.location.doOnComplete(() ->
                             mNotificationService.cancelLocationNotification(t.first, t.second.contact)).subscribe());
@@ -166,7 +167,7 @@ public class ConversationFacade {
                         .map(a -> txt.getConversation() == null ? a.getSwarm(txt.getConversationId()) : a.getByUri(txt.getConversation().getParticipant()))
                         .doOnSuccess(conversation -> conversation.updateTextMessage(txt)))
                 .subscribe(c -> {
-                }, e -> Log.e(TAG, "Error updating text message", e)));
+                }, e -> net.jami.utils.Log.e(TAG, "Error updating text message", e)));
 
         mDisposableBag.add(mAccountService
                 .getDataTransfers()
@@ -174,16 +175,16 @@ public class ConversationFacade {
                         e -> Log.e(TAG, "Error adding data transfer", e)));
     }
 
-    public Observable<Conversation> getUpdatedConversation() {
+    public Observable<net.jami.model.Conversation> getUpdatedConversation() {
         return conversationSubject;
     }
 
-    public Single<Conversation> startConversation(String accountId, final Uri contactId) {
+    public Single<net.jami.model.Conversation> startConversation(String accountId, final Uri contactId) {
         return getAccountSubject(accountId)
                 .map(account -> account.getByUri(contactId));
     }
 
-    public Observable<Account> getCurrentAccountSubject() {
+    public Observable<net.jami.model.Account> getCurrentAccountSubject() {
         return currentAccountSubject;
     }
 
@@ -204,7 +205,7 @@ public class ConversationFacade {
              readMessages(account, account.getByUri(contact), true) : null;
     }
 
-    public String readMessages(Account account, Conversation conversation, boolean cancelNotification) {
+    public String readMessages(Account account, net.jami.model.Conversation conversation, boolean cancelNotification) {
         if (conversation != null) {
             String lastMessage = readMessages(conversation);
             if (lastMessage != null) {
@@ -221,7 +222,7 @@ public class ConversationFacade {
         return null;
     }
 
-    private String readMessages(Conversation conversation) {
+    private String readMessages(net.jami.model.Conversation conversation) {
         String lastRead = null;
         if (conversation.isSwarm()) {
             lastRead = conversation.readMessages();
@@ -252,7 +253,7 @@ public class ConversationFacade {
         }
         return mCallService.sendAccountTextMessage(c.getAccountId(), to.getRawUriString(), txt)
                 .map(id -> {
-                    TextMessage message = new TextMessage(null, c.getAccountId(), Long.toHexString(id), c, txt);
+                    net.jami.model.TextMessage message = new net.jami.model.TextMessage(null, c.getAccountId(), Long.toHexString(id), c, txt);
                     if (c.isVisible())
                         message.read();
                     mHistoryService.insertInteraction(c.getAccountId(), c, message).subscribe();
@@ -264,7 +265,7 @@ public class ConversationFacade {
 
     public void sendTextMessage(Conversation c, Conference conf, String txt) {
         mCallService.sendTextMessage(conf.getId(), txt);
-        TextMessage message = new TextMessage(null, c.getAccountId(), conf.getId(), c, txt);
+        net.jami.model.TextMessage message = new TextMessage(null, c.getAccountId(), conf.getId(), c, txt);
         message.read();
         mHistoryService.insertInteraction(c.getAccountId(), c, message).subscribe();
         c.addTextMessage(message);
@@ -277,7 +278,7 @@ public class ConversationFacade {
     public Completable sendFile(Conversation conversation, Uri to, File file) {
         return Single.fromCallable(() -> {
             if (file == null || !file.exists() || !file.canRead()) {
-                Log.w(TAG, "sendFile: file not found or not readable: " + file);
+                net.jami.utils.Log.w(TAG, "sendFile: file not found or not readable: " + file);
                 return null;
             }
 
@@ -290,7 +291,7 @@ public class ConversationFacade {
 
             File dest = mDeviceRuntimeService.getConversationPath(conversation.getUri().getRawRingId(), transfer.getStoragePath());
             if (!FileUtils.moveFile(file, dest)) {
-                Log.e(TAG, "sendFile: can't move file to " + dest);
+                net.jami.utils.Log.e(TAG, "sendFile: can't move file to " + dest);
                 return null;
             }
 
@@ -302,9 +303,9 @@ public class ConversationFacade {
     }
 
 
-    public void deleteConversationItem(Conversation conversation, Interaction element) {
+    public void deleteConversationItem(net.jami.model.Conversation conversation, Interaction element) {
         if (element.getType() == InteractionType.DATA_TRANSFER) {
-            DataTransfer transfer = (DataTransfer) element;
+            DataTransfer transfer = (net.jami.model.DataTransfer) element;
             if (transfer.getStatus() == InteractionStatus.TRANSFER_ONGOING) {
                 mAccountService.cancelDataTransfer(conversation.getAccountId(), conversation.getUri().getRawRingId(), transfer.getDaemonId());
             } else {
@@ -314,14 +315,14 @@ public class ConversationFacade {
                         Completable.fromAction(file::delete)
                                 .subscribeOn(Schedulers.io()))
                         .subscribe(() -> conversation.removeInteraction(transfer),
-                                e -> Log.e(TAG, "Can't delete file transfer", e)));
+                                e -> net.jami.utils.Log.e(TAG, "Can't delete file transfer", e)));
             }
         } else {
             // handling is the same for calls and texts
             mDisposableBag.add(Completable.mergeArrayDelayError(mHistoryService.deleteInteraction(element.getId(), element.getAccount()).subscribeOn(Schedulers.io()))
                     .andThen(startConversation(element.getAccount(), Uri.fromString(element.getConversation().getParticipant())))
                     .subscribe(c -> c.removeInteraction(element),
-                            e -> Log.e(TAG, "Can't delete message", e)));
+                            e -> net.jami.utils.Log.e(TAG, "Can't delete message", e)));
         }
     }
 
@@ -330,7 +331,7 @@ public class ConversationFacade {
                 mCallService.cancelMessage(message.getAccount(), message.getId()).subscribeOn(Schedulers.io()))
                 .andThen(startConversation(message.getAccount(), Uri.fromString(message.getConversation().getParticipant())))
                 .subscribe(c -> c.removeInteraction(message),
-                        e -> Log.e(TAG, "Can't cancel message sending", e)));
+                        e -> net.jami.utils.Log.e(TAG, "Can't cancel message sending", e)));
     }
 
     /**
@@ -339,10 +340,10 @@ public class ConversationFacade {
      * @param account the user account
      * @return an account single
      */
-    private Single<Account> loadSmartlist(final Account account) {
+    private Single<net.jami.model.Account> loadSmartlist(final Account account) {
         synchronized (account) {
             if (account.historyLoader == null) {
-                Log.d(TAG, "loadSmartlist(): start loading");
+                net.jami.utils.Log.d(TAG, "loadSmartlist(): start loading");
                 account.historyLoader = getSmartlist(account);
             }
             return account.historyLoader;
@@ -357,20 +358,20 @@ public class ConversationFacade {
      * @return a conversation single
      */
     public Single<Conversation> loadConversationHistory(final Account account, final Uri conversationUri) {
-        Conversation conversation = account.getByUri(conversationUri);
+        net.jami.model.Conversation conversation = account.getByUri(conversationUri);
         if (conversation == null)
             return Single.error(new RuntimeException("Can't get conversation"));
         synchronized (conversation) {
             if (conversation.isSwarm()) {
                 loadMore(conversation);
-                Single<Conversation> ret = Single.just(conversation);
+                Single<net.jami.model.Conversation> ret = Single.just(conversation);
                 conversation.setLoaded(ret);
                 return ret;
             }
             if (conversation.getId() == null) {
                 return Single.just(conversation);
             }
-            Single<Conversation> ret = conversation.getLoaded();
+            Single<net.jami.model.Conversation> ret = conversation.getLoaded();
             if (ret == null) {
                 ret = getConversationHistory(conversation);
                 conversation.setLoaded(ret);
@@ -379,13 +380,13 @@ public class ConversationFacade {
         }
     }
 
-    private Observable<SmartListViewModel> observeConversation(Account account, Conversation conversation, boolean hasPresence) {
+    private Observable<net.jami.smartlist.SmartListViewModel> observeConversation(Account account, net.jami.model.Conversation conversation, boolean hasPresence) {
         return Observable.merge(account.getConversationSubject()
                 .filter(c -> c == conversation)
                 .startWith(conversation),
                 mContactService
                         .observeContact(conversation.getAccountId(), conversation.getContacts(), hasPresence))
-        .map(e -> new SmartListViewModel(conversation, hasPresence));
+        .map(e -> new net.jami.smartlist.SmartListViewModel(conversation, hasPresence));
         /*return account.getConversationSubject()
                 .filter(c -> c == conversation)
                 .startWith(conversation)
@@ -393,45 +394,45 @@ public class ConversationFacade {
                         .observeContact(c.getAccountId(), c.getContacts(), hasPresence)
                         .map(contact -> new SmartListViewModel(c, hasPresence)));*/
     }
-    public Observable<List<Observable<SmartListViewModel>>> getSmartList(Observable<Account> currentAccount, boolean hasPresence) {
+    public Observable<List<Observable<net.jami.smartlist.SmartListViewModel>>> getSmartList(Observable<net.jami.model.Account> currentAccount, boolean hasPresence) {
         return currentAccount.switchMap(account -> account.getConversationsSubject()
                 .switchMapSingle(conversations -> Observable.fromIterable(conversations)
                         .map(conversation -> observeConversation(account, conversation, hasPresence))
                         .toList()));
     }
-    public Observable<List<SmartListViewModel>> getContactList(Observable<Account> currentAccount) {
+    public Observable<List<net.jami.smartlist.SmartListViewModel>> getContactList(Observable<Account> currentAccount) {
         return currentAccount.switchMap(account -> account.getConversationsSubject()
                 .switchMapSingle(conversations -> Observable.fromIterable(conversations)
                         .filter(conversation -> !conversation.isSwarm())
-                        .map(conversation -> new SmartListViewModel(conversation,false))
+                        .map(conversation -> new net.jami.smartlist.SmartListViewModel(conversation,false))
                         .toList()));
     }
-    public Observable<List<Observable<SmartListViewModel>>> getPendingList(Observable<Account> currentAccount) {
+    public Observable<List<Observable<net.jami.smartlist.SmartListViewModel>>> getPendingList(Observable<Account> currentAccount) {
         return currentAccount.switchMap(account -> account.getPendingSubject()
                 .switchMapSingle(conversations -> Observable.fromIterable(conversations)
                         .map(conversation -> observeConversation(account, conversation, false))
                         .toList()));
     }
 
-    public Observable<List<Observable<SmartListViewModel>>> getSmartList(boolean hasPresence) {
+    public Observable<List<Observable<net.jami.smartlist.SmartListViewModel>>> getSmartList(boolean hasPresence) {
         return getSmartList(mAccountService.getCurrentAccountSubject(), hasPresence);
     }
-    public Observable<List<Observable<SmartListViewModel>>> getPendingList() {
+    public Observable<List<Observable<net.jami.smartlist.SmartListViewModel>>> getPendingList() {
         return getPendingList(mAccountService.getCurrentAccountSubject());
     }
-    public Observable<List<SmartListViewModel>> getContactList() {
+    public Observable<List<net.jami.smartlist.SmartListViewModel>> getContactList() {
         return getContactList(mAccountService.getCurrentAccountSubject());
     }
 
-    private Single<List<Observable<SmartListViewModel>>> getSearchResults(Account account, String query) {
+    private Single<List<Observable<net.jami.smartlist.SmartListViewModel>>> getSearchResults(Account account, String query) {
         Uri uri = Uri.fromString(query);
         if (account.isSip()) {
             CallContact contact = account.getContactFromCache(uri);
             return mContactService.loadContactData(contact, account.getAccountID())
-                    .andThen(Single.just(Collections.singletonList(Observable.just(new SmartListViewModel(account.getAccountID(), contact, contact.getPrimaryNumber(), null)))));
+                    .andThen(Single.just(Collections.singletonList(Observable.just(new net.jami.smartlist.SmartListViewModel(account.getAccountID(), contact, contact.getPrimaryNumber(), null)))));
         } else if (uri.isHexId()) {
             return mContactService.getLoadedContact(account.getAccountID(), account.getContactFromCache(uri))
-                    .map(contact -> Collections.singletonList(Observable.just(new SmartListViewModel(account.getAccountID(), contact, contact.getPrimaryNumber(), null))));
+                    .map(contact -> Collections.singletonList(Observable.just(new net.jami.smartlist.SmartListViewModel(account.getAccountID(), contact, contact.getPrimaryNumber(), null))));
         } else if (account.canSearch() && !query.contains("@")) {
             return mAccountService.searchUser(account.getAccountID(), query)
                     .map(AccountService.UserSearchResult::getResultsViewModels);
@@ -440,26 +441,26 @@ public class ConversationFacade {
                     .map(result -> result.state == 0 ? Collections.singletonList(observeConversation(account, account.getByUri(result.address), false)) : Collections.emptyList());
         }
     }
-    private Observable<List<Observable<SmartListViewModel>>> getSearchResults(Account account, Observable<String> query) {
+    private Observable<List<Observable<net.jami.smartlist.SmartListViewModel>>> getSearchResults(Account account, Observable<String> query) {
         return query.switchMapSingle(q -> q.isEmpty()
-                        ? SmartListViewModel.EMPTY_LIST
+                        ? net.jami.smartlist.SmartListViewModel.EMPTY_LIST
                         : getSearchResults(account, q))
                 .distinctUntilChanged();
     }
-    public Observable<List<Observable<SmartListViewModel>>> getFullList(Observable<Account> currentAccount, Observable<String> query, boolean hasPresence) {
+    public Observable<List<Observable<net.jami.smartlist.SmartListViewModel>>> getFullList(Observable<Account> currentAccount, Observable<String> query, boolean hasPresence) {
         return currentAccount.switchMap(account -> Observable.combineLatest(
                 account.getConversationsSubject(),
                 getSearchResults(account, query),
                 query,
                 (conversations, searchResults, q) -> {
-                    List<Observable<SmartListViewModel>> newList = new ArrayList<>(conversations.size() + searchResults.size() + 2);
+                    List<Observable<net.jami.smartlist.SmartListViewModel>> newList = new ArrayList<>(conversations.size() + searchResults.size() + 2);
                     if (!searchResults.isEmpty()) {
-                        newList.add(SmartListViewModel.TITLE_PUBLIC_DIR);
+                        newList.add(net.jami.smartlist.SmartListViewModel.TITLE_PUBLIC_DIR);
                         newList.addAll(searchResults);
                     }
                     if (!conversations.isEmpty()) {
                         if (q.isEmpty()) {
-                            for (Conversation conversation : conversations)
+                            for (net.jami.model.Conversation conversation : conversations)
                                 newList.add(observeConversation(account, conversation, hasPresence));
                         } else {
                             String lq = q.toLowerCase();
@@ -484,7 +485,7 @@ public class ConversationFacade {
      *
      * @param account the user account
      */
-    private Single<Account> getSmartlist(final Account account) {
+    private Single<net.jami.model.Account> getSmartlist(final Account account) {
         return mHistoryService.getSmartlist(account.getAccountID())
                 .map(conversationHistoryList -> {
                     List<Conversation> conversations = new ArrayList<>();
@@ -508,7 +509,7 @@ public class ConversationFacade {
      * @param conversation a conversation object with a valid conversation ID
      * @return a conversation single
      */
-    private Single<Conversation> getConversationHistory(final Conversation conversation) {
+    private Single<net.jami.model.Conversation> getConversationHistory(final net.jami.model.Conversation conversation) {
         Log.d(TAG, "getConversationHistory() " + conversation.getAccountId() + " " + conversation.getUri());
 
         return mHistoryService.getConversationHistory(conversation.getAccountId(), conversation.getId())
@@ -546,15 +547,15 @@ public class ConversationFacade {
                 });
     }
 
-    public void updateTextNotifications(String accountId, List<Conversation> conversations) {
-        Log.d(TAG, "updateTextNotifications() " + accountId + " " + conversations.size());
+    public void updateTextNotifications(String accountId, List<net.jami.model.Conversation> conversations) {
+        net.jami.utils.Log.d(TAG, "updateTextNotifications() " + accountId + " " + conversations.size());
 
-        for (Conversation conversation : conversations) {
+        for (net.jami.model.Conversation conversation : conversations) {
             mNotificationService.showTextNotification(accountId, conversation);
         }
     }
 
-    private void parseNewMessage(final TextMessage txt) {
+    private void parseNewMessage(final net.jami.model.TextMessage txt) {
         if (txt.isRead()) {
             if (txt.getMessageId() == null) {
                 mHistoryService.updateInteraction(txt, txt.getAccount()).subscribe();
@@ -588,7 +589,7 @@ public class ConversationFacade {
     }
 
     private void handleDataTransferEvent(DataTransfer transfer) {
-        Conversation conversation = mAccountService.getAccount(transfer.getAccount()).onDataTransferEvent(transfer);
+        net.jami.model.Conversation conversation = mAccountService.getAccount(transfer.getAccount()).onDataTransferEvent(transfer);
         if (transfer.getStatus() == InteractionStatus.TRANSFER_CREATED && !transfer.isOutgoing()) {
             if (transfer.canAutoAccept(mPreferencesService.getMaxFileAutoAccept(transfer.getAccount()))) {
                 mAccountService.acceptFileTransfer(conversation, transfer);
@@ -598,11 +599,11 @@ public class ConversationFacade {
     }
 
     private void onConfStateChange(Conference conference) {
-        Log.d(TAG, "onConfStateChange Thread id: " + Thread.currentThread().getId());
+        net.jami.utils.Log.d(TAG, "onConfStateChange Thread id: " + Thread.currentThread().getId());
     }
 
     private void onCallStateChange(SipCall call) {
-        Log.d(TAG, "onCallStateChange Thread id: " + Thread.currentThread().getId());
+        net.jami.utils.Log.d(TAG, "onCallStateChange Thread id: " + Thread.currentThread().getId());
         SipCall.CallStatus newState = call.getCallStatus();
         boolean incomingCall = newState == SipCall.CallStatus.RINGING && call.isIncoming();
         mHardwareService.updateAudioState(newState, incomingCall, !call.isAudioOnly());
@@ -610,9 +611,9 @@ public class ConversationFacade {
         Account account = mAccountService.getAccount(call.getAccount());
         if (account == null)
             return;
-        CallContact contact = call.getContact();
+        net.jami.model.CallContact contact = call.getContact();
         String conversationId = call.getConversationId();
-        Log.w(TAG, "CallStateChange " + call.getId() + " conversationId:" + conversationId);
+        net.jami.utils.Log.w(TAG, "CallStateChange " + call.getId() + " conversationId:" + conversationId);
 
         Conversation conversation = account == null
                 ? null
@@ -687,7 +688,7 @@ public class ConversationFacade {
     public void cancelFileTransfer(String accountId, Uri conversationId, long id) {
         mAccountService.cancelDataTransfer(accountId, conversationId.isSwarm() ? conversationId.getRawRingId() : "", id);
         mNotificationService.removeTransferNotification(id);
-        DataTransfer transfer = mAccountService.getAccount(accountId).getDataTransfer(id);
+        net.jami.model.DataTransfer transfer = mAccountService.getAccount(accountId).getDataTransfer(id);
         if (transfer != null)
             deleteConversationItem((Conversation) transfer.getConversation(), transfer);
     }
@@ -702,14 +703,14 @@ public class ConversationFacade {
                 });
     }
 
-    public Single<Conversation> createConversation(String accountId, Collection<CallContact> currentSelection) {
+    public Single<net.jami.model.Conversation> createConversation(String accountId, Collection<net.jami.model.CallContact> currentSelection) {
         List<String> contactIds = new ArrayList<>(currentSelection.size());
         for (CallContact contact : currentSelection)
             contactIds.add(contact.getPrimaryNumber());
         return mAccountService.startConversation(accountId, contactIds);
     }
 
-    public void loadMore(Conversation conversation) {
+    public void loadMore(net.jami.model.Conversation conversation) {
         Collection<String> roots = conversation.getSwarmRoot();
         if (roots.isEmpty())
             mAccountService.loadConversationHistory(conversation.getAccountId(), conversation.getUri(), "", 16);
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/Account.java b/ring-android/libringclient/src/main/java/net/jami/model/Account.java
similarity index 94%
rename from ring-android/libringclient/src/main/java/cx/ring/model/Account.java
rename to ring-android/libringclient/src/main/java/net/jami/model/Account.java
index bcdbd9b4964ec1a7970347747edd8d0127080c1d..0a7532487fbaed0789fa72c4e735061284aeac62 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/Account.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/Account.java
@@ -19,7 +19,13 @@
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package cx.ring.model;
+package net.jami.model;
+
+import net.jami.services.AccountService;
+import net.jami.smartlist.SmartListViewModel;
+import net.jami.utils.Log;
+import net.jami.utils.StringUtils;
+import net.jami.utils.Tuple;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -31,12 +37,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import cx.ring.model.Interaction.InteractionStatus;
-import cx.ring.services.AccountService;
-import cx.ring.smartlist.SmartListViewModel;
-import cx.ring.utils.Log;
-import cx.ring.utils.StringUtils;
-import cx.ring.utils.Tuple;
 import ezvcard.VCard;
 import io.reactivex.Maybe;
 import io.reactivex.Observable;
@@ -91,7 +91,7 @@ public class Account {
     private final BehaviorSubject<Collection<CallContact>> contactListSubject = BehaviorSubject.create();
 
     public boolean canSearch() {
-        return !StringUtils.isEmpty(getDetail(ConfigKey.MANAGER_URI));
+        return !net.jami.utils.StringUtils.isEmpty(getDetail(ConfigKey.MANAGER_URI));
     }
 
     public boolean isContact(Conversation conversation) {
@@ -100,7 +100,7 @@ public class Account {
     }
 
     public void conversationStarted(Conversation conversation) {
-        Log.w(TAG, "conversationStarted " + conversation.getAccountId() + " " + conversation.getUri() + " " + conversation.isSwarm() + " " + conversation.getContacts().size());
+        net.jami.utils.Log.w(TAG, "conversationStarted " + conversation.getAccountId() + " " + conversation.getUri() + " " + conversation.isSwarm() + " " + conversation.getContacts().size());
         synchronized (conversations) {
             if (conversation.isSwarm() && conversation.getMode() == Conversation.Mode.OneToOne) {
                 CallContact contact = conversation.getContact();
@@ -167,7 +167,7 @@ public class Account {
 
     public Single<Account> historyLoader;
     private VCard mProfile;
-    private Single<Tuple<String, Object>> mLoadedProfile = null;
+    private Single<net.jami.utils.Tuple<String, Object>> mLoadedProfile = null;
 
     public Account(String bAccountID) {
         accountID = bAccountID;
@@ -196,10 +196,10 @@ public class Account {
         return conversationsSubject;
     }
 
-    public Observable<List<SmartListViewModel>> getConversationsViewModels(boolean withPresence) {
+    public Observable<List<net.jami.smartlist.SmartListViewModel>> getConversationsViewModels(boolean withPresence) {
         return conversationsSubject
                 .map(conversations -> {
-                    ArrayList<SmartListViewModel> viewModel = new ArrayList<>(conversations.size());
+                    ArrayList<net.jami.smartlist.SmartListViewModel> viewModel = new ArrayList<>(conversations.size());
                     for (Conversation c : conversations)
                         viewModel.add(new SmartListViewModel(c, withPresence));
                     return viewModel;
@@ -339,7 +339,7 @@ public class Account {
                 return;
             }
             if (mContacts.containsKey(key) || !isJami()) {
-                Log.w(TAG, "updated " + conversation.getAccountId() + " contact " + key);
+                net.jami.utils.Log.w(TAG, "updated " + conversation.getAccountId() + " contact " + key);
                 conversations.put(key, conversation);
                 conversationChanged();
             } else {
@@ -359,7 +359,7 @@ public class Account {
     public void addTextMessage(TextMessage txt) {
         Conversation conversation = null;
         String daemonId = txt.getDaemonIdString();
-        if (daemonId != null && !StringUtils.isEmpty(daemonId)) {
+        if (daemonId != null && !net.jami.utils.StringUtils.isEmpty(daemonId)) {
             conversation = getConversationByCallId(daemonId);
         }
         if (conversation == null) {
@@ -372,8 +372,8 @@ public class Account {
 
     public Conversation onDataTransferEvent(DataTransfer transfer) {
         Conversation conversation = (Conversation) transfer.getConversation();
-        InteractionStatus transferEventCode = transfer.getStatus();
-        if (transferEventCode == InteractionStatus.TRANSFER_CREATED) {
+        Interaction.InteractionStatus transferEventCode = transfer.getStatus();
+        if (transferEventCode == Interaction.InteractionStatus.TRANSFER_CREATED) {
             conversation.addFileTransfer(transfer);
         } else {
             conversation.updateFileTransfer(transfer, transferEventCode);
@@ -387,7 +387,7 @@ public class Account {
     }
 
     public CallContact getContactFromCache(String key) {
-        if (StringUtils.isEmpty(key))
+        if (net.jami.utils.StringUtils.isEmpty(key))
             return null;
         synchronized (mContactCache) {
             CallContact contact = mContactCache.get(key);
@@ -715,7 +715,7 @@ public class Account {
             callContact = getContactFromCache(Uri.fromId(contactId));
         }
         String addedStr = contact.get(CONTACT_ADDED);
-        if (!StringUtils.isEmpty(addedStr)) {
+        if (!net.jami.utils.StringUtils.isEmpty(addedStr)) {
             long added = Long.parseLong(contact.get(CONTACT_ADDED));
             callContact.setAddedDate(new Date(added * 1000));
         }
@@ -783,7 +783,7 @@ public class Account {
     }
 
     public void setRequests(List<TrustRequest> requests) {
-        Log.w(TAG, "setRequests " + requests.size());
+        net.jami.utils.Log.w(TAG, "setRequests " + requests.size());
         synchronized (pending) {
             for (TrustRequest request : requests) {
                 String key = request.getUri().getUri();
@@ -960,7 +960,7 @@ public class Account {
     }
 
     public void presenceUpdate(String contactUri, boolean isOnline) {
-        Log.w(TAG, "presenceUpdate " + contactUri + " " + isOnline);
+        net.jami.utils.Log.w(TAG, "presenceUpdate " + contactUri + " " + isOnline);
         CallContact contact = getContactFromCache(contactUri);
         if (contact.isOnline() == isOnline)
             return;
@@ -978,7 +978,7 @@ public class Account {
     }
 
     public void composingStatusChanged(String conversationId, Uri contactUri, ComposingStatus status) {
-        boolean isSwarm = !StringUtils.isEmpty(conversationId);
+        boolean isSwarm = !net.jami.utils.StringUtils.isEmpty(conversationId);
         Conversation conversation = isSwarm ? getSwarm(conversationId) : getByUri(contactUri);
         if (conversation != null) {
             CallContact contact = isSwarm ? conversation.findContact(contactUri) : getContactFromCache(contactUri);
@@ -989,7 +989,7 @@ public class Account {
     }
 
     synchronized public long onLocationUpdate(AccountService.Location location) {
-        Log.w(TAG, "onLocationUpdate " + location.getPeer() + " " + location.getLatitude() + ",  " + location.getLongitude());
+        net.jami.utils.Log.w(TAG, "onLocationUpdate " + location.getPeer() + " " + location.getLatitude() + ",  " + location.getLongitude());
         CallContact contact = getContactFromCache(location.getPeer());
 
         switch (location.getType()) {
@@ -1024,17 +1024,17 @@ public class Account {
     }
 
     synchronized private void forceExpireContact(CallContact contact) {
-        Log.w(TAG, "forceExpireContact " + contactLocations.size());
+        net.jami.utils.Log.w(TAG, "forceExpireContact " + contactLocations.size());
         Observable<ContactLocation> cl = contactLocations.remove(contact);
         if (cl != null) {
-            Log.w(TAG, "Contact stopped sharing location: " + contact.getDisplayName());
+            net.jami.utils.Log.w(TAG, "Contact stopped sharing location: " + contact.getDisplayName());
             ((Subject<ContactLocation>) cl).onComplete();
             mLocationSubject.onNext(contactLocations);
         }
     }
 
     synchronized public void maintainLocation() {
-        Log.w(TAG, "maintainLocation " + contactLocations.size());
+        net.jami.utils.Log.w(TAG, "maintainLocation " + contactLocations.size());
         if (contactLocations.isEmpty())
             return;
         boolean changed = false;
@@ -1044,7 +1044,7 @@ public class Account {
         while (it.hasNext())  {
             Map.Entry<CallContact, Observable<ContactLocation>> e = it.next();
             if (e.getValue().blockingFirst().receivedDate.before(expiration)) {
-                Log.w(TAG, "maintainLocation clearing " + e.getKey().getDisplayName());
+                net.jami.utils.Log.w(TAG, "maintainLocation clearing " + e.getKey().getDisplayName());
                 ((Subject<ContactLocation>) e.getValue()).onComplete();
                 changed = true;
                 it.remove();
@@ -1065,7 +1065,7 @@ public class Account {
 
     public Observable<Observable<ContactLocation>> getLocationUpdates(Uri contactId) {
         CallContact contact = getContactFromCache(contactId);
-        Log.w(TAG, "getLocationUpdates " + contactId + " " + contact);
+        net.jami.utils.Log.w(TAG, "getLocationUpdates " + contactId + " " + contact);
         if (contact == null || contact.isUser())
             return Observable.empty();
         return mLocationSubject
@@ -1081,11 +1081,11 @@ public class Account {
         if (isJami()) {
             if (mLoadedProfile == null)
                 return Single.just(getJamiAlias());
-            return mLoadedProfile.map(p -> StringUtils.isEmpty(p.first) ? getJamiAlias() : p.first);
+            return mLoadedProfile.map(p -> net.jami.utils.StringUtils.isEmpty(p.first) ? getJamiAlias() : p.first);
         } else {
             if (mLoadedProfile == null)
                 return Single.just(getAlias());
-            return mLoadedProfile.map(p -> StringUtils.isEmpty(p.first) ? getAlias() : p.first);
+            return mLoadedProfile.map(p -> net.jami.utils.StringUtils.isEmpty(p.first) ? getAlias() : p.first);
         }
     }
 
@@ -1109,7 +1109,7 @@ public class Account {
         return mProfile;
     }
 
-    public Single<Tuple<String, Object>> getLoadedProfile() {
+    public Single<net.jami.utils.Tuple<String, Object>> getLoadedProfile() {
         return mLoadedProfile;
     }
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/AccountConfig.java b/ring-android/libringclient/src/main/java/net/jami/model/AccountConfig.java
similarity index 86%
rename from ring-android/libringclient/src/main/java/cx/ring/model/AccountConfig.java
rename to ring-android/libringclient/src/main/java/net/jami/model/AccountConfig.java
index d96c8e17fcade7909d116656d4b6e079c315908b..00f0ba6d354e2b27dec2d23c23132d2036395cdc 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/AccountConfig.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/AccountConfig.java
@@ -16,7 +16,7 @@
  *  You should have received a copy of the GNU General Public License
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package cx.ring.model;
+package net.jami.model;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -50,7 +50,7 @@ public class AccountConfig {
     public static final String STATE_SUCCESS = "SUCCESS";
     public static final String STATE_INVALID = "INVALID";
 
-    private final Map<ConfigKey, String> mValues;
+    private final Map<net.jami.model.ConfigKey, String> mValues;
 
     public AccountConfig() {
         mValues = new HashMap<>();
@@ -60,7 +60,7 @@ public class AccountConfig {
         if (details != null) {
             mValues = new HashMap<>(details.size());
             for (Map.Entry<String, String> entry : details.entrySet()) {
-                ConfigKey confKey = ConfigKey.fromString(entry.getKey());
+                net.jami.model.ConfigKey confKey = net.jami.model.ConfigKey.fromString(entry.getKey());
                 if (confKey != null) {
                     mValues.put(confKey, entry.getValue());
                 }
@@ -70,31 +70,31 @@ public class AccountConfig {
         }
     }
 
-    public String get(ConfigKey key) {
+    public String get(net.jami.model.ConfigKey key) {
         return mValues.get(key) != null ? mValues.get(key) : "";
     }
 
-    public boolean getBool(ConfigKey key) {
+    public boolean getBool(net.jami.model.ConfigKey key) {
         return TRUE_STR.equals(get(key));
     }
 
     public HashMap<String, String> getAll() {
         HashMap<String, String> details = new HashMap<>(mValues.size());
-        for (Map.Entry<ConfigKey, String> entry : mValues.entrySet()) {
+        for (Map.Entry<net.jami.model.ConfigKey, String> entry : mValues.entrySet()) {
             details.put(entry.getKey().key(), entry.getValue());
         }
         return details;
     }
 
-    void put(ConfigKey key, String value) {
+    void put(net.jami.model.ConfigKey key, String value) {
         mValues.put(key, value);
     }
 
-    void put(ConfigKey key, boolean value) {
+    void put(net.jami.model.ConfigKey key, boolean value) {
         mValues.put(key, value ? TRUE_STR : FALSE_STR);
     }
 
-    public Set<ConfigKey> getKeys() {
+    public Set<net.jami.model.ConfigKey> getKeys() {
         return mValues.keySet();
     }
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/AccountCredentials.java b/ring-android/libringclient/src/main/java/net/jami/model/AccountCredentials.java
similarity index 82%
rename from ring-android/libringclient/src/main/java/cx/ring/model/AccountCredentials.java
rename to ring-android/libringclient/src/main/java/net/jami/model/AccountCredentials.java
index b49b2a2bc1bcd0dd4957d735ff05efe80e5d270d..089e6874d51fa427c2a0a93c4193e0b23c5c68bb 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/AccountCredentials.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/AccountCredentials.java
@@ -17,7 +17,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package cx.ring.model;
+package net.jami.model;
 
 import java.io.Serializable;
 import java.util.HashMap;
@@ -33,9 +33,9 @@ public class AccountCredentials implements Serializable {
     private String mRealm;
 
     public AccountCredentials(Map<String, String> pref) {
-        mUsername = pref.get(ConfigKey.ACCOUNT_USERNAME.key());
-        mPassword = pref.get(ConfigKey.ACCOUNT_PASSWORD.key());
-        mRealm = pref.get(ConfigKey.ACCOUNT_REALM.key());
+        mUsername = pref.get(net.jami.model.ConfigKey.ACCOUNT_USERNAME.key());
+        mPassword = pref.get(net.jami.model.ConfigKey.ACCOUNT_PASSWORD.key());
+        mRealm = pref.get(net.jami.model.ConfigKey.ACCOUNT_REALM.key());
     }
 
     public AccountCredentials(String username, String password, String realm) {
@@ -70,9 +70,9 @@ public class AccountCredentials implements Serializable {
 
     public HashMap<String, String> getDetails() {
         HashMap<String, String> details = new HashMap<>();
-        details.put(ConfigKey.ACCOUNT_USERNAME.key(), mUsername);
-        details.put(ConfigKey.ACCOUNT_PASSWORD.key(), mPassword);
-        details.put(ConfigKey.ACCOUNT_REALM.key(), mRealm);
+        details.put(net.jami.model.ConfigKey.ACCOUNT_USERNAME.key(), mUsername);
+        details.put(net.jami.model.ConfigKey.ACCOUNT_PASSWORD.key(), mPassword);
+        details.put(net.jami.model.ConfigKey.ACCOUNT_REALM.key(), mRealm);
         return details;
     }
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/CallContact.java b/ring-android/libringclient/src/main/java/net/jami/model/CallContact.java
similarity index 97%
rename from ring-android/libringclient/src/main/java/cx/ring/model/CallContact.java
rename to ring-android/libringclient/src/main/java/net/jami/model/CallContact.java
index 03cfb81a8edbc2eb895b21d1d902e946b1e077ed..e1b673e995471baeb93f000ede80550af04d2fab 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/CallContact.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/CallContact.java
@@ -18,12 +18,13 @@
  *  along with this program; if not, write to the Free Software
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.model;
+package net.jami.model;
+
+import net.jami.utils.StringUtils;
 
 import java.util.ArrayList;
 import java.util.Date;
 
-import cx.ring.utils.StringUtils;
 import io.reactivex.Emitter;
 import io.reactivex.Observable;
 import io.reactivex.subjects.BehaviorSubject;
@@ -222,7 +223,11 @@ public class CallContact {
 
     @Override
     public String toString() {
-        return getRingUsername();
+        if (!StringUtils.isEmpty(mUsername)) {
+            return mUsername;
+        } else {
+            return getUri().getRawUriString();
+        }
     }
 
     public void setId(long id) {
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/Codec.java b/ring-android/libringclient/src/main/java/net/jami/model/Codec.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/model/Codec.java
rename to ring-android/libringclient/src/main/java/net/jami/model/Codec.java
index a970e70538b9f882a49363b32612faa7419e361c..00143a33afc4bd01ed4e7c2f7a7a1f9f6aa4301e 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/Codec.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/Codec.java
@@ -19,12 +19,10 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.model;
+package net.jami.model;
 
 import java.util.Map;
 
-import cx.ring.utils.Log;
-
 public class Codec {
 
     public enum Type {AUDIO, VIDEO}
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/Conference.java b/ring-android/libringclient/src/main/java/net/jami/model/Conference.java
similarity index 96%
rename from ring-android/libringclient/src/main/java/cx/ring/model/Conference.java
rename to ring-android/libringclient/src/main/java/net/jami/model/Conference.java
index 2e6f3551042c47d25e34022d1dd412bb86bc6ea7..6810c5d243c7e3ed8bf0175ef1a8961cf5d395ea 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/Conference.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/Conference.java
@@ -19,7 +19,7 @@
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.model;
+package net.jami.model;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -104,11 +104,11 @@ public class Conference {
         return mId;
     }
 
-    public void setMaximizedCall(SipCall call) {
+    public void setMaximizedCall(net.jami.model.SipCall call) {
         mMaximizedCall = call;
     }
 
-    public SipCall getMaximizedCall() {
+    public net.jami.model.SipCall getMaximizedCall() {
         return mMaximizedCall;
     }
 
@@ -187,7 +187,7 @@ public class Conference {
     }
 
     public boolean hasVideo() {
-        for (SipCall call : mParticipants)
+        for (net.jami.model.SipCall call : mParticipants)
             if (!call.isAudioOnly())
                 return true;
         return false;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/ConfigKey.java b/ring-android/libringclient/src/main/java/net/jami/model/ConfigKey.java
similarity index 99%
rename from ring-android/libringclient/src/main/java/cx/ring/model/ConfigKey.java
rename to ring-android/libringclient/src/main/java/net/jami/model/ConfigKey.java
index 1225b60f49916a66973439371f83581b3bdf332d..3215336c058d2d785838c918d74328ca5f74fe06 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/ConfigKey.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/ConfigKey.java
@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.model;
+package net.jami.model;
 
 public enum ConfigKey {
     MAILBOX("Account.mailbox"),
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/ContactEvent.java b/ring-android/libringclient/src/main/java/net/jami/model/ContactEvent.java
similarity index 91%
rename from ring-android/libringclient/src/main/java/cx/ring/model/ContactEvent.java
rename to ring-android/libringclient/src/main/java/net/jami/model/ContactEvent.java
index 871ed26bf00917d5cc05b5374cb2a96fb9b98a4e..11c0bdd7aa202040759f03473f6939cf3d3011e6 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/ContactEvent.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/ContactEvent.java
@@ -18,11 +18,11 @@
  *  along with this program; if not, write to the Free Software
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.model;
+package net.jami.model;
 
-public class ContactEvent extends Interaction {
+public class ContactEvent extends net.jami.model.Interaction {
 
-    public TrustRequest request;
+    public net.jami.model.TrustRequest request;
     public Event event;
 
 
@@ -47,7 +47,7 @@ public class ContactEvent extends Interaction {
         mIsRead = 1;
     }
 
-    public ContactEvent(CallContact contact) {
+    public ContactEvent(net.jami.model.CallContact contact) {
         mContact = contact;
         mAuthor = contact.getUri().getUri();
         mType = InteractionType.CONTACT.toString();
@@ -57,7 +57,7 @@ public class ContactEvent extends Interaction {
         mIsRead = 1;
     }
 
-    public ContactEvent(CallContact contact, TrustRequest request) {
+    public ContactEvent(CallContact contact, net.jami.model.TrustRequest request) {
         this.request = request;
         mContact = contact;
         mAuthor = contact.getUri().getUri();
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/Conversation.java b/ring-android/libringclient/src/main/java/net/jami/model/Conversation.java
similarity index 73%
rename from ring-android/libringclient/src/main/java/cx/ring/model/Conversation.java
rename to ring-android/libringclient/src/main/java/net/jami/model/Conversation.java
index 954b27598696d6c732d877c179dd87f7e7843262..a40df86a29f19fb445bb9a57fcfeab15f15c9c87 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/Conversation.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/Conversation.java
@@ -18,7 +18,11 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.model;
+package net.jami.model;
+
+import net.jami.utils.Log;
+import net.jami.utils.StringUtils;
+import net.jami.utils.Tuple;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -32,10 +36,6 @@ import java.util.NavigableMap;
 import java.util.Set;
 import java.util.TreeMap;
 
-import cx.ring.model.Interaction.InteractionType;
-import cx.ring.utils.Log;
-import cx.ring.utils.StringUtils;
-import cx.ring.utils.Tuple;
 import io.reactivex.Observable;
 import io.reactivex.Single;
 import io.reactivex.subjects.BehaviorSubject;
@@ -46,22 +46,22 @@ public class Conversation extends ConversationHistory {
     private static final String TAG = Conversation.class.getSimpleName();
 
     private final String mAccountId;
-    private final Uri mKey;
-    private final List<CallContact> mContacts;
+    private final net.jami.model.Uri mKey;
+    private final List<net.jami.model.CallContact> mContacts;
 
     private final NavigableMap<Long, Interaction> mHistory = new TreeMap<>();
-    private final ArrayList<Conference> mCurrentCalls = new ArrayList<>();
+    private final ArrayList<net.jami.model.Conference> mCurrentCalls = new ArrayList<>();
     private final ArrayList<Interaction> mAggregateHistory = new ArrayList<>(32);
     private Interaction lastDisplayed = null;
 
-    private final Subject<Tuple<Interaction, ElementStatus>> updatedElementSubject = PublishSubject.create();
+    private final Subject<net.jami.utils.Tuple<Interaction, ElementStatus>> updatedElementSubject = PublishSubject.create();
     private final Subject<Interaction> lastDisplayedSubject = BehaviorSubject.create();
     private final Subject<List<Interaction>> clearedSubject = PublishSubject.create();
-    private final Subject<List<Conference>> callsSubject = BehaviorSubject.create();
-    private final Subject<Account.ComposingStatus> composingStatusSubject = BehaviorSubject.createDefault(Account.ComposingStatus.Idle);
+    private final Subject<List<net.jami.model.Conference>> callsSubject = BehaviorSubject.create();
+    private final Subject<net.jami.model.Account.ComposingStatus> composingStatusSubject = BehaviorSubject.createDefault(net.jami.model.Account.ComposingStatus.Idle);
     private final Subject<Integer> color = BehaviorSubject.create();
     private final Subject<CharSequence> symbol = BehaviorSubject.create();
-    private final Subject<List<CallContact>> mContactSubject = BehaviorSubject.create();
+    private final Subject<List<net.jami.model.CallContact>> mContactSubject = BehaviorSubject.create();
 
     private Single<Conversation> isLoaded = null;
 
@@ -77,7 +77,7 @@ public class Conversation extends ConversationHistory {
     // indicate the list needs sorting
     private boolean mDirty = false;
 
-    public Conversation(String accountId, CallContact contact) {
+    public Conversation(String accountId, net.jami.model.CallContact contact) {
         mAccountId = accountId;
         mContacts = Collections.singletonList(contact);
         mKey = contact.getUri();
@@ -86,37 +86,37 @@ public class Conversation extends ConversationHistory {
         mMode = null;
     }
 
-    public Conversation(String accountId, Uri uri, Mode mode) {
+    public Conversation(String accountId, net.jami.model.Uri uri, Mode mode) {
         mAccountId = accountId;
         mKey = uri;
         mContacts = new ArrayList<>(3);
         mMode = mode;
     }
 
-    public Conference getConference(String id) {
-        for (Conference c : mCurrentCalls)
+    public net.jami.model.Conference getConference(String id) {
+        for (net.jami.model.Conference c : mCurrentCalls)
             if (c.getId().contentEquals(id) || c.getCallById(id) != null) {
                 return c;
             }
         return null;
     }
 
-    public void composingStatusChanged(CallContact contact, Account.ComposingStatus composing) {
+    public void composingStatusChanged(net.jami.model.CallContact contact, net.jami.model.Account.ComposingStatus composing) {
         composingStatusSubject.onNext(composing);
     }
 
-    public Uri getUri() {
+    public net.jami.model.Uri getUri() {
         return mKey;
     }
 
     public Mode getMode() { return mMode; }
 
     public boolean isSwarm() {
-        return Uri.SWARM_SCHEME.equals(getUri().getScheme());
+        return net.jami.model.Uri.SWARM_SCHEME.equals(getUri().getScheme());
     }
 
     public boolean matches(String query) {
-        for (CallContact contact : getContacts()) {
+        for (net.jami.model.CallContact contact : getContacts()) {
             if (contact.matches(query))
                 return true;
         }
@@ -127,12 +127,12 @@ public class Conversation extends ConversationHistory {
         return mContacts.get(0).getDisplayName();
     }
 
-    public void addContact(CallContact contact) {
+    public void addContact(net.jami.model.CallContact contact) {
         mContacts.add(contact);
         mContactSubject.onNext(mContacts);
     }
 
-    public void removeContact(CallContact contact)  {
+    public void removeContact(net.jami.model.CallContact contact)  {
         mContacts.remove(contact);
         mContactSubject.onNext(mContacts);
     }
@@ -146,13 +146,13 @@ public class Conversation extends ConversationHistory {
         StringBuilder ret = new StringBuilder();
         ArrayList<String> names = new ArrayList<>(mContacts.size());
         int target = mContacts.size();
-        for (CallContact c : mContacts) {
+        for (net.jami.model.CallContact c : mContacts) {
             if (c.isUser()) {
                 target--;
                 continue;
             }
             String displayName = c.getDisplayName();
-            if (!StringUtils.isEmpty(displayName)) {
+            if (!net.jami.utils.StringUtils.isEmpty(displayName)) {
                 names.add(displayName);
                 if (names.size() == 3)
                     break;
@@ -173,9 +173,9 @@ public class Conversation extends ConversationHistory {
             return mContacts.get(0).getRingUsername();
         }
         StringBuilder ret = new StringBuilder();
-        Iterator<CallContact> it = mContacts.iterator();
+        Iterator<net.jami.model.CallContact> it = mContacts.iterator();
         while (it.hasNext()) {
-            CallContact c = it.next();
+            net.jami.model.CallContact c = it.next();
             if (c.isUser())
                 continue;
             ret.append(c.getRingUsername());
@@ -185,7 +185,7 @@ public class Conversation extends ConversationHistory {
         return ret.toString();
     }
 
-    public Observable<List<CallContact>> getContactUpdates() {
+    public Observable<List<net.jami.model.CallContact>> getContactUpdates() {
         return mContactSubject;
     }
 
@@ -218,7 +218,7 @@ public class Conversation extends ConversationHistory {
         UPDATE, REMOVE, ADD
     }
 
-    public Observable<Tuple<Interaction, ElementStatus>> getUpdatedElements() {
+    public Observable<net.jami.utils.Tuple<Interaction, ElementStatus>> getUpdatedElements() {
         return updatedElementSubject;
     }
 
@@ -238,12 +238,12 @@ public class Conversation extends ConversationHistory {
         return composingStatusSubject;
     }
 
-    public void addConference(final Conference conference) {
+    public void addConference(final net.jami.model.Conference conference) {
         if (conference == null) {
             return;
         }
         for (int i = 0; i < mCurrentCalls.size(); i++) {
-            final Conference currentConference = mCurrentCalls.get(i);
+            final net.jami.model.Conference currentConference = mCurrentCalls.get(i);
             if (currentConference == conference) {
                 return;
             }
@@ -256,7 +256,7 @@ public class Conversation extends ConversationHistory {
         callsSubject.onNext(mCurrentCalls);
     }
 
-    public void removeConference(Conference c) {
+    public void removeConference(net.jami.model.Conference c) {
         mCurrentCalls.remove(c);
         callsSubject.onNext(mCurrentCalls);
     }
@@ -277,31 +277,31 @@ public class Conversation extends ConversationHistory {
         mVisible = visible;
     }
 
-    public List<CallContact> getContacts() {
+    public List<net.jami.model.CallContact> getContacts() {
         return mContacts;
     }
 
-    public CallContact getContact() {
+    public Contact getContact() {
         if (mContacts.size() == 1)
             return mContacts.get(0);
         if (isSwarm()) {
             if (mContacts.size() > 2)
                 throw new IllegalStateException("getContact() called for group conversation of size " + mContacts.size());
         }
-        for (CallContact contact : mContacts) {
+        for (net.jami.model.CallContact contact : mContacts) {
             if (!contact.isUser())
                 return contact;
         }
         return null;
     }
 
-    public void addCall(SipCall call) {
+    public void addCall(net.jami.model.SipCall call) {
         if (!isSwarm() && getCallHistory().contains(call)) {
             return;
         }
         mDirty = true;
         mAggregateHistory.add(call);
-        updatedElementSubject.onNext(new Tuple<>(call, ElementStatus.ADD));
+        updatedElementSubject.onNext(new net.jami.utils.Tuple<>(call, ElementStatus.ADD));
     }
 
     private void setInteractionProperties(Interaction interaction) {
@@ -310,12 +310,12 @@ public class Conversation extends ConversationHistory {
             if (mContacts.size() == 1)
                 interaction.setContact(mContacts.get(0));
             else
-                interaction.setContact(findContact(Uri.fromString(interaction.getAuthor())));
+                interaction.setContact(findContact(net.jami.model.Uri.fromString(interaction.getAuthor())));
         }
     }
 
-    public CallContact findContact(Uri uri) {
-        for (CallContact contact : mContacts)  {
+    public net.jami.model.CallContact findContact(net.jami.model.Uri uri) {
+        for (net.jami.model.CallContact contact : mContacts)  {
             if (contact.getUri().equals(uri)) {
                 return contact;
             }
@@ -323,40 +323,40 @@ public class Conversation extends ConversationHistory {
         return null;
     }
 
-    public void addTextMessage(TextMessage txt) {
+    public void addTextMessage(net.jami.model.TextMessage txt) {
         if (mVisible) {
             txt.read();
         }
         if (txt.getConversation() == null) {
-            Log.e(TAG, "Error in conversation class... No conversation is attached to this interaction");
+            net.jami.utils.Log.e(TAG, "Error in conversation class... No conversation is attached to this interaction");
         }
         setInteractionProperties(txt);
         mHistory.put(txt.getTimestamp(), txt);
         mDirty = true;
         mAggregateHistory.add(txt);
-        updatedElementSubject.onNext(new Tuple<>(txt, ElementStatus.ADD));
+        updatedElementSubject.onNext(new net.jami.utils.Tuple<>(txt, ElementStatus.ADD));
     }
 
-    public void addRequestEvent(TrustRequest request, CallContact contact) {
+    public void addRequestEvent(TrustRequest request, net.jami.model.CallContact contact) {
         if (isSwarm())
             return;
         ContactEvent event = new ContactEvent(contact, request);
         mDirty = true;
         mAggregateHistory.add(event);
-        updatedElementSubject.onNext(new Tuple<>(event, ElementStatus.ADD));
+        updatedElementSubject.onNext(new net.jami.utils.Tuple<>(event, ElementStatus.ADD));
     }
 
     public void addContactEvent(CallContact contact) {
         ContactEvent event = new ContactEvent(contact);
         mDirty = true;
         mAggregateHistory.add(event);
-        updatedElementSubject.onNext(new Tuple<>(event, ElementStatus.ADD));
+        updatedElementSubject.onNext(new net.jami.utils.Tuple<>(event, ElementStatus.ADD));
     }
 
     public void addContactEvent(ContactEvent contactEvent) {
         mDirty = true;
         mAggregateHistory.add(contactEvent);
-        updatedElementSubject.onNext(new Tuple<>(contactEvent, ElementStatus.ADD));
+        updatedElementSubject.onNext(new net.jami.utils.Tuple<>(contactEvent, ElementStatus.ADD));
     }
 
     public void addFileTransfer(DataTransfer dataTransfer) {
@@ -365,15 +365,15 @@ public class Conversation extends ConversationHistory {
         }
         mDirty = true;
         mAggregateHistory.add(dataTransfer);
-        updatedElementSubject.onNext(new Tuple<>(dataTransfer, ElementStatus.ADD));
+        updatedElementSubject.onNext(new net.jami.utils.Tuple<>(dataTransfer, ElementStatus.ADD));
     }
 
-    public void updateTextMessage(TextMessage text) {
+    public void updateTextMessage(net.jami.model.TextMessage text) {
         if (isSwarm()) {
-            TextMessage txt = (TextMessage) mMessages.get(text.getMessageId());
+            net.jami.model.TextMessage txt = (net.jami.model.TextMessage) mMessages.get(text.getMessageId());
             if (txt != null) {
                 txt.setStatus(text.getStatus());
-                updatedElementSubject.onNext(new Tuple<>(txt, ElementStatus.UPDATE));
+                updatedElementSubject.onNext(new net.jami.utils.Tuple<>(txt, ElementStatus.UPDATE));
                 if (text.getStatus() == Interaction.InteractionStatus.DISPLAYED) {
                     if (lastDisplayed == null || lastDisplayed.getTimestamp() < text.getTimestamp()) {
                         lastDisplayed = text;
@@ -381,7 +381,7 @@ public class Conversation extends ConversationHistory {
                     }
                 }
             } else {
-                Log.e(TAG, "Can't find swarm message to update: " + text.getMessageId());
+                net.jami.utils.Log.e(TAG, "Can't find swarm message to update: " + text.getMessageId());
             }
         } else {
             setInteractionProperties(text);
@@ -390,7 +390,7 @@ public class Conversation extends ConversationHistory {
             for (Interaction txt : msgs.values()) {
                 if (txt.getId() == text.getId()) {
                     txt.setStatus(text.getStatus());
-                    updatedElementSubject.onNext(new Tuple<>(txt, ElementStatus.UPDATE));
+                    updatedElementSubject.onNext(new net.jami.utils.Tuple<>(txt, ElementStatus.UPDATE));
                     if (text.getStatus() == Interaction.InteractionStatus.DISPLAYED) {
                         if (lastDisplayed == null || lastDisplayed.getTimestamp() < text.getTimestamp()) {
                             lastDisplayed = text;
@@ -400,7 +400,7 @@ public class Conversation extends ConversationHistory {
                     return;
                 }
             }
-            Log.e(TAG, "Can't find message to update: " + text.getId());
+            net.jami.utils.Log.e(TAG, "Can't find message to update: " + text.getId());
         }
     }
 
@@ -434,42 +434,42 @@ public class Conversation extends ConversationHistory {
         return mAggregateHistory.get(mAggregateHistory.size() - 1);
     }
 
-    public Conference getCurrentCall() {
+    public net.jami.model.Conference getCurrentCall() {
         if (mCurrentCalls.isEmpty()) {
             return null;
         }
         return mCurrentCalls.get(0);
     }
 
-    public ArrayList<Conference> getCurrentCalls() {
+    public ArrayList<net.jami.model.Conference> getCurrentCalls() {
         return mCurrentCalls;
     }
 
-    public Collection<SipCall> getCallHistory() {
-        List<SipCall> result = new ArrayList<>();
+    public Collection<net.jami.model.SipCall> getCallHistory() {
+        List<net.jami.model.SipCall> result = new ArrayList<>();
         for (Interaction interaction : mAggregateHistory) {
-            if (interaction.getType() == InteractionType.CALL) {
-                result.add((SipCall) interaction);
+            if (interaction.getType() == Interaction.InteractionType.CALL) {
+                result.add((net.jami.model.SipCall) interaction);
             }
         }
         return result;
     }
 
-    public TreeMap<Long, TextMessage> getUnreadTextMessages() {
-        TreeMap<Long, TextMessage> texts = new TreeMap<>();
+    public TreeMap<Long, net.jami.model.TextMessage> getUnreadTextMessages() {
+        TreeMap<Long, net.jami.model.TextMessage> texts = new TreeMap<>();
         if (isSwarm()) {
             for(int j = mAggregateHistory.size() - 1; j >= 0; j--) {
                 Interaction i = mAggregateHistory.get(j);
                 if (i.isRead())
                     break;
-                if (i instanceof TextMessage)
-                    texts.put(i.getTimestamp(), (TextMessage) i);
+                if (i instanceof net.jami.model.TextMessage)
+                    texts.put(i.getTimestamp(), (net.jami.model.TextMessage) i);
             }
         } else {
             for (Map.Entry<Long, Interaction> entry : mHistory.descendingMap().entrySet()) {
                 Interaction value = entry.getValue();
-                if (value.getType() == InteractionType.TEXT) {
-                    TextMessage message = (TextMessage) value;
+                if (value.getType() == Interaction.InteractionType.TEXT) {
+                    net.jami.model.TextMessage message = (net.jami.model.TextMessage) value;
                     if (message.isRead())
                         break;
                     texts.put(entry.getKey(), message);
@@ -486,7 +486,7 @@ public class Conversation extends ConversationHistory {
 
     private Interaction findConversationElement(int transferId) {
         for (Interaction interaction : mAggregateHistory) {
-            if (interaction != null && interaction.getType() == (InteractionType.DATA_TRANSFER)) {
+            if (interaction != null && interaction.getType() == (Interaction.InteractionType.DATA_TRANSFER)) {
                 if (transferId == (interaction.getId())) {
                     return interaction;
                 }
@@ -525,13 +525,13 @@ public class Conversation extends ConversationHistory {
     static private Interaction getTypedInteraction(Interaction interaction) {
         switch (interaction.getType()) {
             case TEXT:
-                return new TextMessage(interaction);
+                return new net.jami.model.TextMessage(interaction);
             case CALL:
-                return new SipCall(interaction);
+                return new net.jami.model.SipCall(interaction);
             case CONTACT:
                 return new ContactEvent(interaction);
             case DATA_TRANSFER:
-                return new DataTransfer(interaction);
+                return new net.jami.model.DataTransfer(interaction);
         }
         return interaction;
     }
@@ -556,17 +556,17 @@ public class Conversation extends ConversationHistory {
 
     public void addElement(Interaction interaction) {
         setInteractionProperties(interaction);
-        if (interaction.getType() == InteractionType.TEXT) {
-            TextMessage msg = new TextMessage(interaction);
+        if (interaction.getType() == Interaction.InteractionType.TEXT) {
+            net.jami.model.TextMessage msg = new TextMessage(interaction);
             addTextMessage(msg);
-        } else if (interaction.getType() == InteractionType.CALL) {
-            SipCall call = new SipCall(interaction);
+        } else if (interaction.getType() == Interaction.InteractionType.CALL) {
+            SipCall call = new net.jami.model.SipCall(interaction);
             addCall(call);
-        } else if (interaction.getType() == InteractionType.CONTACT) {
+        } else if (interaction.getType() == Interaction.InteractionType.CONTACT) {
             ContactEvent event = new ContactEvent(interaction);
             addContactEvent(event);
-        } else if (interaction.getType() == InteractionType.DATA_TRANSFER) {
-            DataTransfer dataTransfer = new DataTransfer(interaction);
+        } else if (interaction.getType() == Interaction.InteractionType.DATA_TRANSFER) {
+            net.jami.model.DataTransfer dataTransfer = new net.jami.model.DataTransfer(interaction);
             addFileTransfer(dataTransfer);
         }
     }
@@ -606,13 +606,13 @@ public class Conversation extends ConversationHistory {
         if (mAggregateHistory.isEmpty() || interaction.getParentIds().contains(mAggregateHistory.get(mAggregateHistory.size()-1).getMessageId())) {
             // New leaf
             mAggregateHistory.add(interaction);
-            updatedElementSubject.onNext(new Tuple<>(interaction, ElementStatus.ADD));
+            updatedElementSubject.onNext(new net.jami.utils.Tuple<>(interaction, ElementStatus.ADD));
         } else {
             // New root or normal node
             for (int i = 0; i < mAggregateHistory.size(); i++) {
                 if (mAggregateHistory.get(i).getParentIds() != null && mAggregateHistory.get(i).getParentIds().contains(interaction.getMessageId())) {
                     mAggregateHistory.add(i, interaction);
-                    updatedElementSubject.onNext(new Tuple<>(interaction, ElementStatus.ADD));
+                    updatedElementSubject.onNext(new net.jami.utils.Tuple<>(interaction, ElementStatus.ADD));
                     break;
                 }
             }
@@ -624,11 +624,11 @@ public class Conversation extends ConversationHistory {
         return mRoots;
     }
 
-    public void updateFileTransfer(DataTransfer transfer, Interaction.InteractionStatus eventCode) {
-        DataTransfer dataTransfer = (DataTransfer) findConversationElement(transfer.getId());
+    public void updateFileTransfer(net.jami.model.DataTransfer transfer, Interaction.InteractionStatus eventCode) {
+        net.jami.model.DataTransfer dataTransfer = (net.jami.model.DataTransfer) findConversationElement(transfer.getId());
         if (dataTransfer != null) {
             dataTransfer.setStatus(eventCode);
-            updatedElementSubject.onNext(new Tuple<>(dataTransfer, ElementStatus.UPDATE));
+            updatedElementSubject.onNext(new net.jami.utils.Tuple<>(dataTransfer, ElementStatus.UPDATE));
         }
     }
 
@@ -674,7 +674,7 @@ public class Conversation extends ConversationHistory {
 
     public interface ConversationActionCallback {
 
-        void removeConversation(Uri callContact);
+        void removeConversation(net.jami.model.Uri callContact);
 
         void clearConversation(Uri callContact);
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/ConversationHistory.java b/ring-android/libringclient/src/main/java/net/jami/model/ConversationHistory.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/model/ConversationHistory.java
rename to ring-android/libringclient/src/main/java/net/jami/model/ConversationHistory.java
index 38cc05d1de3fb89beafd8fa8629808763805fb4a..5c9083bb5caa9daa17685489192338211059aad8 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/ConversationHistory.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/ConversationHistory.java
@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.model;
+package net.jami.model;
 
 import com.j256.ormlite.field.DatabaseField;
 import com.j256.ormlite.table.DatabaseTable;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/DataTransfer.java b/ring-android/libringclient/src/main/java/net/jami/model/DataTransfer.java
similarity index 89%
rename from ring-android/libringclient/src/main/java/cx/ring/model/DataTransfer.java
rename to ring-android/libringclient/src/main/java/net/jami/model/DataTransfer.java
index 146f58549dc17a10d41d331bdbfe3f240bee06b5..914d4660a8ad1f0f87873756fc922cc2dab96948 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/DataTransfer.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/DataTransfer.java
@@ -18,14 +18,14 @@
  *  along with this program; if not, write to the Free Software
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.model;
+package net.jami.model;
+
+import net.jami.utils.HashUtils;
+import net.jami.utils.StringUtils;
 
 import java.io.File;
 import java.util.Set;
 
-import cx.ring.utils.HashUtils;
-import cx.ring.utils.StringUtils;
-
 public class DataTransfer extends Interaction {
 
     private long mTotalSize;
@@ -35,9 +35,9 @@ public class DataTransfer extends Interaction {
     //private String mTransferId;
     public File destination;
 
-    private static final Set<String> IMAGE_EXTENSIONS = HashUtils.asSet("jpg", "jpeg", "png", "gif");
-    private static final Set<String> AUDIO_EXTENSIONS = HashUtils.asSet("ogg", "mp3", "aac", "flac", "m4a");
-    private static final Set<String> VIDEO_EXTENSIONS = HashUtils.asSet("webm", "mp4", "mkv");
+    private static final Set<String> IMAGE_EXTENSIONS = net.jami.utils.HashUtils.asSet("jpg", "jpeg", "png", "gif");
+    private static final Set<String> AUDIO_EXTENSIONS = net.jami.utils.HashUtils.asSet("ogg", "mp3", "aac", "flac", "m4a");
+    private static final Set<String> VIDEO_EXTENSIONS = net.jami.utils.HashUtils.asSet("webm", "mp4", "mkv");
     private static final int MAX_SIZE = 32 * 1024 * 1024;
     private static final int UNLIMITED_SIZE = 256 * 1024 * 1024;
 
@@ -92,7 +92,7 @@ public class DataTransfer extends Interaction {
         if (mBody == null)
             return null;
         if (mExtension == null)
-            mExtension = StringUtils.getFileExtension(mBody).toLowerCase();
+            mExtension = net.jami.utils.StringUtils.getFileExtension(mBody).toLowerCase();
         return mExtension;
     }
 
@@ -115,7 +115,7 @@ public class DataTransfer extends Interaction {
     }
 
     public String getStoragePath() {
-        if (StringUtils.isEmpty(mBody)) {
+        if (net.jami.utils.StringUtils.isEmpty(mBody)) {
             return getMessageId();
         }
         String ext = StringUtils.getFileExtension(mBody);
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/DataTransferError.java b/ring-android/libringclient/src/main/java/net/jami/model/DataTransferError.java
similarity index 97%
rename from ring-android/libringclient/src/main/java/cx/ring/model/DataTransferError.java
rename to ring-android/libringclient/src/main/java/net/jami/model/DataTransferError.java
index e1165ea912527a18607f2dc942c0b57372750f47..2a4d0b560cfe6651f8d350b32f351febdee2e95b 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/DataTransferError.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/DataTransferError.java
@@ -18,7 +18,7 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.model;
+package net.jami.model;
 
 public enum DataTransferError {
     SUCCESS,
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/Error.java b/ring-android/libringclient/src/main/java/net/jami/model/Error.java
similarity index 97%
rename from ring-android/libringclient/src/main/java/cx/ring/model/Error.java
rename to ring-android/libringclient/src/main/java/net/jami/model/Error.java
index 9d2339b0f7a638f06c2122454c99cb37f504a77d..a618695130d33ebffeb8e1003e703c90fa111b28 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/Error.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/Error.java
@@ -1,4 +1,4 @@
-package cx.ring.model;
+package net.jami.model;
 
 /*
  *  Copyright (C) 2004-2020 Savoir-faire Linux Inc.
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/Interaction.java b/ring-android/libringclient/src/main/java/net/jami/model/Interaction.java
similarity index 93%
rename from ring-android/libringclient/src/main/java/cx/ring/model/Interaction.java
rename to ring-android/libringclient/src/main/java/net/jami/model/Interaction.java
index 8bbe3ddf4848f53a7a7d892f70751c1edfa27b17..3ca47fcdabdd9987222d474727bbe5c32de0bcad 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/Interaction.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/Interaction.java
@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.model;
+package net.jami.model;
 
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
@@ -42,14 +42,14 @@ public class Interaction {
     public static final String COLUMN_EXTRA_FLAG = "extra_data";
     protected String mAccount;
     boolean mIsIncoming;
-    CallContact mContact = null;
+    net.jami.model.CallContact mContact = null;
 
     @DatabaseField(generatedId = true, columnName = COLUMN_ID, index = true)
     int mId;
     @DatabaseField(columnName = COLUMN_AUTHOR, index = true)
     String mAuthor;
-    @DatabaseField(columnName = COLUMN_CONVERSATION, foreignColumnName = ConversationHistory.COLUMN_CONVERSATION_ID, foreign = true)
-    ConversationHistory mConversation;
+    @DatabaseField(columnName = COLUMN_CONVERSATION, foreignColumnName = net.jami.model.ConversationHistory.COLUMN_CONVERSATION_ID, foreign = true)
+    net.jami.model.ConversationHistory mConversation;
     @DatabaseField(columnName = COLUMN_TIMESTAMP, index = true)
     long mTimestamp;
     @DatabaseField(columnName = COLUMN_BODY)
@@ -74,7 +74,7 @@ public class Interaction {
     public Interaction() {
     }
 
-    public Interaction(String id, String author, ConversationHistory conversation, String timestamp, String body, String type, String status, String daemonId, String isRead, String extraFlag) {
+    public Interaction(String id, String author, net.jami.model.ConversationHistory conversation, String timestamp, String body, String type, String status, String daemonId, String isRead, String extraFlag) {
         mId = Integer.parseInt(id);
         mAuthor = author;
         mConversation = conversation;
@@ -123,7 +123,7 @@ public class Interaction {
         mAuthor = author;
     }
 
-    public ConversationHistory getConversation() {
+    public net.jami.model.ConversationHistory getConversation() {
         return mConversation;
     }
 
@@ -195,7 +195,7 @@ public class Interaction {
         return mIsRead == 1;
     }
 
-    public CallContact getContact() {
+    public net.jami.model.CallContact getContact() {
         return mContact;
     }
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/Phone.java b/ring-android/libringclient/src/main/java/net/jami/model/Phone.java
similarity index 85%
rename from ring-android/libringclient/src/main/java/cx/ring/model/Phone.java
rename to ring-android/libringclient/src/main/java/net/jami/model/Phone.java
index 7c514658b1b5bdf8db15133838b639f655b4db12..fa15a6d7b26b060b87c1c12df2992d5eb90fd2ca 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/Phone.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/Phone.java
@@ -17,19 +17,19 @@
  *  along with this program; if not, write to the Free Software
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.model;
+package net.jami.model;
 
 public class Phone {
 
     // TODO: make sure this is usefull since a Uri should already know this
     private NumberType mNumberType;
 
-    private Uri mNumber;
+    private net.jami.model.Uri mNumber;
     private int mCategory; // Home, work, custom etc.
     private String mLabel;
 
 
-    public Phone(Uri number, int category) {
+    public Phone(net.jami.model.Uri number, int category) {
         mNumberType = NumberType.UNKNOWN;
         mNumber = number;
         mLabel = null;
@@ -43,10 +43,10 @@ public class Phone {
     public Phone(String number, int category, String label) {
         mNumberType = NumberType.UNKNOWN;
         mCategory = category;
-        mNumber = Uri.fromString(number);
+        mNumber = net.jami.model.Uri.fromString(number);
         mLabel = label;
     }
-    public Phone(Uri number, int category, String label) {
+    public Phone(net.jami.model.Uri number, int category, String label) {
         mNumberType = NumberType.UNKNOWN;
         mCategory = category;
         mNumber = number;
@@ -55,11 +55,11 @@ public class Phone {
 
     public Phone(String number, int category, String label, NumberType numberType) {
         mNumberType = numberType;
-        mNumber = Uri.fromString(number);
+        mNumber = net.jami.model.Uri.fromString(number);
         mLabel = label;
         mCategory = category;
     }
-    public Phone(Uri number, int category, String label, NumberType numberType) {
+    public Phone(net.jami.model.Uri number, int category, String label, NumberType numberType) {
         mNumberType = numberType;
         mNumber = number;
         mLabel = label;
@@ -74,12 +74,12 @@ public class Phone {
         setNumberType(NumberType.fromInteger(type));
     }
 
-    public Uri getNumber() {
+    public net.jami.model.Uri getNumber() {
         return mNumber;
     }
 
     public void setNumber(String number) {
-        setNumber(Uri.fromString(number));
+        setNumber(net.jami.model.Uri.fromString(number));
     }
 
     public NumberType getNumbertype() {
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/Ringtone.java b/ring-android/libringclient/src/main/java/net/jami/model/Ringtone.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/model/Ringtone.java
rename to ring-android/libringclient/src/main/java/net/jami/model/Ringtone.java
index 1113d15d7caff58c6fd3b6d27aecff9e1465d6d1..983a32c59862a3de88272ec480ad0e68683bacd1 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/Ringtone.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/Ringtone.java
@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.model;
+package net.jami.model;
 
 public class Ringtone {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/Settings.java b/ring-android/libringclient/src/main/java/net/jami/model/Settings.java
similarity index 99%
rename from ring-android/libringclient/src/main/java/cx/ring/model/Settings.java
rename to ring-android/libringclient/src/main/java/net/jami/model/Settings.java
index 3e69c1716d7ea80bb2d3ccb236543687b3281793..61b10e6ea400cbc155568a249e1eef4494bb5c45 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/Settings.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/Settings.java
@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.model;
+package net.jami.model;
 
 public class Settings {
     private boolean mAllowPushNotifications;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/SipCall.java b/ring-android/libringclient/src/main/java/net/jami/model/SipCall.java
similarity index 94%
rename from ring-android/libringclient/src/main/java/cx/ring/model/SipCall.java
rename to ring-android/libringclient/src/main/java/net/jami/model/SipCall.java
index 00911714adbf00caab670afab6302fea571307df..5b3ea590b0e82b6f4acd6ac20326a4dd9a4ba9ae 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/SipCall.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/SipCall.java
@@ -17,20 +17,21 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package cx.ring.model;
+package net.jami.model;
 
 
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 
+import net.jami.utils.ProfileChunk;
+import net.jami.utils.StringUtils;
+import net.jami.utils.VCardUtils;
+
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Objects;
 
-import cx.ring.utils.ProfileChunk;
-import cx.ring.utils.StringUtils;
-import cx.ring.utils.VCardUtils;
 import ezvcard.Ezvcard;
 import ezvcard.VCard;
 
@@ -66,7 +67,7 @@ public class SipCall extends Interaction {
     private String mContactNumber;
     private String mConfId;
 
-    private ProfileChunk mProfileChunk = null;
+    private net.jami.utils.ProfileChunk mProfileChunk = null;
 
     public SipCall(String daemonId, String author, String account, ConversationHistory conversation, CallContact contact, Direction direction) {
         mDaemonId = daemonId == null ? null : Long.parseLong(daemonId);
@@ -249,12 +250,12 @@ public class SipCall extends Interaction {
 
     public VCard appendToVCard(Map<String, String> messages) {
         for (Map.Entry<String, String> message : messages.entrySet()) {
-            HashMap<String, String> messageKeyValue = VCardUtils.parseMimeAttributes(message.getKey());
-            String mimeType = messageKeyValue.get(VCardUtils.VCARD_KEY_MIME_TYPE);
-            if (!VCardUtils.MIME_PROFILE_VCARD.equals(mimeType)) {
+            HashMap<String, String> messageKeyValue = net.jami.utils.VCardUtils.parseMimeAttributes(message.getKey());
+            String mimeType = messageKeyValue.get(net.jami.utils.VCardUtils.VCARD_KEY_MIME_TYPE);
+            if (!net.jami.utils.VCardUtils.MIME_PROFILE_VCARD.equals(mimeType)) {
                 continue;
             }
-            int part = Integer.parseInt(messageKeyValue.get(VCardUtils.VCARD_KEY_PART));
+            int part = Integer.parseInt(messageKeyValue.get(net.jami.utils.VCardUtils.VCARD_KEY_PART));
             int nbPart = Integer.parseInt(messageKeyValue.get(VCardUtils.VCARD_KEY_OF));
             if (null == mProfileChunk) {
                 mProfileChunk = new ProfileChunk(nbPart);
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/TextMessage.java b/ring-android/libringclient/src/main/java/net/jami/model/TextMessage.java
similarity index 99%
rename from ring-android/libringclient/src/main/java/cx/ring/model/TextMessage.java
rename to ring-android/libringclient/src/main/java/net/jami/model/TextMessage.java
index b9ca64b398b3d512f9c14e0b73499d341e7954c8..7c1613060653db64c77f4f3e0bfb6914be8576d0 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/TextMessage.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/TextMessage.java
@@ -18,7 +18,7 @@
  *  along with this program; if not, write to the Free Software
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.model;
+package net.jami.model;
 
 public class TextMessage extends Interaction {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/TrustRequest.java b/ring-android/libringclient/src/main/java/net/jami/model/TrustRequest.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/model/TrustRequest.java
rename to ring-android/libringclient/src/main/java/net/jami/model/TrustRequest.java
index bf85766f0272620c77a66a1e8ea0f47c5433a72f..2cee29ce68e069c8d4f9bb8d562642887c445a6f 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/TrustRequest.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/TrustRequest.java
@@ -18,11 +18,12 @@
  *  along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package cx.ring.model;
+package net.jami.model;
+
+import net.jami.utils.StringUtils;
 
 import java.util.Map;
 
-import cx.ring.utils.StringUtils;
 import ezvcard.Ezvcard;
 import ezvcard.VCard;
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/Uri.java b/ring-android/libringclient/src/main/java/net/jami/model/Uri.java
similarity index 92%
rename from ring-android/libringclient/src/main/java/cx/ring/model/Uri.java
rename to ring-android/libringclient/src/main/java/net/jami/model/Uri.java
index 4116fd8683b360e3fede883bd346b748a958b46c..8144f1c1770ff0b8fd0a26a1b37c9df6229e7c29 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/Uri.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/Uri.java
@@ -17,16 +17,16 @@
  *  along with this program; if not, write to the Free Software
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.model;
+package net.jami.model;
+
+import net.jami.utils.StringUtils;
+import net.jami.utils.Tuple;
 
 import java.io.Serializable;
 import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import cx.ring.utils.StringUtils;
-import cx.ring.utils.Tuple;
-
 public class Uri implements Serializable {
 
     private final String mScheme;
@@ -70,7 +70,7 @@ public class Uri implements Serializable {
         }
     }
 
-    static public Tuple<Uri, String> fromStringWithName(String uriString) {
+    static public net.jami.utils.Tuple<Uri, String> fromStringWithName(String uriString) {
         Matcher m = ANGLE_BRACKETS_PATTERN.matcher(uriString);
         if (m.find()) {
             return new Tuple<>(fromString(m.group(2)), m.group(1));
@@ -111,16 +111,16 @@ public class Uri implements Serializable {
     @Override
     public String toString() {
         StringBuilder builder = new StringBuilder(64);
-        if (!StringUtils.isEmpty(mScheme)) {
+        if (!net.jami.utils.StringUtils.isEmpty(mScheme)) {
             builder.append(mScheme);
         }
-        if (!StringUtils.isEmpty(mUsername)) {
+        if (!net.jami.utils.StringUtils.isEmpty(mUsername)) {
             builder.append(mUsername).append('@');
         }
-        if (!StringUtils.isEmpty(mHost)) {
+        if (!net.jami.utils.StringUtils.isEmpty(mHost)) {
             builder.append(mHost);
         }
-        if (!StringUtils.isEmpty(mPort)) {
+        if (!net.jami.utils.StringUtils.isEmpty(mPort)) {
             builder.append(':').append(mPort);
         }
         return builder.toString();
@@ -152,7 +152,7 @@ public class Uri implements Serializable {
     }
 
     public boolean isEmpty() {
-        return StringUtils.isEmpty(getUsername()) && StringUtils.isEmpty(getHost());
+        return net.jami.utils.StringUtils.isEmpty(getUsername()) && StringUtils.isEmpty(getHost());
     }
 
     /**
diff --git a/ring-android/libringclient/src/main/java/cx/ring/mvp/AccountCreationModel.java b/ring-android/libringclient/src/main/java/net/jami/mvp/AccountCreationModel.java
similarity index 89%
rename from ring-android/libringclient/src/main/java/cx/ring/mvp/AccountCreationModel.java
rename to ring-android/libringclient/src/main/java/net/jami/mvp/AccountCreationModel.java
index bb072d0fe3e0f93a6f9ab57e4007eb8c0c62f8fd..e2a86d346db5e1cfb4599f73fa379b7677e6a524 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/mvp/AccountCreationModel.java
+++ b/ring-android/libringclient/src/main/java/net/jami/mvp/AccountCreationModel.java
@@ -17,12 +17,13 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.mvp;
+package net.jami.mvp;
+
+import net.jami.model.Account;
 
 import java.io.File;
 import java.io.Serializable;
 
-import cx.ring.model.Account;
 import ezvcard.VCard;
 import io.reactivex.Observable;
 import io.reactivex.Single;
@@ -40,10 +41,10 @@ public abstract class AccountCreationModel implements Serializable {
 
     private boolean link = false;
     private boolean mPush = true;
-    transient private Account newAccount = null;
+    transient private net.jami.model.Account newAccount = null;
     transient private Object photo = null;
 
-    transient private Observable<Account> account;
+    transient private Observable<net.jami.model.Account> account;
     transient protected final Subject<AccountCreationModel> profile = BehaviorSubject.createDefault(this);
 
     public AccountCreationModel() {
@@ -123,16 +124,16 @@ public abstract class AccountCreationModel implements Serializable {
         return mManagementServer;
     }
 
-    public void setNewAccount(Account account) {
+    public void setNewAccount(net.jami.model.Account account) {
         newAccount = account;
         profile.onNext(this);
     }
 
-    public Account getNewAccount() {
+    public net.jami.model.Account getNewAccount() {
         return newAccount;
     }
 
-    public void setAccountObservable(Observable<Account> account) {
+    public void setAccountObservable(Observable<net.jami.model.Account> account) {
         this.account = account;
     }
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/mvp/BaseView.java b/ring-android/libringclient/src/main/java/net/jami/mvp/BaseView.java
similarity index 94%
rename from ring-android/libringclient/src/main/java/cx/ring/mvp/BaseView.java
rename to ring-android/libringclient/src/main/java/net/jami/mvp/BaseView.java
index 7da542f2ff4ddc700c19682e9867dd4923374518..1843d705931601b3b7f631110541cb2476dd690a 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/mvp/BaseView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/mvp/BaseView.java
@@ -17,8 +17,9 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.mvp;
-import cx.ring.model.Error;
+package net.jami.mvp;
+
+import net.jami.model.Error;
 
 public interface BaseView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/mvp/GenericView.java b/ring-android/libringclient/src/main/java/net/jami/mvp/GenericView.java
similarity index 97%
rename from ring-android/libringclient/src/main/java/cx/ring/mvp/GenericView.java
rename to ring-android/libringclient/src/main/java/net/jami/mvp/GenericView.java
index 6b5db053d83c8f03fa49b63764c19b0f085e9259..5d10e12553a129feb5bfdf3c77f97eba9afbeb34 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/mvp/GenericView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/mvp/GenericView.java
@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.mvp;
+package net.jami.mvp;
 
 public interface GenericView<VM> {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/mvp/RootPresenter.java b/ring-android/libringclient/src/main/java/net/jami/mvp/RootPresenter.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/mvp/RootPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/mvp/RootPresenter.java
index ca973d7cb74bd694d1ece5d7fb060c5514336958..90b099559960bac12425e136316f388ea1e6b98e 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/mvp/RootPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/mvp/RootPresenter.java
@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.mvp;
+package net.jami.mvp;
 
 import java.lang.ref.WeakReference;
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/mvp/SIPCreationView.java b/ring-android/libringclient/src/main/java/net/jami/mvp/SIPCreationView.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/mvp/SIPCreationView.java
rename to ring-android/libringclient/src/main/java/net/jami/mvp/SIPCreationView.java
index 3a7d53dcf2e4d087b218af383849efec1af102df..9ddf15b052671365068385408ad50382af5e1414 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/mvp/SIPCreationView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/mvp/SIPCreationView.java
@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.mvp;
+package net.jami.mvp;
 
 public interface SIPCreationView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java b/ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationPresenter.java
similarity index 92%
rename from ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationPresenter.java
index fea8eba16ed3013910c37dfe91764ea9b7aa9a0b..6f87e73c3cbdb14aced2a0d35e5740b41409cd1c 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationPresenter.java
@@ -19,22 +19,22 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.navigation;
+package net.jami.navigation;
 
 import java.io.File;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.model.Account;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.services.HardwareService;
-import cx.ring.utils.Log;
-import cx.ring.utils.StringUtils;
-import cx.ring.utils.Tuple;
-import cx.ring.utils.VCardUtils;
+import net.jami.model.Account;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
+import net.jami.services.DeviceRuntimeService;
+import net.jami.services.HardwareService;
+import net.jami.utils.Log;
+import net.jami.utils.StringUtils;
+import net.jami.utils.Tuple;
+import net.jami.utils.VCardUtils;
 import ezvcard.property.Photo;
 import ezvcard.property.RawProperty;
 import ezvcard.property.Uid;
@@ -42,7 +42,7 @@ import io.reactivex.Scheduler;
 import io.reactivex.Single;
 import io.reactivex.schedulers.Schedulers;
 
-public class HomeNavigationPresenter extends RootPresenter<HomeNavigationView> {
+public class HomeNavigationPresenter extends RootPresenter<net.jami.navigation.HomeNavigationView> {
 
     private static final String TAG = HomeNavigationPresenter.class.getSimpleName();
 
@@ -64,14 +64,14 @@ public class HomeNavigationPresenter extends RootPresenter<HomeNavigationView> {
     }
 
     @Override
-    public void bindView(HomeNavigationView view) {
+    public void bindView(net.jami.navigation.HomeNavigationView view) {
         super.bindView(view);
         mCompositeDisposable.add(mAccountService.getProfileAccountList()
                 .filter(accounts -> !accounts.isEmpty())
                 .switchMapSingle(accounts -> accounts.get(0).getAccountAlias().map(alias -> new Tuple<>(accounts.get(0), alias)))
                 .observeOn(mUiScheduler)
                 .subscribe(alias -> {
-                    HomeNavigationView v = getView();
+                    net.jami.navigation.HomeNavigationView v = getView();
                     if (v != null)
                         v.showViewModel(new HomeNavigationViewModel(alias.first, alias.second));
                 }, e ->  Log.e(TAG, "Error loading account list !", e)));
diff --git a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationView.java b/ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationView.java
similarity index 94%
rename from ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationView.java
rename to ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationView.java
index 67ff851e67e18fd1ca312d4d6e3d355f07f841df..604dffbce2c9aa9c02450a53fe061debfcc58225 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationView.java
@@ -17,9 +17,9 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.navigation;
+package net.jami.navigation;
 
-import cx.ring.model.Account;
+import net.jami.model.Account;
 
 public interface HomeNavigationView {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationViewModel.java b/ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationViewModel.java
similarity index 95%
rename from ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationViewModel.java
rename to ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationViewModel.java
index 69c5b558c02abedf534c3b245bd3f169d27382b5..e7452c9cbfc2c88fa3fec838be0029f5b5aff42c 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationViewModel.java
+++ b/ring-android/libringclient/src/main/java/net/jami/navigation/HomeNavigationViewModel.java
@@ -19,9 +19,9 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.navigation;
+package net.jami.navigation;
 
-import cx.ring.model.Account;
+import net.jami.model.Account;
 
 public class HomeNavigationViewModel {
     final private Account mAccount;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/AccountService.java b/ring-android/libringclient/src/main/java/net/jami/services/AccountService.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/services/AccountService.java
rename to ring-android/libringclient/src/main/java/net/jami/services/AccountService.java
index 4fd2f9d90d0b3d21656165834eefd4815098ac10..fe1d565579bba83e0b5a6575a6bbaa2eea35fe84 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/services/AccountService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/AccountService.java
@@ -19,12 +19,14 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.services;
+package net.jami.services;
 
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 
+import net.jami.smartlist.SmartListViewModel;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
@@ -46,33 +48,32 @@ import java.util.concurrent.TimeUnit;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.daemon.Blob;
-import cx.ring.daemon.DataTransferInfo;
-import cx.ring.daemon.Ringservice;
-import cx.ring.daemon.StringMap;
-import cx.ring.daemon.StringVect;
-import cx.ring.daemon.UintVect;
-import cx.ring.model.Account;
-import cx.ring.model.AccountConfig;
-import cx.ring.model.CallContact;
-import cx.ring.model.Codec;
-import cx.ring.model.ConfigKey;
-import cx.ring.model.ContactEvent;
-import cx.ring.model.Conversation;
-import cx.ring.model.DataTransfer;
-import cx.ring.model.DataTransferError;
-import cx.ring.model.Interaction;
-import cx.ring.model.Interaction.InteractionStatus;
-import cx.ring.model.SipCall;
-import cx.ring.model.TextMessage;
-import cx.ring.model.TrustRequest;
-import cx.ring.model.Uri;
-import cx.ring.smartlist.SmartListViewModel;
-import cx.ring.utils.FileUtils;
-import cx.ring.utils.Log;
-import cx.ring.utils.StringUtils;
-import cx.ring.utils.SwigNativeConverter;
-import cx.ring.utils.VCardUtils;
+import net.jami.daemon.Blob;
+import net.jami.daemon.DataTransferInfo;
+import net.jami.daemon.Ringservice;
+import net.jami.daemon.StringMap;
+import net.jami.daemon.StringVect;
+import net.jami.daemon.UintVect;
+import net.jami.model.Account;
+import net.jami.model.AccountConfig;
+import net.jami.model.CallContact;
+import net.jami.model.Codec;
+import net.jami.model.ConfigKey;
+import net.jami.model.ContactEvent;
+import net.jami.model.Conversation;
+import net.jami.model.DataTransfer;
+import net.jami.model.DataTransferError;
+import net.jami.model.Interaction;
+import net.jami.model.Interaction.InteractionStatus;
+import net.jami.model.SipCall;
+import net.jami.model.TextMessage;
+import net.jami.model.TrustRequest;
+import net.jami.model.Uri;
+import net.jami.utils.FileUtils;
+import net.jami.utils.Log;
+import net.jami.utils.StringUtils;
+import net.jami.utils.SwigNativeConverter;
+import net.jami.utils.VCardUtils;
 import ezvcard.Ezvcard;
 import ezvcard.VCard;
 import io.reactivex.Completable;
@@ -112,7 +113,7 @@ public class AccountService {
     DeviceRuntimeService mDeviceRuntimeService;
 
     @Inject
-    VCardService mVCardService;
+    net.jami.services.VCardService mVCardService;
 
     private Account mCurrentAccount;
     private List<Account> mAccountList = new ArrayList<>();
@@ -178,7 +179,7 @@ public class AccountService {
 
     private final Observable<TextMessage> incomingTextMessageSubject = incomingMessageSubject
             .flatMapMaybe(msg -> {
-                String message = msg.messages.get(CallService.MIME_TEXT_PLAIN);
+                String message = msg.messages.get(net.jami.services.CallService.MIME_TEXT_PLAIN);
                 if (message != null) {
                     return mHistoryService
                             .incomingMessage(msg.accountId, msg.messageId, msg.author, message)
@@ -254,8 +255,8 @@ public class AccountService {
             return query;
         }
 
-        public List<Observable<SmartListViewModel>> getResultsViewModels() {
-            List<Observable<SmartListViewModel>> vms = new ArrayList<>(results.size());
+        public List<Observable<net.jami.smartlist.SmartListViewModel>> getResultsViewModels() {
+            List<Observable<net.jami.smartlist.SmartListViewModel>> vms = new ArrayList<>(results.size());
             for (CallContact user : results) {
                 vms.add(Observable.just(new SmartListViewModel(accountId, user, null)));
             }
@@ -1672,7 +1673,7 @@ public class AccountService {
         }).subscribeOn(Schedulers.from(mExecutor));
     }
 
-    public List<cx.ring.daemon.Message> getLastMessages(String accountId, long baseTime) {
+    public List<net.jami.daemon.Message> getLastMessages(String accountId, long baseTime) {
         try {
             return mExecutor.submit(() -> SwigNativeConverter.toJava(Ringservice.getLastMessages(accountId, baseTime))).get();
         } catch (Exception e) {
diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/CallService.java b/ring-android/libringclient/src/main/java/net/jami/services/CallService.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/services/CallService.java
rename to ring-android/libringclient/src/main/java/net/jami/services/CallService.java
index 984004593777aa87bcaa3f027851430f7b69d3c2..7196aa5bab86b35a1cad1c35b8ad6592638c45c3 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/services/CallService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/CallService.java
@@ -18,7 +18,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.services;
+package net.jami.services;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -32,18 +32,18 @@ import java.util.concurrent.ScheduledExecutorService;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.daemon.Blob;
-import cx.ring.daemon.Ringservice;
-import cx.ring.daemon.StringMap;
-import cx.ring.daemon.StringVect;
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conference;
-import cx.ring.model.Conversation;
-import cx.ring.model.SipCall;
-import cx.ring.model.Uri;
-import cx.ring.utils.Log;
-import cx.ring.utils.StringUtils;
+import net.jami.daemon.Blob;
+import net.jami.daemon.Ringservice;
+import net.jami.daemon.StringMap;
+import net.jami.daemon.StringVect;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.Conference;
+import net.jami.model.Conversation;
+import net.jami.model.SipCall;
+import net.jami.model.Uri;
+import net.jami.utils.Log;
+import net.jami.utils.StringUtils;
 import ezvcard.VCard;
 import io.reactivex.Completable;
 import io.reactivex.Observable;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/ConferenceService.java b/ring-android/libringclient/src/main/java/net/jami/services/ConferenceService.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/services/ConferenceService.java
rename to ring-android/libringclient/src/main/java/net/jami/services/ConferenceService.java
index e6c1eefc46e9ebaeb04d97ff40765a48f13b0490..a2c8ac67b7be3d5129e5d2774cf7c777c46f327f 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/services/ConferenceService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/ConferenceService.java
@@ -18,7 +18,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.services;
+package net.jami.services;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -29,9 +29,9 @@ import java.util.concurrent.ScheduledExecutorService;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.daemon.Ringservice;
-import cx.ring.daemon.StringVect;
-import cx.ring.utils.Log;
+import net.jami.daemon.Ringservice;
+import net.jami.daemon.StringVect;
+import net.jami.utils.Log;
 
 public class ConferenceService {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/ContactService.java b/ring-android/libringclient/src/main/java/net/jami/services/ContactService.java
similarity index 97%
rename from ring-android/libringclient/src/main/java/cx/ring/services/ContactService.java
rename to ring-android/libringclient/src/main/java/net/jami/services/ContactService.java
index fb6e2699842b3ff161ea7f7608b60a2dbb00f6a6..9bf434d57b3fde7ea565f7bee1960c55627645c1 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/services/ContactService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/ContactService.java
@@ -18,7 +18,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.services;
+package net.jami.services;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -29,12 +29,12 @@ import java.util.concurrent.TimeUnit;
 
 import javax.inject.Inject;
 
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Settings;
-import cx.ring.model.Uri;
-import cx.ring.utils.Log;
-import cx.ring.utils.StringUtils;
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.Settings;
+import net.jami.model.Uri;
+import net.jami.utils.Log;
+import net.jami.utils.StringUtils;
 import ezvcard.VCard;
 import io.reactivex.Completable;
 import io.reactivex.Observable;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/DaemonService.java b/ring-android/libringclient/src/main/java/net/jami/services/DaemonService.java
similarity index 96%
rename from ring-android/libringclient/src/main/java/cx/ring/services/DaemonService.java
rename to ring-android/libringclient/src/main/java/net/jami/services/DaemonService.java
index 9871aee81ab016fa8832aebe9a19cbc30650e9f8..8be223db902bfab2b87231217e491d365eb19595 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/services/DaemonService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/DaemonService.java
@@ -17,7 +17,24 @@
  *  You should have received a copy of the GNU General Public License
  *  along with this program. If not, see <https://www.gnu.org/licenses/>.
  */
-package cx.ring.services;
+package net.jami.services;
+
+import net.jami.daemon.Blob;
+import net.jami.daemon.Callback;
+import net.jami.daemon.ConfigurationCallback;
+import net.jami.daemon.ConversationCallback;
+import net.jami.daemon.DataTransferCallback;
+import net.jami.daemon.IntVect;
+import net.jami.daemon.IntegerMap;
+import net.jami.daemon.PresenceCallback;
+import net.jami.daemon.Ringservice;
+import net.jami.daemon.StringMap;
+import net.jami.daemon.StringVect;
+import net.jami.daemon.UintVect;
+import net.jami.daemon.VectMap;
+import net.jami.daemon.VideoCallback;
+import net.jami.model.Uri;
+import net.jami.utils.Log;
 
 import java.util.Map;
 import java.util.concurrent.ScheduledExecutorService;
@@ -25,23 +42,6 @@ import java.util.concurrent.ScheduledExecutorService;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.daemon.Blob;
-import cx.ring.daemon.Callback;
-import cx.ring.daemon.ConfigurationCallback;
-import cx.ring.daemon.ConversationCallback;
-import cx.ring.daemon.DataTransferCallback;
-import cx.ring.daemon.IntVect;
-import cx.ring.daemon.IntegerMap;
-import cx.ring.daemon.PresenceCallback;
-import cx.ring.daemon.Ringservice;
-import cx.ring.daemon.StringMap;
-import cx.ring.daemon.StringVect;
-import cx.ring.daemon.UintVect;
-import cx.ring.daemon.VectMap;
-import cx.ring.daemon.VideoCallback;
-import cx.ring.model.Uri;
-import cx.ring.utils.Log;
-
 public class DaemonService {
 
     private static final String TAG = DaemonService.class.getSimpleName();
diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/DeviceRuntimeService.java b/ring-android/libringclient/src/main/java/net/jami/services/DeviceRuntimeService.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/services/DeviceRuntimeService.java
rename to ring-android/libringclient/src/main/java/net/jami/services/DeviceRuntimeService.java
index 28a662373ffa0ce9a4e7bdf20456a1d23b6ef36c..ae1bb691dda5e1cd8e8609009609f2008b220a57 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/services/DeviceRuntimeService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/DeviceRuntimeService.java
@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.services;
+package net.jami.services;
 
 import java.io.File;
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/HardwareService.java b/ring-android/libringclient/src/main/java/net/jami/services/HardwareService.java
similarity index 91%
rename from ring-android/libringclient/src/main/java/cx/ring/services/HardwareService.java
rename to ring-android/libringclient/src/main/java/net/jami/services/HardwareService.java
index 171687721726b17395e146df3f3f22385767dd96..ba1fa04a1abc06b0711d04f8e02f02ed36428188 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/services/HardwareService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/HardwareService.java
@@ -18,7 +18,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.services;
+package net.jami.services;
 
 import java.util.List;
 import java.util.Map;
@@ -27,15 +27,15 @@ import java.util.concurrent.ScheduledExecutorService;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.daemon.IntVect;
-import cx.ring.daemon.Ringservice;
-import cx.ring.daemon.RingserviceJNI;
-import cx.ring.daemon.StringMap;
-import cx.ring.daemon.UintVect;
-import cx.ring.model.Conference;
-import cx.ring.model.SipCall;
-import cx.ring.utils.Log;
-import cx.ring.utils.Tuple;
+import net.jami.daemon.IntVect;
+import net.jami.daemon.Ringservice;
+import net.jami.daemon.RingserviceJNI;
+import net.jami.daemon.StringMap;
+import net.jami.daemon.UintVect;
+import net.jami.model.Conference;
+import net.jami.model.SipCall;
+import net.jami.utils.Log;
+import net.jami.utils.Tuple;
 import io.reactivex.Completable;
 import io.reactivex.Observable;
 import io.reactivex.Scheduler;
@@ -55,7 +55,7 @@ public abstract class HardwareService {
     DeviceRuntimeService mDeviceRuntimeService;
 
     @Inject
-    PreferencesService mPreferenceService;
+    public PreferencesService mPreferenceService;
 
     @Inject
     @Named("UiScheduler")
@@ -78,8 +78,8 @@ public abstract class HardwareService {
         private final AudioOutput outputType;
         private final String outputName;
 
-        protected AudioState(AudioOutput ot) { outputType = ot; outputName = null; }
-        protected AudioState(AudioOutput ot, String name) { outputType = ot; outputName = name; }
+        public AudioState(AudioOutput ot) { outputType = ot; outputName = null; }
+        public AudioState(AudioOutput ot, String name) { outputType = ot; outputName = name; }
 
         public AudioOutput getOutputType() { return outputType; }
         public String getOutputName() { return outputName; }
@@ -175,7 +175,7 @@ public abstract class HardwareService {
         mExecutor.execute(Ringservice::connectivityChanged);
     }
 
-    void switchInput(final String id, final String uri) {
+    protected void switchInput(final String id, final String uri) {
         Log.i(TAG, "switchInput() " + uri);
         mExecutor.execute(() -> Ringservice.switchInput(id, uri));
     }
diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/HistoryService.java b/ring-android/libringclient/src/main/java/net/jami/services/HistoryService.java
similarity index 97%
rename from ring-android/libringclient/src/main/java/cx/ring/services/HistoryService.java
rename to ring-android/libringclient/src/main/java/net/jami/services/HistoryService.java
index 87a46ff4284a45655170a778cbec022be2482394..f9b55782286f0edf8ac35174a5173f8432ec790f 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/services/HistoryService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/HistoryService.java
@@ -18,7 +18,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.services;
+package net.jami.services;
 
 import com.j256.ormlite.dao.Dao;
 import com.j256.ormlite.stmt.DeleteBuilder;
@@ -27,14 +27,14 @@ import com.j256.ormlite.support.ConnectionSource;
 import java.util.ArrayList;
 import java.util.List;
 
-import cx.ring.model.Account;
-import cx.ring.model.Conversation;
-import cx.ring.model.ConversationHistory;
-import cx.ring.model.Interaction;
-import cx.ring.model.TextMessage;
-import cx.ring.model.Uri;
-import cx.ring.utils.Log;
-import cx.ring.utils.StringUtils;
+import net.jami.model.Account;
+import net.jami.model.Conversation;
+import net.jami.model.ConversationHistory;
+import net.jami.model.Interaction;
+import net.jami.model.TextMessage;
+import net.jami.model.Uri;
+import net.jami.utils.Log;
+import net.jami.utils.StringUtils;
 import io.reactivex.Completable;
 import io.reactivex.Scheduler;
 import io.reactivex.Single;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/LogService.java b/ring-android/libringclient/src/main/java/net/jami/services/LogService.java
similarity index 97%
rename from ring-android/libringclient/src/main/java/cx/ring/services/LogService.java
rename to ring-android/libringclient/src/main/java/net/jami/services/LogService.java
index 35e3085976435586d9f688f2df1186f1028169d8..be3cdc56589ddce34b51e8d8f9cd14e871b54e93 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/services/LogService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/LogService.java
@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.services;
+package net.jami.services;
 
 public interface LogService {
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/NotificationService.java b/ring-android/libringclient/src/main/java/net/jami/services/NotificationService.java
similarity index 90%
rename from ring-android/libringclient/src/main/java/cx/ring/services/NotificationService.java
rename to ring-android/libringclient/src/main/java/net/jami/services/NotificationService.java
index 2ae71a52cad4149c195263c8671ccb3b8e63eb3f..1f29a47216c5911f5f38712f570e250142da6b78 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/services/NotificationService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/NotificationService.java
@@ -18,15 +18,15 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.services;
-
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Conference;
-import cx.ring.model.Conversation;
-import cx.ring.model.DataTransfer;
-import cx.ring.model.SipCall;
-import cx.ring.model.Uri;
+package net.jami.services;
+
+import net.jami.model.Account;
+import net.jami.model.CallContact;
+import net.jami.model.Conference;
+import net.jami.model.Conversation;
+import net.jami.model.DataTransfer;
+import net.jami.model.SipCall;
+import net.jami.model.Uri;
 
 public interface NotificationService {
     String TRUST_REQUEST_NOTIFICATION_ACCOUNT_ID = "trustRequestNotificationAccountId";
diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/PreferencesService.java b/ring-android/libringclient/src/main/java/net/jami/services/PreferencesService.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/services/PreferencesService.java
rename to ring-android/libringclient/src/main/java/net/jami/services/PreferencesService.java
index 30717699870ae7d4c7fdca71671cca627109db54..545d1b7747277ab047699c478fa11784310ba03b 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/services/PreferencesService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/PreferencesService.java
@@ -18,13 +18,13 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.services;
+package net.jami.services;
 
 import java.util.Set;
 
 import javax.inject.Inject;
 
-import cx.ring.model.Settings;
+import net.jami.model.Settings;
 import io.reactivex.Observable;
 import io.reactivex.subjects.BehaviorSubject;
 import io.reactivex.subjects.Subject;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/VCardService.java b/ring-android/libringclient/src/main/java/net/jami/services/VCardService.java
similarity index 91%
rename from ring-android/libringclient/src/main/java/cx/ring/services/VCardService.java
rename to ring-android/libringclient/src/main/java/net/jami/services/VCardService.java
index 46fe2a84b772f97216c2f74552a176bdf12c3cb9..aef94f1a8fdc1bde833aced525dd7d9d06b690c9 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/services/VCardService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/VCardService.java
@@ -17,14 +17,11 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.services;
+package net.jami.services;
 
 import java.io.File;
-import java.util.List;
-import java.util.Map;
 
-import cx.ring.model.CallContact;
-import cx.ring.utils.Tuple;
+import net.jami.utils.Tuple;
 import ezvcard.VCard;
 import io.reactivex.Single;
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/settings/SettingsPresenter.java b/ring-android/libringclient/src/main/java/net/jami/settings/SettingsPresenter.java
similarity index 91%
rename from ring-android/libringclient/src/main/java/cx/ring/settings/SettingsPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/settings/SettingsPresenter.java
index 8aa6b99af01c78ed6554ffa073fca2e67e80f16b..14b6e9cf490506f8d7ea759765470a2eca8c6895 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/settings/SettingsPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/settings/SettingsPresenter.java
@@ -18,17 +18,17 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.settings;
+package net.jami.settings;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.facades.ConversationFacade;
-import cx.ring.model.Settings;
-import cx.ring.mvp.GenericView;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.PreferencesService;
-import cx.ring.utils.Log;
+import net.jami.facades.ConversationFacade;
+import net.jami.model.Settings;
+import net.jami.mvp.GenericView;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.PreferencesService;
+import net.jami.utils.Log;
 import io.reactivex.Scheduler;
 
 public class SettingsPresenter extends RootPresenter<GenericView<Settings>>  {
diff --git a/ring-android/libringclient/src/main/java/cx/ring/share/SharePresenter.java b/ring-android/libringclient/src/main/java/net/jami/share/SharePresenter.java
similarity index 90%
rename from ring-android/libringclient/src/main/java/cx/ring/share/SharePresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/share/SharePresenter.java
index ff11b9a4823a880cbe3f0d9829b3633868146adf..9d3f0d82b9b1364ddaf8af6a0aa305c6e85d826e 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/share/SharePresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/share/SharePresenter.java
@@ -18,18 +18,20 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.share;
+package net.jami.share;
+
+import net.jami.services.AccountService;
 
 import javax.inject.Inject;
 
-import cx.ring.mvp.GenericView;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
+import net.jami.mvp.GenericView;
+import net.jami.mvp.RootPresenter;
+
 import io.reactivex.Scheduler;
 import io.reactivex.schedulers.Schedulers;
 
 public class SharePresenter extends RootPresenter<GenericView<ShareViewModel>> {
-    private final AccountService mAccountService;
+    private final net.jami.services.AccountService mAccountService;
     private final Scheduler mUiScheduler;
 
     @Inject
diff --git a/ring-android/libringclient/src/main/java/cx/ring/share/ShareViewModel.java b/ring-android/libringclient/src/main/java/net/jami/share/ShareViewModel.java
similarity index 87%
rename from ring-android/libringclient/src/main/java/cx/ring/share/ShareViewModel.java
rename to ring-android/libringclient/src/main/java/net/jami/share/ShareViewModel.java
index ccd2a23ca970b230d262294f6c44620b3945a865..ca212c05313230b868b9568327db32213d0e100c 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/share/ShareViewModel.java
+++ b/ring-android/libringclient/src/main/java/net/jami/share/ShareViewModel.java
@@ -17,10 +17,10 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.share;
+package net.jami.share;
 
-import cx.ring.model.Account;
-import cx.ring.utils.QRCodeUtils;
+import net.jami.utils.QRCodeUtils;
+import net.jami.model.Account;
 
 public class ShareViewModel {
 
@@ -34,7 +34,7 @@ public class ShareViewModel {
         mAccount = account;
     }
 
-    public QRCodeUtils.QRCodeData getAccountQRCodeData(final int foregroundColor, final int backgroundColor) {
+    public net.jami.utils.QRCodeUtils.QRCodeData getAccountQRCodeData(final int foregroundColor, final int backgroundColor) {
         return QRCodeUtils.encodeStringAsQRCodeData(shareUri, foregroundColor, backgroundColor);
     }
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListPresenter.java b/ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListPresenter.java
similarity index 85%
rename from ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListPresenter.java
index 315b9e46938c0df25dd6198cc26f0033935e12a1..90c67c9262e49f300c4ffc48f6f3a3ab43302f0b 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListPresenter.java
@@ -18,7 +18,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.smartlist;
+package net.jami.smartlist;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -27,14 +27,13 @@ import java.util.concurrent.TimeUnit;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.facades.ConversationFacade;
-import cx.ring.model.Account;
-import cx.ring.model.CallContact;
-import cx.ring.model.Uri;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.services.AccountService;
-import cx.ring.services.ContactService;
-import cx.ring.utils.Log;
+import net.jami.facades.ConversationFacade;
+import net.jami.model.Account;
+import net.jami.model.Uri;
+import net.jami.mvp.RootPresenter;
+import net.jami.services.AccountService;
+import net.jami.services.ContactService;
+import net.jami.utils.Log;
 import io.reactivex.Observable;
 import io.reactivex.Scheduler;
 import io.reactivex.disposables.CompositeDisposable;
@@ -102,11 +101,11 @@ public class SmartListPresenter extends RootPresenter<SmartListView> {
         }
     }
 
-    public void conversationClicked(SmartListViewModel viewModel) {
+    public void conversationClicked(net.jami.smartlist.SmartListViewModel viewModel) {
         startConversation(viewModel.getAccountId(), viewModel.getUri());
     }
 
-    public void conversationLongClicked(SmartListViewModel smartListViewModel) {
+    public void conversationLongClicked(net.jami.smartlist.SmartListViewModel smartListViewModel) {
         getView().displayConversationDialog(smartListViewModel);
     }
 
@@ -130,11 +129,11 @@ public class SmartListPresenter extends RootPresenter<SmartListView> {
         getView().goToConversation(mAccount.getAccountID(), uri);
     }
 
-    public void copyNumber(SmartListViewModel smartListViewModel) {
+    public void copyNumber(net.jami.smartlist.SmartListViewModel smartListViewModel) {
         getView().copyNumber(smartListViewModel.getUri());
     }
 
-    public void clearConversation(SmartListViewModel smartListViewModel) {
+    public void clearConversation(net.jami.smartlist.SmartListViewModel smartListViewModel) {
         getView().displayClearDialog(smartListViewModel.getUri());
     }
 
@@ -144,7 +143,7 @@ public class SmartListPresenter extends RootPresenter<SmartListView> {
                 .subscribeOn(Schedulers.computation()).subscribe());
     }
 
-    public void removeConversation(SmartListViewModel smartListViewModel) {
+    public void removeConversation(net.jami.smartlist.SmartListViewModel smartListViewModel) {
         getView().displayDeleteDialog(smartListViewModel.getUri());
     }
 
@@ -158,16 +157,16 @@ public class SmartListPresenter extends RootPresenter<SmartListView> {
         getView().goToQRFragment();
     }
 
-    void showConversations(Observable<List<Observable<SmartListViewModel>>> conversations) {
+    void showConversations(Observable<List<Observable<net.jami.smartlist.SmartListViewModel>>> conversations) {
         mConversationDisposable.clear();
         getView().setLoading(true);
 
         mConversationDisposable.add(conversations
-                .switchMap(viewModels -> viewModels.isEmpty() ? SmartListViewModel.EMPTY_RESULTS
+                .switchMap(viewModels -> viewModels.isEmpty() ? net.jami.smartlist.SmartListViewModel.EMPTY_RESULTS
                         : Observable.combineLatest(viewModels, obs -> {
-                            List<SmartListViewModel> vms = new ArrayList<>(obs.length);
+                            List<net.jami.smartlist.SmartListViewModel> vms = new ArrayList<>(obs.length);
                             for (Object ob : obs)
-                                vms.add((SmartListViewModel) ob);
+                                vms.add((net.jami.smartlist.SmartListViewModel) ob);
                             return vms;
                         }))
                 .throttleLatest(150, TimeUnit.MILLISECONDS, mUiScheduler)
diff --git a/ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListView.java b/ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListView.java
similarity index 85%
rename from ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListView.java
rename to ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListView.java
index f678c3cf0e3b3e538c34944135a78163ec6dc5d4..6070eaed67ad7779f18652d08a2de746077ff62f 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListView.java
+++ b/ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListView.java
@@ -17,13 +17,12 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.smartlist;
+package net.jami.smartlist;
 
 import java.util.List;
 
-import cx.ring.model.CallContact;
-import cx.ring.model.Uri;
-import cx.ring.mvp.BaseView;
+import net.jami.model.Uri;
+import net.jami.mvp.BaseView;
 
 public interface SmartListView extends BaseView {
 
@@ -31,7 +30,7 @@ public interface SmartListView extends BaseView {
 
     void displayNoConversationMessage();
 
-    void displayConversationDialog(SmartListViewModel smartListViewModel);
+    void displayConversationDialog(net.jami.smartlist.SmartListViewModel smartListViewModel);
 
     void displayClearDialog(Uri callContact);
 
@@ -47,7 +46,7 @@ public interface SmartListView extends BaseView {
 
     void hideNoConversationMessage();
 
-    void updateList(List<SmartListViewModel> smartListViewModels);
+    void updateList(List<net.jami.smartlist.SmartListViewModel> smartListViewModels);
     void update(SmartListViewModel model);
     void update(int position);
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListViewModel.java b/ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListViewModel.java
similarity index 97%
rename from ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListViewModel.java
rename to ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListViewModel.java
index b9354bc12a400d4c1571e7655b90876b9ab2a2e0..ef4286aa505532d83b8b62f0200e54f5d63d0879 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListViewModel.java
+++ b/ring-android/libringclient/src/main/java/net/jami/smartlist/SmartListViewModel.java
@@ -18,16 +18,16 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.smartlist;
+package net.jami.smartlist;
 
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 
-import cx.ring.model.CallContact;
-import cx.ring.model.Conversation;
-import cx.ring.model.Interaction;
-import cx.ring.model.Uri;
+import net.jami.model.CallContact;
+import net.jami.model.Conversation;
+import net.jami.model.Interaction;
+import net.jami.model.Uri;
 import io.reactivex.Observable;
 import io.reactivex.Single;
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/FileUtils.java b/ring-android/libringclient/src/main/java/net/jami/utils/FileUtils.java
similarity index 97%
rename from ring-android/libringclient/src/main/java/cx/ring/utils/FileUtils.java
rename to ring-android/libringclient/src/main/java/net/jami/utils/FileUtils.java
index e6c87429356d0cf99eee0ec6468a2267c52f05d5..370b257625c0d0a8274536187a806f79351a81e6 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/utils/FileUtils.java
+++ b/ring-android/libringclient/src/main/java/net/jami/utils/FileUtils.java
@@ -16,7 +16,7 @@
  *  You should have received a copy of the GNU General Public License
  *  along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
-package cx.ring.utils;
+package net.jami.utils;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -24,7 +24,6 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.text.DecimalFormat;
 
 public class FileUtils {
     private static final String TAG = FileUtils.class.getSimpleName();
diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/HashUtils.java b/ring-android/libringclient/src/main/java/net/jami/utils/HashUtils.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/utils/HashUtils.java
rename to ring-android/libringclient/src/main/java/net/jami/utils/HashUtils.java
index 4673e67901ce87c153d6cc5076164775870cce10..ce4b40ea0654ac9080024f99851134eeeb02c769 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/utils/HashUtils.java
+++ b/ring-android/libringclient/src/main/java/net/jami/utils/HashUtils.java
@@ -18,7 +18,7 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.utils;
+package net.jami.utils;
 
 import java.math.BigInteger;
 import java.security.MessageDigest;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/Log.java b/ring-android/libringclient/src/main/java/net/jami/utils/Log.java
similarity index 93%
rename from ring-android/libringclient/src/main/java/cx/ring/utils/Log.java
rename to ring-android/libringclient/src/main/java/net/jami/utils/Log.java
index ffcdc1dab39ec19bebe6e232e54b52e12480b134..439dba4702dfd30083ec21abfcbdb4a0ae02007e 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/utils/Log.java
+++ b/ring-android/libringclient/src/main/java/net/jami/utils/Log.java
@@ -17,14 +17,14 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.utils;
+package net.jami.utils;
 
-import cx.ring.services.LogService;
+import net.jami.services.LogService;
 
 public class Log {
 
 
-    private static LogService mLogService;
+    private static net.jami.services.LogService mLogService;
 
     public static void injectLogService (LogService service) {
         mLogService = service;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/NameLookupInputHandler.java b/ring-android/libringclient/src/main/java/net/jami/utils/NameLookupInputHandler.java
similarity index 87%
rename from ring-android/libringclient/src/main/java/cx/ring/utils/NameLookupInputHandler.java
rename to ring-android/libringclient/src/main/java/net/jami/utils/NameLookupInputHandler.java
index fa52198028899030e3ad2057fa9543139a310e39..cc0b34bf3422bf5c9ad354c7a068a261c9031db0 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/utils/NameLookupInputHandler.java
+++ b/ring-android/libringclient/src/main/java/net/jami/utils/NameLookupInputHandler.java
@@ -16,22 +16,22 @@
  *  You should have received a copy of the GNU General Public License
  *  along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
-package cx.ring.utils;
+package net.jami.utils;
+
+import net.jami.services.AccountService;
 
 import java.lang.ref.WeakReference;
 import java.util.Timer;
 import java.util.TimerTask;
 
-import cx.ring.services.AccountService;
-
 public class NameLookupInputHandler {
     private static final int WAIT_DELAY = 350;
-    private final WeakReference<AccountService> mAccountService;
+    private final WeakReference<net.jami.services.AccountService> mAccountService;
     private final String mAccountId;
     private final Timer timer = new Timer(true);
     private NameTask lastTask = null;
 
-    public NameLookupInputHandler(AccountService accountService, String accountId) {
+    public NameLookupInputHandler(net.jami.services.AccountService accountService, String accountId) {
         mAccountService = new WeakReference<>(accountService);
         mAccountId = accountId;
     }
diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/ProfileChunk.java b/ring-android/libringclient/src/main/java/net/jami/utils/ProfileChunk.java
similarity index 94%
rename from ring-android/libringclient/src/main/java/cx/ring/utils/ProfileChunk.java
rename to ring-android/libringclient/src/main/java/net/jami/utils/ProfileChunk.java
index 0ecbb226e3c1ddc4ebff23139249330e3e6b19d2..38f708d35150e32181c6bc68c380f59bedb70419 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/utils/ProfileChunk.java
+++ b/ring-android/libringclient/src/main/java/net/jami/utils/ProfileChunk.java
@@ -18,9 +18,9 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.utils;
+package net.jami.utils;
 
-import cx.ring.daemon.StringVect;
+import net.jami.daemon.StringVect;
 
 public class ProfileChunk {
     public final static String TAG = ProfileChunk.class.getSimpleName();
@@ -35,7 +35,7 @@ public class ProfileChunk {
      * @param numberOfParts Number of part to complete the Profile
      */
     public ProfileChunk(long numberOfParts) {
-        Log.d(TAG, "Create ProfileChink of size " + numberOfParts);
+        net.jami.utils.Log.d(TAG, "Create ProfileChink of size " + numberOfParts);
         this.mInsertedParts = 0;
         this.mNumberOfParts = numberOfParts;
         this.mParts = new StringVect();
diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/QRCodeUtils.java b/ring-android/libringclient/src/main/java/net/jami/utils/QRCodeUtils.java
similarity index 99%
rename from ring-android/libringclient/src/main/java/cx/ring/utils/QRCodeUtils.java
rename to ring-android/libringclient/src/main/java/net/jami/utils/QRCodeUtils.java
index 327d30f25fd649331f84bc3cb720ef660479047d..5aadba24bed602ef323cf7802d9d92210fb225f1 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/utils/QRCodeUtils.java
+++ b/ring-android/libringclient/src/main/java/net/jami/utils/QRCodeUtils.java
@@ -18,7 +18,7 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.utils;
+package net.jami.utils;
 
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.EncodeHintType;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/StringUtils.java b/ring-android/libringclient/src/main/java/net/jami/utils/StringUtils.java
similarity index 99%
rename from ring-android/libringclient/src/main/java/cx/ring/utils/StringUtils.java
rename to ring-android/libringclient/src/main/java/net/jami/utils/StringUtils.java
index 9756fa63a706476b1cacbe17d6eb77a15842d6f9..4e10db4f2b05f82c271ed2a96d4985ea06ac47f1 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/utils/StringUtils.java
+++ b/ring-android/libringclient/src/main/java/net/jami/utils/StringUtils.java
@@ -18,7 +18,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.utils;
+package net.jami.utils;
 
 import java.util.Arrays;
 import java.util.HashSet;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/SwigNativeConverter.java b/ring-android/libringclient/src/main/java/net/jami/utils/SwigNativeConverter.java
similarity index 82%
rename from ring-android/libringclient/src/main/java/cx/ring/utils/SwigNativeConverter.java
rename to ring-android/libringclient/src/main/java/net/jami/utils/SwigNativeConverter.java
index ff588160d9200188ede3f53708e77dea2c2920b9..b23a6545bc272cfe46bc2a99c83b87d9a4c2b9f4 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/utils/SwigNativeConverter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/utils/SwigNativeConverter.java
@@ -18,22 +18,23 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.utils;
+package net.jami.utils;
+
+import net.jami.daemon.MessageVect;
+import net.jami.daemon.StringMap;
+import net.jami.daemon.StringVect;
+import net.jami.daemon.VectMap;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-import cx.ring.daemon.Message;
-import cx.ring.daemon.MessageVect;
-import cx.ring.daemon.StringMap;
-import cx.ring.daemon.StringVect;
-import cx.ring.daemon.VectMap;
+import net.jami.daemon.Message;
 
 public class SwigNativeConverter {
 
-    public static VectMap toSwig(List<Map<String, String>> creds) {
-        VectMap toReturn = new VectMap();
+    public static net.jami.daemon.VectMap toSwig(List<Map<String, String>> creds) {
+        net.jami.daemon.VectMap toReturn = new VectMap();
         toReturn.reserve(creds.size());
         for (Map<String, String> aTodecode : creds) {
             toReturn.add(StringMap.toSwig(aTodecode));
diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/Tuple.java b/ring-android/libringclient/src/main/java/net/jami/utils/Tuple.java
similarity index 98%
rename from ring-android/libringclient/src/main/java/cx/ring/utils/Tuple.java
rename to ring-android/libringclient/src/main/java/net/jami/utils/Tuple.java
index 73c82782a66a740855084b6efb6eb63b0e5213ad..9c8f9ab760f93014eead2c8216a8b7f4efdc6afc 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/utils/Tuple.java
+++ b/ring-android/libringclient/src/main/java/net/jami/utils/Tuple.java
@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.utils;
+package net.jami.utils;
 
 public class Tuple<X, Y> {
     public final X first;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/VCardUtils.java b/ring-android/libringclient/src/main/java/net/jami/utils/VCardUtils.java
similarity index 99%
rename from ring-android/libringclient/src/main/java/cx/ring/utils/VCardUtils.java
rename to ring-android/libringclient/src/main/java/net/jami/utils/VCardUtils.java
index 909640c3d31630d56d1ffec8490dabfd64e9b37c..243d8bffa3e0e74bb9972aab0407d4275c29a73f 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/utils/VCardUtils.java
+++ b/ring-android/libringclient/src/main/java/net/jami/utils/VCardUtils.java
@@ -18,7 +18,7 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.utils;
+package net.jami.utils;
 
 import java.io.File;
 import java.io.IOException;
diff --git a/ring-android/libringclient/src/main/java/cx/ring/wizard/SIPCreationPresenter.java b/ring-android/libringclient/src/main/java/net/jami/wizard/SIPCreationPresenter.java
similarity index 90%
rename from ring-android/libringclient/src/main/java/cx/ring/wizard/SIPCreationPresenter.java
rename to ring-android/libringclient/src/main/java/net/jami/wizard/SIPCreationPresenter.java
index cb3831154abb8d83dbf6c50d5954c7ef97acc37d..0f79f7e77b59b6ee3f2d8f5cec2d63cd6a535a6b 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/wizard/SIPCreationPresenter.java
+++ b/ring-android/libringclient/src/main/java/net/jami/wizard/SIPCreationPresenter.java
@@ -18,7 +18,10 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-package cx.ring.wizard;
+package net.jami.wizard;
+
+import net.jami.services.AccountService;
+import net.jami.services.DeviceRuntimeService;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,15 +29,13 @@ import java.util.Map;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import cx.ring.model.Account;
-import cx.ring.model.AccountConfig;
-import cx.ring.model.ConfigKey;
-import cx.ring.mvp.RootPresenter;
-import cx.ring.mvp.SIPCreationView;
-import cx.ring.services.AccountService;
-import cx.ring.services.DeviceRuntimeService;
-import cx.ring.utils.Log;
-import cx.ring.utils.VCardUtils;
+import net.jami.model.Account;
+import net.jami.model.AccountConfig;
+import net.jami.model.ConfigKey;
+import net.jami.mvp.RootPresenter;
+import net.jami.mvp.SIPCreationView;
+import net.jami.utils.Log;
+import net.jami.utils.VCardUtils;
 import ezvcard.VCard;
 import ezvcard.property.FormattedName;
 import ezvcard.property.RawProperty;
@@ -46,9 +47,9 @@ public class SIPCreationPresenter extends RootPresenter<SIPCreationView> {
 
     private static final String TAG = SIPCreationPresenter.class.getSimpleName();
 
-    private AccountService mAccountService;
+    private net.jami.services.AccountService mAccountService;
 
-    private DeviceRuntimeService mDeviceService;
+    private net.jami.services.DeviceRuntimeService mDeviceService;
 
     private Account mAccount;
 
@@ -110,7 +111,7 @@ public class SIPCreationPresenter extends RootPresenter<SIPCreationView> {
             HashMap<String, String> accountDetails = initAccountDetails();
 
             if (accountDetails != null) {
-                accountDetails.put(ConfigKey.ACCOUNT_ALIAS.key(), username);
+                accountDetails.put(net.jami.model.ConfigKey.ACCOUNT_ALIAS.key(), username);
                 if (hostname != null && !hostname.isEmpty()) {
                     accountDetails.put(ConfigKey.ACCOUNT_HOSTNAME.key(), hostname);
                     accountDetails.put(ConfigKey.ACCOUNT_ROUTESET.key(), proxy);
@@ -140,7 +141,7 @@ public class SIPCreationPresenter extends RootPresenter<SIPCreationView> {
                         mAccount = account;
                         switch (account.getRegistrationState()) {
                             case AccountConfig.STATE_REGISTERED:
-                            case AccountConfig.STATE_SUCCESS:
+                            case net.jami.model.AccountConfig.STATE_SUCCESS:
                             case AccountConfig.STATE_READY:
                                 saveProfile(account.getAccountID());
                                 getView().showRegistrationSuccess();
@@ -185,7 +186,7 @@ public class SIPCreationPresenter extends RootPresenter<SIPCreationView> {
 
             //~ Sipinfo is forced for any sipaccount since overrtp is not supported yet.
             //~ This will have to be removed when it will be supported.
-            accountDetails.put(ConfigKey.ACCOUNT_DTMF_TYPE.key(), "sipinfo");
+            accountDetails.put(net.jami.model.ConfigKey.ACCOUNT_DTMF_TYPE.key(), "sipinfo");
             return accountDetails;
         } catch (Exception e) {
             Log.e(TAG, "Error creating account", e);
diff --git a/ring-android/libringclient/src/test/java/cx/ring/model/ConversationTest.java b/ring-android/libringclient/src/test/java/net/jami/model/ConversationTest.java
similarity index 86%
rename from ring-android/libringclient/src/test/java/cx/ring/model/ConversationTest.java
rename to ring-android/libringclient/src/test/java/net/jami/model/ConversationTest.java
index 4306cd2c4f57804e1b7e1257b8ea5d9d2c65c193..e378c14c164f49b08abb06da77d75acd5d93d34b 100644
--- a/ring-android/libringclient/src/test/java/cx/ring/model/ConversationTest.java
+++ b/ring-android/libringclient/src/test/java/net/jami/model/ConversationTest.java
@@ -18,7 +18,13 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.model;
+package net.jami.model;
+
+import net.jami.model.CallContact;
+import net.jami.model.Conversation;
+import net.jami.model.DataTransfer;
+import net.jami.model.TextMessage;
+import net.jami.model.Uri;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -32,18 +38,18 @@ import static org.junit.Assert.assertEquals;
  */
 public class ConversationTest {
 
-    private Conversation conversation;
+    private net.jami.model.Conversation conversation;
 
     @Before
     public void setUp() throws Exception {
-        CallContact contact = new CallContact(1L);
-        conversation = new Conversation(contact);
+        net.jami.model.CallContact contact = new net.jami.model.CallContact(1L);
+        conversation = new net.jami.model.Conversation(contact);
     }
 
     @Test
     public void init_test() throws Exception {
-        CallContact contact = new CallContact(1L);
-        Conversation conversation = new Conversation(contact);
+        CallContact contact = new net.jami.model.CallContact(1L);
+        Conversation conversation = new net.jami.model.Conversation(contact);
 
         assertEquals(conversation.getContact(), contact);
     }
@@ -90,7 +96,7 @@ public class ConversationTest {
     @Test
     public void addTextMessage() throws Exception {
         int oldSize = conversation.getAggregateHistory().size();
-        conversation.addTextMessage(new TextMessage(true, "Coucou", new Uri("ring:test"), "1", "Toi"));
+        conversation.addTextMessage(new net.jami.model.TextMessage(true, "Coucou", new net.jami.model.Uri("ring:test"), "1", "Toi"));
         int newSize = conversation.getAggregateHistory().size();
 
         assertEquals(0, oldSize);
diff --git a/ring-android/libringclient/src/test/java/cx/ring/model/StatusTest.java b/ring-android/libringclient/src/test/java/net/jami/model/StatusTest.java
similarity index 56%
rename from ring-android/libringclient/src/test/java/cx/ring/model/StatusTest.java
rename to ring-android/libringclient/src/test/java/net/jami/model/StatusTest.java
index 246a0a5d26925f39ffd564a1ba2d2ee3c94a90a7..f2e8fd4c493bc05d8e953972bb70e8bcf6f322a8 100644
--- a/ring-android/libringclient/src/test/java/cx/ring/model/StatusTest.java
+++ b/ring-android/libringclient/src/test/java/net/jami/model/StatusTest.java
@@ -18,7 +18,9 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.model;
+package net.jami.model;
+
+import net.jami.model.TextMessage;
 
 import org.junit.Test;
 
@@ -28,32 +30,32 @@ public class StatusTest {
 
     @Test
     public void fromString_test() throws Exception {
-        TextMessage.Status[] values = TextMessage.Status.values();
-        for (TextMessage.Status s : values) {
+        net.jami.model.TextMessage.Status[] values = net.jami.model.TextMessage.Status.values();
+        for (net.jami.model.TextMessage.Status s : values) {
 
-            assertEquals(TextMessage.Status.fromString(s.name()), s);
+            assertEquals(net.jami.model.TextMessage.Status.fromString(s.name()), s);
         }
     }
 
     @Test
     public void fromString_invalid_test() throws Exception {
-        TextMessage.Status status = TextMessage.Status.fromString("abc");
+        net.jami.model.TextMessage.Status status = net.jami.model.TextMessage.Status.fromString("abc");
 
-        assertEquals(TextMessage.Status.UNKNOWN, status);
+        assertEquals(net.jami.model.TextMessage.Status.UNKNOWN, status);
     }
 
     @Test
     public void fromString_null_test() throws Exception {
-        TextMessage.Status status = TextMessage.Status.fromString(null);
+        net.jami.model.TextMessage.Status status = net.jami.model.TextMessage.Status.fromString(null);
 
-        assertEquals(TextMessage.Status.UNKNOWN, status);
+        assertEquals(net.jami.model.TextMessage.Status.UNKNOWN, status);
     }
 
     @Test
     public void fromInt_test() throws Exception {
         for (int i = 0; i < 5; i++) {
-            TextMessage.Status status = TextMessage.Status.fromInt(i);
-            TextMessage.Status[] values = TextMessage.Status.values();
+            net.jami.model.TextMessage.Status status = net.jami.model.TextMessage.Status.fromInt(i);
+            net.jami.model.TextMessage.Status[] values = net.jami.model.TextMessage.Status.values();
 
             assertEquals(status, values[i]);
         }
@@ -61,15 +63,15 @@ public class StatusTest {
 
     @Test
     public void fromInt_invalid_test() throws Exception {
-        TextMessage.Status status = TextMessage.Status.fromInt(-1);
+        net.jami.model.TextMessage.Status status = net.jami.model.TextMessage.Status.fromInt(-1);
 
-        assertEquals(TextMessage.Status.UNKNOWN, status);
+        assertEquals(net.jami.model.TextMessage.Status.UNKNOWN, status);
     }
 
     @Test
     public void toString_test() throws Exception {
-        TextMessage.Status[] values = TextMessage.Status.values();
-        for (TextMessage.Status s : values) {
+        TextMessage.Status[] values = net.jami.model.TextMessage.Status.values();
+        for (net.jami.model.TextMessage.Status s : values) {
             assertEquals(s.toString(), s.name());
         }
     }
diff --git a/ring-android/libringclient/src/test/java/cx/ring/model/UriTest.java b/ring-android/libringclient/src/test/java/net/jami/model/UriTest.java
similarity index 81%
rename from ring-android/libringclient/src/test/java/cx/ring/model/UriTest.java
rename to ring-android/libringclient/src/test/java/net/jami/model/UriTest.java
index da162bb0f58d6de76af1a754b939e7f93830c358..d78acc308719cc101c5dd805446ae0a85a9f0617 100644
--- a/ring-android/libringclient/src/test/java/cx/ring/model/UriTest.java
+++ b/ring-android/libringclient/src/test/java/net/jami/model/UriTest.java
@@ -21,6 +21,8 @@
 
 package cx.ring.model;
 
+import net.jami.model.Uri;
+
 import org.junit.Test;
 
 import static org.junit.Assert.assertFalse;
@@ -31,25 +33,25 @@ public class UriTest {
     @Test
     public void testGoodRawString() {
         String uri = "ring:1234567890123456789012345678901234567890";
-        Uri test = new Uri(uri);
+        net.jami.model.Uri test = new net.jami.model.Uri(uri);
         assertTrue(test.getRawUriString().contentEquals(uri));
     }
 
     @Test
     public void testBadIPAddress() {
-        assertFalse(Uri.isIpAddress("not an ip"));
+        assertFalse(net.jami.model.Uri.isIpAddress("not an ip"));
     }
 
     @Test
     public void testGoodIPAddress() {
-        assertTrue(Uri.isIpAddress("127.0.0.1"));
-        assertTrue(Uri.isIpAddress("2001:db8:0:85a3:0:0:ac1f:8001"));
+        assertTrue(net.jami.model.Uri.isIpAddress("127.0.0.1"));
+        assertTrue(net.jami.model.Uri.isIpAddress("2001:db8:0:85a3:0:0:ac1f:8001"));
     }
 
     @Test
     public void testRingModel() {
         String uri = "ring:1234567890123456789012345678901234567890";
-        Uri test = new Uri(uri);
+        net.jami.model.Uri test = new net.jami.model.Uri(uri);
 
         assertTrue(test.getDisplayName() == null);
         assertTrue(test.getScheme().contentEquals("ring:"));
@@ -59,7 +61,7 @@ public class UriTest {
     @Test
     public void testSIPModel() {
         String uri = "100@sipuri";
-        Uri test = new Uri(uri);
+        net.jami.model.Uri test = new Uri(uri);
 
         assertTrue(test.getUsername().contentEquals("100"));
         assertTrue(test.getHost().contentEquals("sipuri"));
diff --git a/ring-android/libringclient/src/test/java/cx/ring/utils/VCardUtilsTest.java b/ring-android/libringclient/src/test/java/net/jami/utils/VCardUtilsTest.java
similarity index 96%
rename from ring-android/libringclient/src/test/java/cx/ring/utils/VCardUtilsTest.java
rename to ring-android/libringclient/src/test/java/net/jami/utils/VCardUtilsTest.java
index a4c0ae85f731f14eb05d1e5042e96085da59bf83..dedad7cab199101c6e83d1e15d7e6df32154f509 100644
--- a/ring-android/libringclient/src/test/java/cx/ring/utils/VCardUtilsTest.java
+++ b/ring-android/libringclient/src/test/java/net/jami/utils/VCardUtilsTest.java
@@ -19,7 +19,9 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-package cx.ring.utils;
+package net.jami.utils;
+
+import net.jami.utils.VCardUtils;
 
 import org.junit.Test;