diff --git a/ring-android/app/src/main/java/cx/ring/account/HomeAccountCreationFragment.kt b/ring-android/app/src/main/java/cx/ring/account/HomeAccountCreationFragment.kt
index de60c51265050aea32cfe5aabe10760d584f613d..876c578509294ca55ec4a0fa9d19f0c8b04105fc 100644
--- a/ring-android/app/src/main/java/cx/ring/account/HomeAccountCreationFragment.kt
+++ b/ring-android/app/src/main/java/cx/ring/account/HomeAccountCreationFragment.kt
@@ -28,7 +28,6 @@ import android.view.ViewGroup
 import androidx.fragment.app.Fragment
 import com.google.android.material.snackbar.Snackbar
 import cx.ring.R
-import cx.ring.account.JamiLinkAccountFragment.Companion.newInstance
 import cx.ring.databinding.FragAccHomeCreateBinding
 import cx.ring.mvp.BaseSupportFragment
 import cx.ring.utils.AndroidFileUtils.getCacheFile
@@ -43,13 +42,15 @@ class HomeAccountCreationFragment :
     BaseSupportFragment<HomeAccountCreationPresenter, HomeAccountCreationView>(),
     HomeAccountCreationView {
     private var binding: FragAccHomeCreateBinding? = null
-    override fun onCreateView(
-        inflater: LayoutInflater,
-        container: ViewGroup?,
-        savedInstanceState: Bundle?
-    ): View {
-        binding = FragAccHomeCreateBinding.inflate(inflater, container, false)
-        return binding!!.root
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
+        return FragAccHomeCreateBinding.inflate(inflater, container, false).apply {
+            ringAddAccount.setOnClickListener {presenter.clickOnLinkAccount() }
+            ringCreateBtn.setOnClickListener { presenter.clickOnCreateAccount() }
+            accountConnectServer.setOnClickListener { presenter.clickOnConnectAccount() }
+            ringImportAccount.setOnClickListener {performFileSearch() }
+            binding = this
+        }.root
     }
 
     override fun onDestroyView() {
@@ -57,31 +58,22 @@ class HomeAccountCreationFragment :
         binding = null
     }
 
-    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
-        super.onViewCreated(view, savedInstanceState)
-        retainInstance = true
-        binding!!.ringAddAccount.setOnClickListener { v: View? -> presenter.clickOnLinkAccount() }
-        binding!!.ringCreateBtn.setOnClickListener { v: View? -> presenter.clickOnCreateAccount() }
-        binding!!.accountConnectServer.setOnClickListener { v: View? -> presenter.clickOnConnectAccount() }
-        binding!!.ringImportAccount.setOnClickListener { v: View? -> performFileSearch() }
-    }
-
     override fun goToAccountCreation() {
         val fragment: Fragment = JamiAccountCreationFragment()
         replaceFragmentWithSlide(fragment, R.id.wizard_container)
     }
 
     override fun goToAccountLink() {
-        val ringAccountViewModel = AccountCreationModelImpl()
-        ringAccountViewModel.isLink = true
-        val fragment: Fragment = newInstance(ringAccountViewModel)
+        val fragment: Fragment = JamiLinkAccountFragment.newInstance(AccountCreationModelImpl().apply {
+            isLink = true
+        })
         replaceFragmentWithSlide(fragment, R.id.wizard_container)
     }
 
     override fun goToAccountConnect() {
-        val ringAccountViewModel = AccountCreationModelImpl()
-        ringAccountViewModel.isLink = true
-        val fragment: Fragment = JamiAccountConnectFragment.newInstance(ringAccountViewModel)
+        val fragment: Fragment = JamiAccountConnectFragment.newInstance(AccountCreationModelImpl().apply {
+            isLink = true
+        })
         replaceFragmentWithSlide(fragment, R.id.wizard_container)
     }
 
