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 c4ed1a8bbae6eef8334950fb76f4e0acae50bdf1..dbed7614b88186f6a8e19f82c16ab545c93a3166 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
@@ -489,7 +489,7 @@ public class JamiAccountSummaryFragment extends BaseSupportFragment<JamiAccountS
                 .setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.cancel())
                 .setPositiveButton(android.R.string.ok, (dialog, which) -> {
                     if (mSourcePhoto != null) {
-                        presenter.saveVCard(mAccountService.getCurrentAccount(), editText.getText().toString().trim(), Single.just(mSourcePhoto).map(BitmapUtils::bitmapToPhoto));
+                        presenter.saveVCard(editText.getText().toString().trim(), Single.just(mSourcePhoto).map(BitmapUtils::bitmapToPhoto));
                         mSourcePhoto = null;
                     } else {
                         presenter.saveVCardFormattedName(editText.getText().toString().trim());
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 3ccc889a8716f0d5e1888d6ade1856016f3375eb..af550c94eff013a51a01b33f7abbb564503e123c 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
@@ -24,7 +24,6 @@ import android.content.ActivityNotFoundException;
 import android.content.ContentResolver;
 import android.content.Intent;
 import android.content.pm.PackageManager;
-import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
@@ -37,8 +36,6 @@ import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
 
-import java.io.FileNotFoundException;
-import java.io.InputStream;
 import java.util.List;
 
 import cx.ring.R;
@@ -77,14 +74,10 @@ public class TVProfileEditingFragment extends JamiGuidedStepFragment<HomeNavigat
                         return;
                     }
                     Uri uri = (Uri) extras.get((MediaStore.EXTRA_OUTPUT));
-                    ContentResolver cr = getActivity().getContentResolver();
-                    try {
-                        InputStream is = cr.openInputStream(uri);
-                        Bitmap image = BitmapFactory.decodeStream(is);
-                        presenter.saveVCardPhoto(Single.just(image)
+                    if (uri != null) {
+                        ContentResolver cr = requireContext().getContentResolver();
+                        presenter.saveVCardPhoto(Single.fromCallable(() -> BitmapFactory.decodeStream(cr.openInputStream(uri)))
                                 .map(BitmapUtils::bitmapToPhoto));
-                    } catch (FileNotFoundException e) {
-                        e.printStackTrace();
                     }
                 }
                 break;
@@ -130,7 +123,7 @@ public class TVProfileEditingFragment extends JamiGuidedStepFragment<HomeNavigat
         String title = getString(R.string.profile);
         String breadcrumb = "";
         String description = getString(R.string.profile_message_warning);
-        Drawable icon = getActivity().getResources().getDrawable(R.drawable.ic_contact_picture_fallback);
+        Drawable icon = getResources().getDrawable(R.drawable.ic_contact_picture_fallback);
         return new GuidanceStylist.Guidance(title, description, breadcrumb, icon);
     }
 
@@ -142,8 +135,8 @@ public class TVProfileEditingFragment extends JamiGuidedStepFragment<HomeNavigat
     @Override
     public void onCreateActions(@NonNull List<GuidedAction> actions, Bundle savedInstanceState) {
         addEditTextAction(getActivity(), actions, USER_NAME, R.string.account_edit_profile, R.string.profile_name_hint);
-        addAction(getActivity(), actions, CAMERA, getActivity().getResources().getString(R.string.take_a_photo), "");
-        addAction(getActivity(), actions, GALLERY, getActivity().getResources().getString(R.string.open_the_gallery), "");
+        addAction(getActivity(), actions, CAMERA, R.string.take_a_photo);
+        addAction(getActivity(), actions, GALLERY, R.string.open_the_gallery);
         this.actions = actions;
     }
 
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 4e8eb61412ac69dfa7e105aae9ff9024b9dbb700..c5b3e054bf2bebad7e1eb57d5e0f6b3a30dbe31b 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
@@ -170,7 +170,6 @@ public class TvConversationFragment extends BaseSupportFragment<TvConversationPr
         super.onViewCreated(view, savedInstanceState);
 
         ConversationPath path = ConversationPath.fromIntent(getActivity().getIntent());
-
         presenter.init(path);
 
         mAdapter = new TvConversationAdapter(this, presenter);
@@ -217,13 +216,16 @@ public class TvConversationFragment extends BaseSupportFragment<TvConversationPr
         mSubTitle = view.findViewById(R.id.subtitle);
         mRecyclerView = view.findViewById(R.id.recycler_view);
 
-        String id = mTvListViewModel.getContact().getRingUsername();
-        String displayName = mTvListViewModel.getContact().getDisplayName();
-        mTitle.setText(displayName);
-        if (TextUtils.isEmpty(displayName) || !displayName.equals(id))
-            mSubTitle.setText(id);
-        else
-            mSubTitle.setVisibility(View.GONE);
+        CallContact contact = mTvListViewModel.getContact();
+        if (contact != null) {
+            String id = contact.getRingUsername();
+            String displayName = contact.getDisplayName();
+            mTitle.setText(displayName);
+            if (TextUtils.isEmpty(displayName) || !displayName.equals(id))
+                mSubTitle.setText(id);
+            else
+                mSubTitle.setVisibility(View.GONE);
+        }
 
         LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
         linearLayoutManager.setReverseLayout(true);
diff --git a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationPresenter.java
index 6549376bae5adc312c110a925cd44852d6d736e1..ce3f6e706f7a1e9a9aca1dbf2e0f4ceba9d30c8f 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationPresenter.java
@@ -80,12 +80,13 @@ public class TvConversationPresenter extends RootPresenter<TvConversationView> {
         mContactId = new Uri(path.getContactId());
         mContactRingId = new Uri(path.getContactId());
 
+        mCompositeDisposable.add(mAccountService.getCurrentAccountSubject()
+                .subscribe(account -> initContact(account, new Uri(mContactId.getRawUriString()), getView())));
+
         mCompositeDisposable.add(mAccountService.getCurrentAccountSubject()
                 .switchMapSingle(account -> mConversationFacade.loadConversationHistory(account, new Uri(mContactId.getRawUriString())))
                 .observeOn(mUiScheduler)
                 .subscribe(this::setConversation));
-
-        initContact(mAccountService.getCurrentAccount(), new Uri(mContactId.getRawUriString()), getView());
     }
 
     public void sendText(String message){
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java b/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java
index dcf3185372f328ac2a7366010f6f647e8c4e6e73..de84d64223ab2314a7b177fa25f9556eec2ba56f 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java
@@ -21,7 +21,6 @@
 package cx.ring.account;
 
 import java.io.File;
-import java.io.IOException;
 import java.net.SocketException;
 
 import javax.inject.Inject;
@@ -32,7 +31,6 @@ import cx.ring.mvp.RootPresenter;
 import cx.ring.services.AccountService;
 import cx.ring.services.DeviceRuntimeService;
 import cx.ring.services.HardwareService;
-import cx.ring.utils.FileUtils;
 import cx.ring.utils.Log;
 import cx.ring.utils.StringUtils;
 import cx.ring.utils.VCardUtils;
@@ -167,16 +165,15 @@ public class JamiAccountSummaryPresenter extends RootPresenter<JamiAccountSummar
     }
 
     public void saveVCardFormattedName(String username) {
-        Account account = mAccountService.getCurrentAccount();
-        String accountId = account.getAccountID();
+        Account account = mAccountService.getAccount(mAccountID);
         File filesDir = mDeviceRuntimeService.provideFilesDir();
 
-        mCompositeDisposable.add(VCardUtils.loadLocalProfileFromDisk(filesDir, accountId)
+        mCompositeDisposable.add(VCardUtils.loadLocalProfileFromDisk(filesDir, mAccountID)
                 .doOnSuccess(vcard -> {
                     vcard.setFormattedName(username);
                     vcard.removeProperties(RawProperty.class);
                 })
-                .flatMap(vcard -> VCardUtils.saveLocalProfileToDisk(vcard, accountId, filesDir))
+                .flatMap(vcard -> VCardUtils.saveLocalProfileToDisk(vcard, mAccountID, filesDir))
                 .subscribeOn(Schedulers.io())
                 .subscribe(vcard -> {
                     account.setProfile(vcard);
@@ -185,25 +182,23 @@ public class JamiAccountSummaryPresenter extends RootPresenter<JamiAccountSummar
                 }, e -> Log.e(TAG, "Error saving vCard !", e)));
     }
 
-    public void saveVCard(Account account, String username, Single<Photo> photo) {
-        String accountId = account.getAccountID();
+    public void saveVCard(String username, Single<Photo> photo) {
+        Account account = mAccountService.getAccount(mAccountID);
         String ringId = account.getUsername();
         File filesDir = mDeviceRuntimeService.provideFilesDir();
         mCompositeDisposable.add(Single.zip(
-                VCardUtils.loadLocalProfileFromDisk(filesDir, accountId).subscribeOn(Schedulers.io()),
+                VCardUtils.loadLocalProfileFromDisk(filesDir, mAccountID).subscribeOn(Schedulers.io()),
                 photo, (vcard, pic) -> {
                     vcard.setUid(new Uid(ringId));
                     if (!StringUtils.isEmpty(username)) {
                         vcard.setFormattedName(username);
                     }
-                    if (photo != null) {
-                        vcard.removeProperties(Photo.class);
-                        vcard.addPhoto(pic);
-                    }
+                    vcard.removeProperties(Photo.class);
+                    vcard.addPhoto(pic);
                     vcard.removeProperties(RawProperty.class);
                     return vcard;
                 })
-                .flatMap(vcard -> VCardUtils.saveLocalProfileToDisk(vcard, accountId, filesDir))
+                .flatMap(vcard -> VCardUtils.saveLocalProfileToDisk(vcard, mAccountID, filesDir))
                 .subscribeOn(Schedulers.io())
                 .subscribe(vcard -> {
                     account.setProfile(vcard);
diff --git a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java b/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java
index a049eff480f44ba1f972e82a0e1a81c4015c91c3..f08d88766d8983e7fa70d0527d4bc98f4e845c5b 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java
@@ -94,8 +94,11 @@ public class HomeNavigationPresenter extends RootPresenter<HomeNavigationView> {
         File filesDir = mDeviceRuntimeService.provideFilesDir();
 
         mCompositeDisposable.add(Single.zip(
-                VCardUtils.loadLocalProfileFromDisk(filesDir, accountId).subscribeOn(Schedulers.io()),
-                photo, (vcard, pic) -> {
+                VCardUtils.loadLocalProfileFromDisk(filesDir, accountId)
+                        .subscribeOn(Schedulers.io()),
+                photo
+                        .subscribeOn(Schedulers.io()),
+                (vcard, pic) -> {
                     vcard.setUid(new Uid(ringId));
                     vcard.removeProperties(Photo.class);
                     vcard.addPhoto(pic);
diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/VCardUtils.java b/ring-android/libringclient/src/main/java/cx/ring/utils/VCardUtils.java
index 4744306abd1e72c5a82a92b0313271bb4285092b..c145089a5ec3cafaea3c92050b42a545a726b1e4 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/utils/VCardUtils.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/utils/VCardUtils.java
@@ -121,11 +121,9 @@ public final class VCardUtils {
         }
 
         File file = new File(path + File.separator + filename);
-        try {
-            VCardWriter writer = new VCardWriter(file, VCardVersion.V2_1);
+        try (VCardWriter writer = new VCardWriter(file, VCardVersion.V2_1)) {
             writer.getVObjectWriter().getFoldedLineWriter().setLineLength(null);
             writer.write(vcard);
-            writer.close();
         } catch (Exception e) {
             Log.e(TAG, "Error while saving VCard to disk", e);
         }