@@ -92,34 +84,26 @@ class HomeAccountCreationFragment :
                 .setType("*/*")
             startActivityForResult(intent, ARCHIVE_REQUEST_CODE)
         } catch (e: Exception) {
-            val v = view
-            if (v != null) Snackbar.make(
-                v,
-                "No file browser available on this device",
-                Snackbar.LENGTH_SHORT
-            ).show()
+            view?.let { v ->
+                Snackbar.make(v, "No file browser available on this device", Snackbar.LENGTH_SHORT).show() }
         }
     }
 
     override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
         if (requestCode == ARCHIVE_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
-            if (resultData != null) {
-                val uri = resultData.data
-                if (uri != null) {
-                    getCacheFile(requireContext(), uri)
-                        .observeOn(AndroidSchedulers.mainThread())
-                        .subscribe({ file: File? ->
-                            val ringAccountViewModel = AccountCreationModelImpl()
-                            ringAccountViewModel.isLink = true
-                            ringAccountViewModel.archive = file
-                            val fragment: Fragment = newInstance(ringAccountViewModel)
-                            replaceFragmentWithSlide(fragment, R.id.wizard_container)
-                        }) { e: Throwable ->
-                            val v = view
-                            if (v != null)
-                                Snackbar.make(v, "Can't import archive: " + e.message, Snackbar.LENGTH_LONG).show()
-                        }
-                }
+            resultData?.data?.let { uri ->
+                getCacheFile(requireContext(), uri)
+                    .observeOn(AndroidSchedulers.mainThread())
+                    .subscribe({ file: File ->
+                        val ringAccountViewModel = AccountCreationModelImpl()
+                        ringAccountViewModel.isLink = true
+                        ringAccountViewModel.archive = file
+                        val fragment: Fragment = JamiLinkAccountFragment.newInstance(ringAccountViewModel)
+                        replaceFragmentWithSlide(fragment, R.id.wizard_container)
+                    }) { e: Throwable ->
+                        view?.let { v ->
+                            Snackbar.make(v, "Can't import archive: " + e.message, Snackbar.LENGTH_LONG).show() }
+                    }
             }
         }
     }
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
deleted file mode 100644
index 04b909ed31a7b2fa704e207b27a02baf4467b25d..0000000000000000000000000000000000000000
--- a/ring-android/app/src/main/java/cx/ring/account/JamiAccountConnectFragment.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- *  Copyright (C) 2004-2021 Savoir-faire Linux Inc.
- *
- *  Author: Adrien Béraud <adrien.beraud@savoirfairelinux.com>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package cx.ring.account;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.text.Editable;
-import android.text.TextWatcher;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.inputmethod.EditorInfo;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import cx.ring.databinding.FragAccJamiConnectBinding;
-
-import net.jami.account.JamiAccountConnectPresenter;
-import net.jami.account.JamiConnectAccountView;
-import net.jami.model.AccountCreationModel;
-import cx.ring.mvp.BaseSupportFragment;
-import dagger.hilt.android.AndroidEntryPoint;
-
-@AndroidEntryPoint
-public class JamiAccountConnectFragment extends BaseSupportFragment<JamiAccountConnectPresenter, JamiConnectAccountView> implements JamiConnectAccountView {
-    public static final String TAG = JamiAccountConnectFragment.class.getSimpleName();
-
-    private AccountCreationModel model;
-    private FragAccJamiConnectBinding mBinding;
-
-    public static JamiAccountConnectFragment newInstance(AccountCreationModelImpl ringAccountViewModel) {
-        JamiAccountConnectFragment fragment = new JamiAccountConnectFragment();
-        fragment.model = ringAccountViewModel;
-        return fragment;
-    }
-
-    @Nullable
-    @Override
-    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-        mBinding = FragAccJamiConnectBinding.inflate(inflater, container, false);
-        return mBinding.getRoot();
-    }
-
-    @Override
-    public void onDestroyView() {
-        super.onDestroyView();
-        mBinding = null;
-    }
-
-    @Override
-    protected void initPresenter(net.jami.account.JamiAccountConnectPresenter presenter) {
-        presenter.init(model);
-    }
-
-    @Override
-    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
-        super.onViewCreated(view, savedInstanceState);
-        mBinding.connectButton.setOnClickListener(v -> presenter.connectClicked());
-        mBinding.usernameTxt.addTextChangedListener(new TextWatcher() {
-            @Override
-            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
-
-            @Override
-            public void onTextChanged(CharSequence s, int start, int before, int count) {}
-
-            @Override
-            public void afterTextChanged(Editable s) {
-                presenter.usernameChanged(s.toString());
-            }
-        });
-        mBinding.passwordTxt.addTextChangedListener(new TextWatcher() {
-            @Override
-            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
-
-            @Override
-            public void onTextChanged(CharSequence s, int start, int before, int count) {}
-
-            @Override
-            public void afterTextChanged(Editable s) {
-                presenter.passwordChanged(s.toString());
-            }
-        });
-        mBinding.promptServer.addTextChangedListener(new TextWatcher() {
-            @Override
-            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
-
-            @Override
-            public void onTextChanged(CharSequence s, int start, int before, int count) {}
-
-            @Override
-            public void afterTextChanged(Editable s) {
-                presenter.serverChanged(s.toString());
-            }
-        });
-
-        mBinding.passwordTxt.setOnEditorActionListener((v, actionId, event) -> {
-            if (actionId == EditorInfo.IME_ACTION_DONE) {
-                presenter.connectClicked();
-            }
-            return false;
-        });
-    }
-
-    @Override
-    public void enableConnectButton(boolean enable) {
-        mBinding.connectButton.setEnabled(enable);
-    }
-
-    @Override
-    public void createAccount(AccountCreationModel accountCreationModel) {
-        ((AccountWizardActivity) requireActivity()).createAccount(accountCreationModel);
-    }
-
-    @Override
-    public void cancel() {
-        Activity wizardActivity = getActivity();
-        if (wizardActivity != null) {
-            wizardActivity.onBackPressed();
-        }
-    }
-}
\ No newline at end of file
diff --git a/ring-android/app/src/main/java/cx/ring/account/JamiAccountConnectFragment.kt b/ring-android/app/src/main/java/cx/ring/account/JamiAccountConnectFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..4b28a0b0fd6bf66e619db51233238162bd817fa7
--- /dev/null
+++ b/ring-android/app/src/main/java/cx/ring/account/JamiAccountConnectFragment.kt
@@ -0,0 +1,110 @@
+/*
+ *  Copyright (C) 2004-2021 Savoir-faire Linux Inc.
+ *
+ *  Author: Adrien Béraud <adrien.beraud@savoirfairelinux.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package cx.ring.account
+
+import android.os.Bundle
+import android.text.Editable
+import android.text.TextWatcher
+import android.view.KeyEvent
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.view.inputmethod.EditorInfo
+import android.widget.TextView
+import cx.ring.databinding.FragAccJamiConnectBinding
+import cx.ring.mvp.BaseSupportFragment
+import dagger.hilt.android.AndroidEntryPoint
+import net.jami.account.JamiAccountConnectPresenter
+import net.jami.account.JamiConnectAccountView
+import net.jami.model.AccountCreationModel
+
+@AndroidEntryPoint
+class JamiAccountConnectFragment : BaseSupportFragment<JamiAccountConnectPresenter, JamiConnectAccountView>(),
+    JamiConnectAccountView {
+    private var model: AccountCreationModel? = null
+    private var mBinding: FragAccJamiConnectBinding? = null
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
+        mBinding = FragAccJamiConnectBinding.inflate(inflater, container, false)
+        return mBinding!!.root
+    }
+
+    override fun onDestroyView() {
+        super.onDestroyView()
+        mBinding = null
+    }
+
+    override fun initPresenter(presenter: JamiAccountConnectPresenter) {
+        presenter.init(model)
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        mBinding!!.connectButton.setOnClickListener { presenter.connectClicked() }
+        mBinding!!.usernameTxt.addTextChangedListener(object : TextWatcher {
+            override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
+            override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
+            override fun afterTextChanged(s: Editable) {
+                presenter.usernameChanged(s.toString())
+            }
+        })
+        mBinding!!.passwordTxt.addTextChangedListener(object : TextWatcher {
+            override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
+            override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
+            override fun afterTextChanged(s: Editable) {
+                presenter.passwordChanged(s.toString())
+            }
+        })
+        mBinding!!.promptServer.addTextChangedListener(object : TextWatcher {
+            override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
+            override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
+            override fun afterTextChanged(s: Editable) {
+                presenter.serverChanged(s.toString())
+            }
+        })
+        mBinding!!.passwordTxt.setOnEditorActionListener { v: TextView?, actionId: Int, event: KeyEvent? ->
+            if (actionId == EditorInfo.IME_ACTION_DONE) {
+                presenter.connectClicked()
+            }
+            false
+        }
+    }
+
+    override fun enableConnectButton(enable: Boolean) {
+        mBinding!!.connectButton.isEnabled = enable
+    }
+
+    override fun createAccount(accountCreationModel: AccountCreationModel) {
+        (requireActivity() as AccountWizardActivity).createAccount(accountCreationModel)
+    }
+
+    override fun cancel() {
+        activity?.onBackPressed()
+    }
+
+    companion object {
+        val TAG = JamiAccountConnectFragment::class.simpleName!!
+        fun newInstance(ringAccountViewModel: AccountCreationModelImpl): JamiAccountConnectFragment {
+            val fragment = JamiAccountConnectFragment()
+            fragment.model = ringAccountViewModel
+            return fragment
+        }
+    }
+}
\ No newline at end of file
diff --git a/ring-android/app/src/main/java/cx/ring/account/JamiLinkAccountFragment.kt b/ring-android/app/src/main/java/cx/ring/account/JamiLinkAccountFragment.kt
index da7c68b27ce297b0aeee319c0e1c21536f809443..ad281c0daa98202d99dc257402b4a8bc27ae1bdb 100644
--- a/ring-android/app/src/main/java/cx/ring/account/JamiLinkAccountFragment.kt
+++ b/ring-android/app/src/main/java/cx/ring/account/JamiLinkAccountFragment.kt
@@ -55,7 +55,6 @@ class JamiLinkAccountFragment : Fragment() {
     }
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
-        retainInstance = true
         if (savedInstanceState != null) {
             model = savedInstanceState.getSerializable("model") as AccountCreationModel
         }