diff --git a/fdroidMergeRequest.sh b/fdroidMergeRequest.sh
index 4f8c8ee54034dce0b6085ca86b32a25c64b96f2e..e2ea50c7934425ed253fc2ed5bb9c415fe7d1bc0 100755
--- a/fdroidMergeRequest.sh
+++ b/fdroidMergeRequest.sh
@@ -69,6 +69,7 @@ echo "  - versionName: ${versionName}
       - client-uwp
       - client-qt
       - plugins
+      - extensions
       - docker
       - docs
       - lrc
diff --git a/jami-android/app/src/main/java/cx/ring/about/AboutFragment.kt b/jami-android/app/src/main/java/cx/ring/about/AboutFragment.kt
index b8eb81f17852755b113a817b50ba657fcafe8d13..880f2baed4dafacd175b604bf9bf98602500e47f 100644
--- a/jami-android/app/src/main/java/cx/ring/about/AboutFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/about/AboutFragment.kt
@@ -20,7 +20,6 @@ import android.content.Intent
 import android.net.Uri
 import android.os.Bundle
 import android.view.LayoutInflater
-import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
 import androidx.annotation.StringRes
@@ -37,10 +36,10 @@ class AboutFragment : Fragment() {
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
          FragAboutBinding.inflate(inflater, container, false).apply {
              release.text = getString(R.string.app_release, BuildConfig.VERSION_NAME)
-             logo.setOnClickListener { openWebsite(getString(R.string.app_website)) }
-             sflLogo.setOnClickListener { openWebsite(getString(R.string.savoirfairelinux_website)) }
-             contributeContainer.setOnClickListener { openWebsite(getString(R.string.ring_contribute_website)) }
-             licenseContainer.setOnClickListener { openWebsite(getString(R.string.gnu_license_website)) }
+             logo.setOnClickListener { visitWebpage(getString(R.string.app_website)) }
+             sflLogo.setOnClickListener { visitWebpage(getString(R.string.savoirfairelinux_website)) }
+             contributeContainer.setOnClickListener { visitWebpage(getString(R.string.ring_contribute_website)) }
+             licenseContainer.setOnClickListener { visitWebpage(getString(R.string.gnu_license_website)) }
              emailReportContainer.setOnClickListener { sendFeedbackEmail() }
              credits.setOnClickListener { creditsClicked() }
              toolbar.setNavigationOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() }
@@ -58,7 +57,7 @@ class AboutFragment : Fragment() {
         dialog.show(childFragmentManager, dialog.tag)
     }
 
-    private fun openWebsite(url: String) {
+    private fun visitWebpage(url: String) {
         launchSystemIntent(Intent(Intent.ACTION_VIEW, Uri.parse(url)), R.string.no_browser_app_installed)
     }
 
diff --git a/jami-android/app/src/main/java/cx/ring/account/AccountEditionFragment.kt b/jami-android/app/src/main/java/cx/ring/account/AccountEditionFragment.kt
index 8b02dd37656cbfc3eb3266628057ffbde9285343..b74143d94657813b2e3e66c1d1eea3c2641bc372 100644
--- a/jami-android/app/src/main/java/cx/ring/account/AccountEditionFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/account/AccountEditionFragment.kt
@@ -33,7 +33,7 @@ import cx.ring.fragments.GeneralAccountFragment
 import cx.ring.fragments.MediaPreferenceFragment
 import cx.ring.fragments.SecurityAccountFragment
 import cx.ring.mvp.BaseSupportFragment
-import cx.ring.settings.pluginssettings.PluginsListSettingsFragment
+import cx.ring.settings.extensionssettings.ExtensionsListSettingsFragment
 import cx.ring.utils.ActionHelper.openJamiDonateWebPage
 import dagger.hilt.android.AndroidEntryPoint
 import net.jami.account.AccountEditionPresenter
@@ -112,7 +112,7 @@ class AccountEditionFragment : BaseSupportFragment<AccountEditionPresenter, Acco
             1 -> MediaPreferenceFragment.newInstance(accountId)
             2 -> fragmentWithBundle(AdvancedAccountFragment())
             3 -> fragmentWithBundle(SecurityAccountFragment())
-            4 -> fragmentWithBundle(PluginsListSettingsFragment())
+            4 -> fragmentWithBundle(ExtensionsListSettingsFragment())
             else -> throw IllegalArgumentException()
         }
 
@@ -133,7 +133,7 @@ class AccountEditionFragment : BaseSupportFragment<AccountEditionPresenter, Acco
             1 -> R.string.account_preferences_media_tab
             2 -> R.string.account_preferences_advanced_tab
             3 -> R.string.account_preferences_security_tab
-            4 -> R.string.account_preference_plugin_tab
+            4 -> R.string.account_preferences_extension_tab
             else -> -1
         }
     }
diff --git a/jami-android/app/src/main/java/cx/ring/adapters/ConversationAdapter.kt b/jami-android/app/src/main/java/cx/ring/adapters/ConversationAdapter.kt
index fab76cd9e441d5a710bc49e2b7ad89d2ab06e946..0561aae0ed3223cf3ed77cef5f13faf7b6cb315f 100644
--- a/jami-android/app/src/main/java/cx/ring/adapters/ConversationAdapter.kt
+++ b/jami-android/app/src/main/java/cx/ring/adapters/ConversationAdapter.kt
@@ -1545,8 +1545,8 @@ class ConversationAdapter(
                         ContactEvent.Event.ADDED -> R.string.conversation_contact_added
                         ContactEvent.Event.INVITED -> R.string.conversation_contact_invited
                         ContactEvent.Event.REMOVED -> R.string.conversation_contact_left
-                        ContactEvent.Event.BANNED -> R.string.conversation_contact_banned
-                        ContactEvent.Event.UNBANNED -> R.string.conversation_contact_unbanned
+                        ContactEvent.Event.BANNED -> R.string.conversation_contact_blocked
+                        ContactEvent.Event.UNBANNED -> R.string.conversation_contact_unblocked
                         else -> R.string.hist_contact_added
                     }, vm.displayName)
                     viewHolder.mMsgTxt?.text = "$eventString, $timestamp"
@@ -1556,8 +1556,8 @@ class ConversationAdapter(
                 ContactEvent.Event.ADDED -> R.string.hist_contact_added
                 ContactEvent.Event.INVITED -> R.string.hist_contact_invited
                 ContactEvent.Event.REMOVED -> R.string.hist_contact_left
-                ContactEvent.Event.BANNED -> R.string.hist_contact_banned
-                ContactEvent.Event.UNBANNED -> R.string.hist_contact_unbanned
+                ContactEvent.Event.BANNED -> R.string.hist_contact_blocked
+                ContactEvent.Event.UNBANNED -> R.string.hist_contact_unblocked
                 ContactEvent.Event.INCOMING_REQUEST -> R.string.hist_invitation_received
                 else -> R.string.hist_contact_added
             }
diff --git a/jami-android/app/src/main/java/cx/ring/adapters/PluginsAdapter.kt b/jami-android/app/src/main/java/cx/ring/adapters/ExtensionsAdapter.kt
similarity index 60%
rename from jami-android/app/src/main/java/cx/ring/adapters/PluginsAdapter.kt
rename to jami-android/app/src/main/java/cx/ring/adapters/ExtensionsAdapter.kt
index ae7aca71ccbdb5f82d87b7f88c701314b6fd988d..6e63d14b2bf1d3f2dc629349c306d169e93c87ca 100644
--- a/jami-android/app/src/main/java/cx/ring/adapters/PluginsAdapter.kt
+++ b/jami-android/app/src/main/java/cx/ring/adapters/ExtensionsAdapter.kt
@@ -20,18 +20,18 @@ import android.view.LayoutInflater
 import android.view.ViewGroup
 import androidx.recyclerview.widget.RecyclerView
 import cx.ring.R
-import cx.ring.settings.pluginssettings.PluginDetails
-import cx.ring.viewholders.PluginViewHolder
+import cx.ring.settings.extensionssettings.ExtensionDetails
+import cx.ring.viewholders.ExtensionViewHolder
 
-class PluginsAdapter(private var mList: List<PluginDetails>, private val listener: PluginListItemListener, private val accountId: String ?= "") :
-        RecyclerView.Adapter<PluginViewHolder>() {
+class ExtensionsAdapter(private var mList: List<ExtensionDetails>, private val listener: ExtensionListItemListener, private val accountId: String ?= "") :
+        RecyclerView.Adapter<ExtensionViewHolder>() {
 
-        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PluginViewHolder {
-            val view = LayoutInflater.from(parent.context).inflate(R.layout.frag_plugins_list_item, parent, false)
-            return PluginViewHolder(view, listener)
+        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ExtensionViewHolder {
+            val view = LayoutInflater.from(parent.context).inflate(R.layout.frag_extensions_list_item, parent, false)
+            return ExtensionViewHolder(view, listener)
         }
 
-        override fun onBindViewHolder(holderSetting: PluginViewHolder, position: Int) {
+        override fun onBindViewHolder(holderSetting: ExtensionViewHolder, position: Int) {
             for (item in mList) {
                 item.accountId = accountId
             }
@@ -40,10 +40,10 @@ class PluginsAdapter(private var mList: List<PluginDetails>, private val listene
 
         override fun getItemCount(): Int {
             if (accountId!!.isNotEmpty()) {
-                val copy = mutableListOf<PluginDetails>()
+                val copy = mutableListOf<ExtensionDetails>()
                 for (item in mList) {
                     item.accountId = accountId
-                    if (item.pluginPreferences.isNotEmpty())
+                    if (item.extensionPreferences.isNotEmpty())
                         copy += item
                 }
                 mList = copy
@@ -51,20 +51,20 @@ class PluginsAdapter(private var mList: List<PluginDetails>, private val listene
             return mList.size
         }
 
-        fun updatePluginsList(listPlugins: List<PluginDetails>) {
-            for (item in listPlugins) {
+        fun updateExtensionsList(listExtensions: List<ExtensionDetails>) {
+            for (item in listExtensions) {
                 item.accountId = accountId
             }
-            mList = listPlugins
+            mList = listExtensions
             notifyDataSetChanged()
         }
 
-        interface PluginListItemListener {
-            fun onPluginItemClicked(pluginDetails: PluginDetails)
-            fun onPluginEnabled(pluginDetails: PluginDetails)
+        interface ExtensionListItemListener {
+            fun onExtensionItemClicked(extensionDetails: ExtensionDetails)
+            fun onExtensionEnabled(extensionDetails: ExtensionDetails)
         }
 
         companion object {
-            val TAG = PluginsAdapter::class.simpleName!!
+            val TAG = ExtensionsAdapter::class.simpleName!!
         }
     }
\ No newline at end of file
diff --git a/jami-android/app/src/main/java/cx/ring/client/CallActivity.kt b/jami-android/app/src/main/java/cx/ring/client/CallActivity.kt
index 08914dab37272ec9b5d0953a673f27a10ad36654..f1ddfa24ae0a58d62f8ef67a9b80d11a7e1778d5 100644
--- a/jami-android/app/src/main/java/cx/ring/client/CallActivity.kt
+++ b/jami-android/app/src/main/java/cx/ring/client/CallActivity.kt
@@ -177,8 +177,8 @@ class CallActivity : AppCompatActivity() {
         callFragment.resetBottomSheetState()
         callFragment.moveBottomSheet(CallFragment.BottomSheetAnimation.DOWN)
         isFullscreen = true
-        if (!callFragment.isChoosePluginMode) {
-            //callFragment.toggleVideoPluginsCarousel(false)
+        if (!callFragment.isChooseExtensionMode) {
+            //callFragment.toggleVideoExtensionsCarousel(false)
         }
         handler?.removeCallbacks(onNoInteraction)
     }
@@ -194,7 +194,7 @@ class CallActivity : AppCompatActivity() {
                 WindowInsetsControllerCompat(window, this).show(WindowInsetsCompat.Type.systemBars())
             }
             callFragment.moveBottomSheet(CallFragment.BottomSheetAnimation.UP)
-            //callFragment.toggleVideoPluginsCarousel(true)
+            //callFragment.toggleVideoExtensionsCarousel(true)
             restartNoInteractionTimer()
         }
         isFullscreen = false
diff --git a/jami-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.kt b/jami-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.kt
index e290b4f82e20a382476262f18eee696c8ecb7c61..712ba3a261628abc706df78328802ed403ec4cd7 100644
--- a/jami-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.kt
+++ b/jami-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.kt
@@ -186,7 +186,7 @@ class ContactDetailsActivity : AppCompatActivity(), TabLayout.OnTabSelectedListe
                     binding.title.setOnClickListener(null)
                     binding.description.setOnClickListener(null)
                     binding.contactImage.setOnClickListener(null)
-                    binding.tabLayout.removeTabAt(TAB_MEMBER)
+                    binding.tabLayout.removeTabAt(TAB_MEMBERS)
                 } else if(vm.isGroup() and !conversation.isUserGroupAdmin()) {
                     // Block conversation edition for non-admin users.
                     binding.addMember.isVisible = true
@@ -475,9 +475,9 @@ class ContactDetailsActivity : AppCompatActivity(), TabLayout.OnTabSelectedListe
 
     companion object {
         private val TAG = ContactDetailsActivity::class.simpleName!!
-        const val TAB_ABOUT = 0
-        const val TAB_MEMBER = 1
-        const val TAB_DOCUMENT = 2
+        const val TAB_MEMBERS = 0
+        const val TAB_FILES = 1
+        const val TAB_SETTINGS = 2
         const val REQUEST_CODE_CALL = 3
         const val REQUEST_PERMISSION_READ_STORAGE = 114
     }
diff --git a/jami-android/app/src/main/java/cx/ring/plugins/PluginPreferences.kt b/jami-android/app/src/main/java/cx/ring/extensions/ExtensionPreferences.kt
similarity index 52%
rename from jami-android/app/src/main/java/cx/ring/plugins/PluginPreferences.kt
rename to jami-android/app/src/main/java/cx/ring/extensions/ExtensionPreferences.kt
index d2bd77968671dfae74d45649af201afe21f5d0b1..f56b3ed7b371d8fd827916a7c9c2931504eeb0eb 100644
--- a/jami-android/app/src/main/java/cx/ring/plugins/PluginPreferences.kt
+++ b/jami-android/app/src/main/java/cx/ring/extensions/ExtensionPreferences.kt
@@ -14,21 +14,21 @@
  *  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.plugins
+package cx.ring.extensions
 
 import android.content.Context
 import android.view.View
 import androidx.preference.Preference
 import androidx.preference.PreferenceViewHolder
 import cx.ring.R
-import cx.ring.databinding.FragPluginSettingsBinding
-import cx.ring.settings.pluginssettings.PluginDetails
+import cx.ring.databinding.FragExtensionSettingsBinding
+import cx.ring.settings.extensionssettings.ExtensionDetails
 
-class PluginPreferences : Preference {
-    private var mPluginDetails: PluginDetails? = null
+class ExtensionPreferences : Preference {
+    private var mExtensionDetails: ExtensionDetails? = null
     private var resetClickListener: View.OnClickListener? = null
     private var installClickListener: View.OnClickListener? = null
-    private var openPluginSettingsListener: View.OnClickListener? = null
+    private var openExtensionSettingsListener: View.OnClickListener? = null
     private var mAccountId: String? = ""
     fun setResetClickListener(clickListener: View.OnClickListener?) {
         resetClickListener = clickListener
@@ -38,42 +38,42 @@ class PluginPreferences : Preference {
         installClickListener = clickListener
     }
 
-    fun setPluginSettingsRedirect(clickListener: View.OnClickListener?) {
-        openPluginSettingsListener = clickListener
+    fun setExtensionSettingsRedirect(clickListener: View.OnClickListener?) {
+        openExtensionSettingsListener = clickListener
     }
 
-    constructor(context: Context?, pluginDetails: PluginDetails?, accountId: String? = "") : super(
+    constructor(context: Context?, extensionDetails: ExtensionDetails?, accountId: String? = "") : super(
         context!!
     ) {
-        mPluginDetails = pluginDetails
+        mExtensionDetails = extensionDetails
         mAccountId = accountId
-        layoutResource = R.layout.frag_plugin_settings
+        layoutResource = R.layout.frag_extension_settings
     }
 
     override fun onBindViewHolder(holder: PreferenceViewHolder) {
         super.onBindViewHolder(holder)
-        val binding = FragPluginSettingsBinding.bind(holder.itemView)
-        if (mPluginDetails != null) {
-            binding.pluginSettingIcon.setImageDrawable(mPluginDetails!!.icon)
-            binding.pluginSettingTitle.text = mPluginDetails!!.name
+        val binding = FragExtensionSettingsBinding.bind(holder.itemView)
+        if (mExtensionDetails != null) {
+            binding.extensionSettingIcon.setImageDrawable(mExtensionDetails!!.icon)
+            binding.extensionSettingTitle.text = mExtensionDetails!!.name
         }
         if (resetClickListener != null) {
-            binding.pluginSettingReset.setOnClickListener(resetClickListener)
+            binding.extensionSettingReset.setOnClickListener(resetClickListener)
         }
         if (mAccountId!!.isEmpty()) {
             if (installClickListener != null) {
-                binding.pluginSettingInstall.setOnClickListener(installClickListener)
+                binding.extensionSettingInstall.setOnClickListener(installClickListener)
             }
         } else {
-            binding.pluginSettingButtons.weightSum = 1.0F
-            binding.pluginSettingInstall.visibility = View.GONE
+            binding.extensionSettingButtons.weightSum = 1.0F
+            binding.extensionSettingInstall.visibility = View.GONE
         }
         if (mAccountId!!.isEmpty()) {
-            binding.pluginAccountSettingRedirect.setText(R.string.open_account_plugin_settings)
+            binding.extensionAccountSettingRedirect.setText(R.string.open_account_extension_settings)
         } else {
-            binding.pluginAccountSettingRedirect.setText(R.string.open_general_plugin_settings)
+            binding.extensionAccountSettingRedirect.setText(R.string.open_general_extension_settings)
         }
-        if (openPluginSettingsListener != null)
-            binding.pluginAccountSettingRedirect.setOnClickListener(openPluginSettingsListener)
+        if (openExtensionSettingsListener != null)
+            binding.extensionAccountSettingRedirect.setOnClickListener(openExtensionSettingsListener)
     }
 }
\ No newline at end of file
diff --git a/jami-android/app/src/main/java/cx/ring/plugins/PluginUtils.kt b/jami-android/app/src/main/java/cx/ring/extensions/ExtensionUtils.kt
similarity index 64%
rename from jami-android/app/src/main/java/cx/ring/plugins/PluginUtils.kt
rename to jami-android/app/src/main/java/cx/ring/extensions/ExtensionUtils.kt
index ef373e9e066f9bd20201f6aaf3d6228ca0b04f35..81b441105b0696154a326e76769e23dbf363d0c1 100644
--- a/jami-android/app/src/main/java/cx/ring/plugins/PluginUtils.kt
+++ b/jami-android/app/src/main/java/cx/ring/extensions/ExtensionUtils.kt
@@ -14,47 +14,47 @@
  *  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.plugins
+package cx.ring.extensions
 
 import android.content.Context
 import android.util.Log
 import cx.ring.fragments.CallFragment
-import cx.ring.settings.pluginssettings.PluginDetails
+import cx.ring.settings.extensionssettings.ExtensionDetails
 import net.jami.daemon.JamiService
 import java.io.File
 import java.lang.StringBuilder
 import java.util.*
 
-object PluginUtils {
-    val TAG = PluginUtils::class.simpleName!!
+object ExtensionUtils {
+    val TAG = ExtensionUtils::class.simpleName!!
 
     /**
-     * Fetches the plugins folder in the internal storage for plugins subfolder
-     * Gathers the details of each plugin in a PluginDetails instance
+     * Fetches the extensions folder in the internal storage for extensions subfolder
+     * Gathers the details of each extension in a ExtensionDetails instance
      * @param mContext The current context
-     * @return List of PluginDetails
+     * @return List of ExtensionDetails
      */
-    fun getInstalledPlugins(mContext: Context): List<PluginDetails> {
-        //tree(mContext.filesDir.toString() + File.separator + "plugins", 0)
+    fun getInstalledExtensions(mContext: Context): List<ExtensionDetails> {
+        //tree(mContext.filesDir.toString() + File.separator + "extensions", 0)
         //tree(mContext.cacheDir.absolutePath, 0)
-        val pluginsPaths: List<String> = JamiService.getInstalledPlugins()
-        val loadedPluginsPaths: List<String> = JamiService.getLoadedPlugins()
-        val pluginsList: MutableList<PluginDetails> = ArrayList(pluginsPaths.size)
-        for (pluginPath in pluginsPaths) {
-            val pluginFolder = File(pluginPath)
-            if (pluginFolder.isDirectory) {
-                val pluginHandler = retrieveHandlerId(pluginFolder.name)
-                pluginsList.add(
-                    PluginDetails(
-                        pluginFolder.name,
-                        pluginFolder.absolutePath,
-                        loadedPluginsPaths.contains(pluginPath),
-                        pluginHandler
+        val extensionsPaths: List<String> = JamiService.getInstalledPlugins()
+        val loadedExtensionsPaths: List<String> = JamiService.getLoadedPlugins()
+        val extensionsList: MutableList<ExtensionDetails> = ArrayList(extensionsPaths.size)
+        for (extensionPath in extensionsPaths) {
+            val extensionFolder = File(extensionPath)
+            if (extensionFolder.isDirectory) {
+                val extensionHandler = retrieveHandlerId(extensionFolder.name)
+                extensionsList.add(
+                    ExtensionDetails(
+                        extensionFolder.name,
+                        extensionFolder.absolutePath,
+                        loadedExtensionsPaths.contains(extensionPath),
+                        extensionHandler
                     )
                 )
             }
         }
-        return pluginsList
+        return extensionsList
     }
 
     private fun retrieveHandlerId(name: String): String{
@@ -62,7 +62,7 @@ object PluginUtils {
         val mediaHandlers = JamiService.getCallMediaHandlers().toList()
         for (callMediaHandler in mediaHandlers) {
             val pDetail = JamiService.getCallMediaHandlerDetails(callMediaHandler)
-            if (pDetail["pluginId"]!!.lowercase(Locale.getDefault()).contains(name.lowercase(Locale.getDefault())))
+            if (pDetail["extensionId"]!!.lowercase(Locale.getDefault()).contains(name.lowercase(Locale.getDefault())))
             {
                 res = callMediaHandler!!
             }
@@ -71,48 +71,48 @@ object PluginUtils {
     }
 
     /**
-     * Fetches the plugins folder in the internal storage for plugins subfolder
-     * Gathers the details of each plugin in a PluginDetails instance
+     * Fetches the extensions folder in the internal storage for extensions subfolder
+     * Gathers the details of each extension in a ExtensionDetails instance
      * @param mContext The current context
      * @param accountId The current account id
      * @param peerId The current conversation peer id
-     * @return List of PluginDetails
+     * @return List of ExtensionDetails
      */
-    fun getChatHandlersDetails(mContext: Context, accountId: String, peerId: String): List<PluginDetails> {
-        //tree(mContext.filesDir.toString() + File.separator + "plugins", 0)
+    fun getChatHandlersDetails(mContext: Context, accountId: String, peerId: String): List<ExtensionDetails> {
+        //tree(mContext.filesDir.toString() + File.separator + "extensions", 0)
         //tree(mContext.cacheDir.absolutePath, 0)
         val chatHandlersId: List<String> = JamiService.getChatHandlers()
         val chatHandlerStatus: List<String> = JamiService.getChatHandlerStatus(accountId, peerId)
-        val handlersList: MutableList<PluginDetails> = ArrayList(chatHandlersId.size)
+        val handlersList: MutableList<ExtensionDetails> = ArrayList(chatHandlersId.size)
         for (handlerId in chatHandlersId) {
             val handlerDetails = JamiService.getChatHandlerDetails(handlerId)
-            var pluginPath = handlerDetails["pluginId"]
-            pluginPath = pluginPath!!.substring(0, pluginPath.lastIndexOf("/data"))
+            var extensionPath = handlerDetails["extensionId"]
+            extensionPath = extensionPath!!.substring(0, extensionPath.lastIndexOf("/data"))
             var enabled = false
             if (chatHandlerStatus.contains(handlerId)) {
                 enabled = true
             }
-            handlersList.add(PluginDetails(handlerDetails["name"]!!, pluginPath, enabled, handlerId))
+            handlersList.add(ExtensionDetails(handlerDetails["name"]!!, extensionPath, enabled, handlerId))
         }
         return handlersList
     }
 
     /**
-     * Loads the so file and instantiates the plugin init function (toggle on)
-     * @param path root path of the plugin
+     * Loads the so file and instantiates the extension init function (toggle on)
+     * @param path root path of the extension
      * @return true if loaded
      */
-    fun loadPlugin(path: String): Boolean {
+    fun loadExtension(path: String): Boolean {
         return JamiService.loadPlugin(path)
     }
 
     /**
-     * Toggles the plugin off (destroying any objects created by the plugin)
+     * Toggles the extension off (destroying any objects created by the extension)
      * then unloads the so file
-     * @param path root path of the plugin
+     * @param path root path of the extension
      * @return true if unloaded
      */
-    fun unloadPlugin(path: String): Boolean {
+    fun unloadExtension(path: String): Boolean {
         return JamiService.unloadPlugin(path)
     }
 
diff --git a/jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPicker.java b/jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPicker.java
similarity index 99%
rename from jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPicker.java
rename to jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPicker.java
index 6e3d4465cf3e6cd1e99150f32c697300738672b2..6626826c7756ca80a96598d38902bce3563b7892 100644
--- a/jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPicker.java
+++ b/jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPicker.java
@@ -14,7 +14,7 @@
  *  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.plugins.RecyclerPicker;
+package cx.ring.extensions.RecyclerPicker;
 
 import android.content.Context;
 import android.graphics.drawable.Drawable;
diff --git a/jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPickerAdapter.java b/jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPickerAdapter.java
similarity index 98%
rename from jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPickerAdapter.java
rename to jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPickerAdapter.java
index 3cd0dfaa862118fdf93f4028ec221fef4d01917f..2f8bae1d8311ea0107b14a4886fc034f185031f9 100644
--- a/jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPickerAdapter.java
+++ b/jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPickerAdapter.java
@@ -14,7 +14,7 @@
  *  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.plugins.RecyclerPicker;
+package cx.ring.extensions.RecyclerPicker;
 
 import android.content.Context;
 import android.graphics.drawable.Drawable;
diff --git a/jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPickerLayoutManager.kt b/jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPickerLayoutManager.kt
similarity index 98%
rename from jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPickerLayoutManager.kt
rename to jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPickerLayoutManager.kt
index aba16b5c06ef0fea3b9ab437199edd0f24c52130..ca58bccbbec8ac80b7e5769f298750a3aa2fdc49 100644
--- a/jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPickerLayoutManager.kt
+++ b/jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPickerLayoutManager.kt
@@ -14,7 +14,7 @@
  *  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.plugins.RecyclerPicker
+package cx.ring.extensions.RecyclerPicker
 
 import android.content.Context
 import androidx.recyclerview.widget.LinearLayoutManager
diff --git a/jami-android/app/src/main/java/cx/ring/fragments/CallFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/CallFragment.kt
index 42889ac78b9a05d8263b2c4fc7de5cef00e3d889..50d5e4cbd5d1ca2dd5d7dad075c5d69d9689bd64 100644
--- a/jami-android/app/src/main/java/cx/ring/fragments/CallFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/fragments/CallFragment.kt
@@ -59,13 +59,13 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior
 import cx.ring.R
 import cx.ring.adapters.ConfParticipantAdapter
 import cx.ring.adapters.ConfParticipantAdapter.ConfParticipantSelected
-import cx.ring.adapters.PluginsAdapter
+import cx.ring.adapters.ExtensionsAdapter
 import cx.ring.client.*
 import cx.ring.databinding.FragCallBinding
 import cx.ring.mvp.BaseSupportFragment
-import cx.ring.plugins.PluginUtils
+import cx.ring.extensions.ExtensionUtils
 import cx.ring.service.DRingService
-import cx.ring.settings.pluginssettings.PluginDetails
+import cx.ring.settings.extensionssettings.ExtensionDetails
 import cx.ring.utils.ActionHelper
 import cx.ring.utils.ContentUri
 import cx.ring.utils.ConversationPath
@@ -108,9 +108,9 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
     private var mBackstackLost = false
     private var confAdapter: ConfParticipantAdapter? = null
     private var mConferenceMode = false
-    var isChoosePluginMode = false
+    var isChooseExtensionMode = false
         private set
-    private var callMediaHandlers: List<PluginDetails> ?= null
+    private var callMediaHandlers: List<ExtensionDetails> ?= null
     private val animation = ValueAnimator().apply { duration = 150 }
     private var previewDrag: PointF? = null
     private val previewSnapAnimation = ValueAnimator().apply {
@@ -128,7 +128,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
     lateinit var mDeviceRuntimeService: DeviceRuntimeService
     private val mCompositeDisposable = CompositeDisposable()
     private var bottomSheetParams: BottomSheetBehavior<View>? = null
-    private var pluginsAdapter: PluginsAdapter? = null
+    private var extensionsAdapter: ExtensionsAdapter? = null
 
     private val cameraPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
         if (isGranted) {
@@ -181,7 +181,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
                 b.addParticipantBtn.setOnClickListener { addParticipantClicked() }
                 b.callDialpadBtn.setOnClickListener { displayDialPadKeyboard() }
                 b.callRaiseHandBtn.setOnClickListener { raiseHandClicked() }
-                b.callPluginsBtn.setOnClickListener { pluginsButtonClicked() }
+                b.callExtensionsBtn.setOnClickListener { extensionsButtonClicked() }
                 b.callCameraFlipBtn.setOnClickListener { cameraFlip() }
                 bottomSheetParams = binding?.callOptionsBottomSheet?.let { BottomSheetBehavior.from(it) }
             }.root
@@ -253,16 +253,16 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
                 disableTransitionType(LayoutTransition.CHANGE_APPEARING)
             }
 
-            binding.pluginPreviewSurface.holder.setFormat(PixelFormat.RGBX_8888)
-            binding.pluginPreviewSurface.holder.addCallback(object : SurfaceHolder.Callback {
+            binding.extensionPreviewSurface.holder.setFormat(PixelFormat.RGBX_8888)
+            binding.extensionPreviewSurface.holder.addCallback(object : SurfaceHolder.Callback {
                 override fun surfaceCreated(holder: SurfaceHolder) {
-                    presenter.pluginSurfaceCreated(holder)
+                    presenter.extensionSurfaceCreated(holder)
                 }
 
                 override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {}
 
                 override fun surfaceDestroyed(holder: SurfaceHolder) {
-                    presenter.pluginSurfaceDestroyed()
+                    presenter.extensionSurfaceDestroyed()
                 }
             })
 
@@ -286,10 +286,10 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
             binding.callSpeakerBtn.isChecked = presenter.isSpeakerphoneOn()
             binding.callMicBtn.isChecked = presenter.isMicrophoneMuted
 
-            binding.pluginPreviewSurface.addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
+            binding.extensionPreviewSurface.addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
                 configureTransform(mPreviewSurfaceWidth, mPreviewSurfaceHeight)
             }
-            binding.pluginPreviewContainer.setOnTouchListener { v: View, event: MotionEvent ->
+            binding.extensionPreviewContainer.setOnTouchListener { v: View, event: MotionEvent ->
                 val action = event.actionMasked
                 val parent = v.parent as RelativeLayout
                 val params = v.layoutParams as RelativeLayout.LayoutParams
@@ -321,7 +321,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
                                 -(currentYPosition + v.height - event.y.toInt())
                             )
                             v.layoutParams = params
-                            val outPosition = binding.pluginPreviewContainer.width * 0.85f
+                            val outPosition = binding.extensionPreviewContainer.width * 0.85f
                             var drapOut = 0f
                             if (currentXPosition < 0) {
                                 drapOut = min(1f, -currentXPosition / outPosition)
@@ -342,7 +342,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
                             var mr = 0;
                             var mt = 0;
                             var mb = 0
-                            val hp = binding.pluginPreviewHandle.layoutParams as FrameLayout.LayoutParams
+                            val hp = binding.extensionPreviewHandle.layoutParams as FrameLayout.LayoutParams
                             if (params.leftMargin + v.width / 2 > parent.width / 2) {
                                 params.removeRule(RelativeLayout.ALIGN_PARENT_LEFT)
                                 params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT)
@@ -356,7 +356,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
                                 previewPosition = PreviewPosition.LEFT
                                 hp.gravity = Gravity.CENTER_VERTICAL or Gravity.RIGHT
                             }
-                            binding.pluginPreviewHandle.layoutParams = hp
+                            binding.extensionPreviewHandle.layoutParams = hp
                             if (params.topMargin + v.height / 2 > parent.height / 2) {
                                 params.removeRule(RelativeLayout.ALIGN_PARENT_TOP)
                                 params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)
@@ -372,7 +372,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
                             previewMargins[3] = mb
                             params.setMargins(ml, mt, mr, mb)
                             v.layoutParams = params
-                            val outPosition = binding.pluginPreviewContainer.width * 0.85f
+                            val outPosition = binding.extensionPreviewContainer.width * 0.85f
                             previewHiddenState = when {
                                 currentXPosition < 0 -> min(1f, -currentXPosition / outPosition)
                                 currentXPosition + v.width > parent.width -> min(
@@ -530,9 +530,9 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
     private fun setPreviewDragHiddenState(hiddenState: Float) {
         binding?.let { binding ->
             binding.previewSurface.alpha = 1f - 3 * hiddenState / 4
-            binding.pluginPreviewSurface.alpha = 1f - 3 * hiddenState / 4
+            binding.extensionPreviewSurface.alpha = 1f - 3 * hiddenState / 4
             binding.previewHandle.alpha = hiddenState
-            binding.pluginPreviewHandle.alpha = hiddenState
+            binding.extensionPreviewHandle.alpha = hiddenState
         }
     }
 
@@ -662,7 +662,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
             (previewMargins[3] * r + f).toInt()
         )
         binding.previewContainer.layoutParams = params
-        binding.pluginPreviewContainer.layoutParams = params
+        binding.extensionPreviewContainer.layoutParams = params
     }
 
     /**
@@ -744,11 +744,11 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
     override fun displayLocalVideo(display: Boolean) {
         Log.w(TAG, "displayLocalVideo -> $display")
         binding?.apply {
-            val pluginMode = isChoosePluginMode
-            previewContainer.isVisible = !pluginMode && display
-            pluginPreviewContainer.isVisible = pluginMode && display
-            pluginPreviewSurface.isVisible = pluginMode && display
-            if (pluginMode) pluginPreviewSurface.setZOrderMediaOverlay(true)
+            val extensionMode = isChooseExtensionMode
+            previewContainer.isVisible = !extensionMode && display
+            extensionPreviewContainer.isVisible = extensionMode && display
+            extensionPreviewSurface.isVisible = extensionMode && display
+            if (extensionMode) extensionPreviewSurface.setZOrderMediaOverlay(true)
         }
     }
 
@@ -756,7 +756,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
         Log.w(TAG, "displayHangupButton $display")
         /* binding?.apply { confControlGroup.visibility = when {
             !mConferenceMode -> View.GONE
-            display && !isChoosePluginMode -> View.VISIBLE
+            display && !isChooseExtensionMode -> View.VISIBLE
             else -> View.INVISIBLE
         }} */
     }
@@ -876,28 +876,28 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
         binding.root.post { setBottomSheet() }
 
         if(callMediaHandlers == null)
-            callMediaHandlers = PluginUtils.getInstalledPlugins(binding.pluginslistContainer.context)
+            callMediaHandlers = ExtensionUtils.getInstalledExtensions(binding.extensionsListContainer.context)
                     .filter { !it.handlerId.isNullOrEmpty() }
-        pluginsAdapter = PluginsAdapter(
+        extensionsAdapter = ExtensionsAdapter(
             mList = callMediaHandlers!!,
-            listener = object : PluginsAdapter.PluginListItemListener {
-                override fun onPluginItemClicked(pluginDetails: PluginDetails) {}
-
-                override fun onPluginEnabled(pluginDetails: PluginDetails) {
-                    pluginDetails.isRunning = !pluginDetails.isRunning
-                    if (!isChoosePluginMode) {
-                        presenter.startPlugin(pluginDetails.handlerId!!)
-                        isChoosePluginMode = true
+            listener = object : ExtensionsAdapter.ExtensionListItemListener {
+                override fun onExtensionItemClicked(extensionDetails: ExtensionDetails) {}
+
+                override fun onExtensionEnabled(extensionDetails: ExtensionDetails) {
+                    extensionDetails.isRunning = !extensionDetails.isRunning
+                    if (!isChooseExtensionMode) {
+                        presenter.startExtension(extensionDetails.handlerId!!)
+                        isChooseExtensionMode = true
                     } else {
-                        if (pluginDetails.isRunning) {
-                            presenter.toggleCallMediaHandler(pluginDetails.handlerId!!, true)
+                        if (extensionDetails.isRunning) {
+                            presenter.toggleCallMediaHandler(extensionDetails.handlerId!!, true)
                         } else {
-                            presenter.toggleCallMediaHandler(pluginDetails.handlerId!!, false)
+                            presenter.toggleCallMediaHandler(extensionDetails.handlerId!!, false)
                             for (handler in callMediaHandlers!!)
                                 if (handler.isRunning) break
                                 else {
-                                    presenter.stopPlugin()
-                                    isChoosePluginMode = false
+                                    presenter.stopExtension()
+                                    isChooseExtensionMode = false
                                 }
                         }
                     }
@@ -905,7 +905,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
             },
             accountId = if (participantInfo.isNotEmpty()) participantInfo[0].call?.account else null
         )
-        binding.pluginslistContainer.adapter = pluginsAdapter
+        binding.extensionsListContainer.adapter = extensionsAdapter
     }
 
     private fun generateParticipantOverlay(participantsInfo: List<ParticipantInfo>) {
@@ -951,13 +951,13 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
         isMicrophoneMuted: Boolean,
         hasMultipleCamera: Boolean,
         canDial: Boolean,
-        showPluginBtn: Boolean,
+        showExtensionBtn: Boolean,
         onGoingCall: Boolean,
         hasActiveCameraVideo: Boolean,
         hasActiveScreenShare: Boolean
     ) {
         binding?.apply {
-            pluginsBtnContainer.isVisible = showPluginBtn
+            extensionsBtnContainer.isVisible = showExtensionBtn
             raiseHandBtnContainer.isVisible = mConferenceMode
             callDialpadBtn.isClickable = canDial
             dialpadBtnContainer.isVisible = canDial
@@ -1126,8 +1126,8 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
         if (previewWidth != null ) mPreviewWidth = previewWidth
         if (previewHeight != null ) mPreviewHeight = previewHeight
         val flip = rot % 180 != 0
-        if (isChoosePluginMode) {
-            binding?.pluginPreviewSurface?.setAspectRatio(
+        if (isChooseExtensionMode) {
+            binding?.extensionPreviewSurface?.setAspectRatio(
                 if (flip) mPreviewHeight else mPreviewWidth,
                 if (flip) mPreviewWidth else mPreviewHeight
             )
@@ -1159,7 +1159,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
         } else if (Surface.ROTATION_180 == rotation) {
             matrix.postRotate(180f, centerX, centerY)
         }
-        if (!isChoosePluginMode) {
+        if (!isChooseExtensionMode) {
             binding.previewSurface.setTransform(matrix)
         }
     }
@@ -1267,8 +1267,8 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
 
     private fun startScreenShare(resultCode: Int, data: Intent) {
         if (presenter.startScreenShare(resultCode, data)) {
-            if (isChoosePluginMode) {
-                binding!!.pluginPreviewSurface.visibility = View.GONE
+            if (isChooseExtensionMode) {
+                binding!!.extensionPreviewSurface.visibility = View.GONE
                 displayLocalVideo(false)
             } else {
                 binding!!.previewContainer.visibility = View.GONE
@@ -1350,7 +1350,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
         presenter.toggleButtonClicked()
     }
 
-    override fun displayPluginsButton(): Boolean {
+    override fun displayExtensionsButton(): Boolean {
         return JamiService.getPluginsEnabled() && JamiService.getCallMediaHandlers().size > 0
     }
 
@@ -1359,10 +1359,10 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView,
         return mProjectionManager.getMediaProjection(resultCode, dataIntent)
     }
 
-    public fun pluginsButtonClicked() {
+    public fun extensionsButtonClicked() {
         val binding = binding ?: return
-        if(binding.callPluginsBtn.isChecked){
-            binding.confControlGroup.adapter = pluginsAdapter
+        if(binding.callExtensionsBtn.isChecked){
+            binding.confControlGroup.adapter = extensionsAdapter
         } else {
             binding.confControlGroup.adapter = confAdapter
         }
diff --git a/jami-android/app/src/main/java/cx/ring/fragments/ConversationFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/ConversationFragment.kt
index cb2e1ef06c85daeed37b7d3fb57feb1fbc8f6313..b18d2162123d862ad27bc83ad64bd34c681fcb3a 100644
--- a/jami-android/app/src/main/java/cx/ring/fragments/ConversationFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/fragments/ConversationFragment.kt
@@ -400,20 +400,20 @@ class ConversationFragment : BaseSupportFragment<ConversationPresenter, Conversa
                 R.id.conv_send_file -> openFilePicker()
                 R.id.conv_select_media -> openGallery()
                 R.id.conv_share_location -> shareLocation()
-                R.id.chat_plugins -> presenter.showPluginListHandlers()
+                R.id.chat_extensions -> presenter.showExtensionListHandlers()
             }
             false
         }
-        popup.menu.findItem(R.id.chat_plugins).isVisible = JamiService.getPluginsEnabled() && !JamiService.getChatHandlers().isEmpty()
+        popup.menu.findItem(R.id.chat_extensions).isVisible = JamiService.getPluginsEnabled() && !JamiService.getChatHandlers().isEmpty()
         popup.setForceShowIcon(true)
         popup.show()
     }
 
-    override fun showPluginListHandlers(accountId: String, contactId: String) {
-        Log.w(TAG, "show Plugin Chat Handlers List")
-        val fragment = PluginHandlersListFragment.newInstance(accountId, contactId)
+    override fun showExtensionListHandlers(accountId: String, contactId: String) {
+        Log.w(TAG, "show Extension Chat Handlers List")
+        val fragment = ExtensionHandlersListFragment.newInstance(accountId, contactId)
         childFragmentManager.beginTransaction()
-            .add(R.id.pluginListHandlers, fragment, PluginHandlersListFragment.TAG)
+            .add(R.id.extensionListHandlers, fragment, ExtensionHandlersListFragment.TAG)
             .commit()
         binding?.let { binding ->
             val params = binding.mapCard.layoutParams as RelativeLayout.LayoutParams
@@ -426,11 +426,11 @@ class ConversationFragment : BaseSupportFragment<ConversationPresenter, Conversa
         }
     }
 
-    fun hidePluginListHandlers() {
+    fun hideExtensionListHandlers() {
         if (binding!!.mapCard.visibility != View.GONE) {
             binding!!.mapCard.visibility = View.GONE
             val fragmentManager = childFragmentManager
-            val fragment = fragmentManager.findFragmentById(R.id.pluginListHandlers)
+            val fragment = fragmentManager.findFragmentById(R.id.extensionListHandlers)
             if (fragment != null) {
                 fragmentManager.beginTransaction()
                     .remove(fragment)
diff --git a/jami-android/app/src/main/java/cx/ring/fragments/PluginHandlersListFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/PluginHandlersListFragment.kt
index 0c583f1d4fbbd20eab51473dd5997cec172c8d9b..f5efc6bb92a312eed40a54066b55ff59c62f28d7 100644
--- a/jami-android/app/src/main/java/cx/ring/fragments/PluginHandlersListFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/fragments/PluginHandlersListFragment.kt
@@ -22,16 +22,16 @@ import android.view.View
 import android.view.ViewGroup
 import androidx.fragment.app.Fragment
 import cx.ring.account.AccountEditionFragment
-import cx.ring.databinding.FragPluginHandlersListBinding
-import cx.ring.plugins.PluginUtils
-import cx.ring.settings.pluginssettings.PluginDetails
-import cx.ring.settings.pluginssettings.PluginsListAdapter
-import cx.ring.settings.pluginssettings.PluginsListAdapter.PluginListItemListener
+import cx.ring.databinding.FragExtensionHandlersListBinding
+import cx.ring.extensions.ExtensionUtils
+import cx.ring.settings.extensionssettings.ExtensionDetails
+import cx.ring.settings.extensionssettings.ExtensionsListAdapter
+import cx.ring.settings.extensionssettings.ExtensionsListAdapter.ExtensionListItemListener
 import cx.ring.utils.ConversationPath
 import net.jami.daemon.JamiService
 
-class PluginHandlersListFragment : Fragment(), PluginListItemListener {
-    private var binding: FragPluginHandlersListBinding? = null
+class ExtensionHandlersListFragment : Fragment(), ExtensionListItemListener {
+    private var binding: FragExtensionHandlersListBinding? = null
     private lateinit var mPath: ConversationPath
 
     override fun onCreate(savedInstanceState: Bundle?) {
@@ -40,10 +40,10 @@ class PluginHandlersListFragment : Fragment(), PluginListItemListener {
     }
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
-        return FragPluginHandlersListBinding.inflate(inflater, container, false).also { b ->
+        return FragExtensionHandlersListBinding.inflate(inflater, container, false).also { b ->
             b.handlerList.setHasFixedSize(true)
-            b.handlerList.adapter = PluginsListAdapter(
-                PluginUtils.getChatHandlersDetails(b.handlerList.context, mPath.accountId, mPath.conversationId.removePrefix("swarm:")), this, "")
+            b.handlerList.adapter = ExtensionsListAdapter(
+                ExtensionUtils.getChatHandlersDetails(b.handlerList.context, mPath.accountId, mPath.conversationId.removePrefix("swarm:")), this, "")
             binding = b
         }.root
     }
@@ -55,27 +55,27 @@ class PluginHandlersListFragment : Fragment(), PluginListItemListener {
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
-        binding!!.chatPluginsToolbar.visibility = View.VISIBLE
-        binding!!.chatPluginsToolbar.setOnClickListener { v: View? ->
+        binding!!.chatExtensionsToolbar.visibility = View.VISIBLE
+        binding!!.chatExtensionsToolbar.setOnClickListener { v: View? ->
             val fragment = parentFragment
             if (fragment is ConversationFragment) {
-                fragment.hidePluginListHandlers()
+                fragment.hideExtensionListHandlers()
             }
         }
     }
 
-    override fun onPluginItemClicked(pluginDetails: PluginDetails) {
-        JamiService.toggleChatHandler(pluginDetails.handlerId, mPath.accountId, mPath.conversationId.removePrefix("swarm:"), pluginDetails.isEnabled)
+    override fun onExtensionItemClicked(extensionDetails: ExtensionDetails) {
+        JamiService.toggleChatHandler(extensionDetails.handlerId, mPath.accountId, mPath.conversationId.removePrefix("swarm:"), extensionDetails.isEnabled)
     }
 
-    override fun onPluginEnabled(pluginDetails: PluginDetails) {
-        JamiService.toggleChatHandler(pluginDetails.handlerId, mPath.accountId, mPath.conversationId.removePrefix("swarm:"), pluginDetails.isEnabled)
+    override fun onExtensionEnabled(extensionDetails: ExtensionDetails) {
+        JamiService.toggleChatHandler(extensionDetails.handlerId, mPath.accountId, mPath.conversationId.removePrefix("swarm:"), extensionDetails.isEnabled)
     }
 
     companion object {
-        val TAG = PluginHandlersListFragment::class.simpleName!!
-        fun newInstance(accountId: String, peerId: String): PluginHandlersListFragment {
-            val fragment = PluginHandlersListFragment()
+        val TAG = ExtensionHandlersListFragment::class.simpleName!!
+        fun newInstance(accountId: String, peerId: String): ExtensionHandlersListFragment {
+            val fragment = ExtensionHandlersListFragment()
             fragment.arguments = ConversationPath.toBundle(accountId, peerId)
             return fragment
         }
diff --git a/jami-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.kt b/jami-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.kt
index f4f13c92c5e28dbd1974f1bc43766c8f1b641540..48aa341f0e9986f0ee04fe4856f95a63708ba1a8 100644
--- a/jami-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.kt
+++ b/jami-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.kt
@@ -48,10 +48,10 @@ class DeviceRuntimeServiceImpl(
     private val logService: LogService
 ) : DeviceRuntimeService() {
     private fun copyAssets() {
-        val pluginsPath = File(mContext.filesDir, "plugins")
-        Log.w(TAG, "Plugins: " + pluginsPath.absolutePath)
-        // Overwrite existing plugins folder in order to use newer plugins
-        AndroidFileUtils.copyAssetFolder(mContext.assets, "plugins", pluginsPath)
+        val extensionsPath = File(mContext.filesDir, "extensions")
+        Log.w(TAG, "Extensions: " + extensionsPath.absolutePath)
+        // Overwrite existing extensions folder in order to use newer extensions
+        AndroidFileUtils.copyAssetFolder(mContext.assets, "extensions", extensionsPath)
     }
 
     override fun loadNativeLibrary() {
diff --git a/jami-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.kt b/jami-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.kt
index 3c74d570379661aa29bc347933cbede4e6a2e7a2..b9484723bb08f2e4383aa55f14b722c62005b862 100644
--- a/jami-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.kt
+++ b/jami-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.kt
@@ -74,9 +74,9 @@ class HardwareServiceImpl(
     private val shouldCapture = HashSet<String>()
     private var mShouldSpeakerphone = false
     private val mHasSpeakerPhone: Boolean by lazy { hasSpeakerphone() }
-    private var mIsChoosePlugin = false
+    private var mIsChooseExtension = false
     private var mMediaHandlerId: String? = null
-    private var mPluginCallId: String? = null
+    private var mExtensionCallId: String? = null
 
     override fun initVideo(): Completable = cameraService.init()
 
@@ -452,7 +452,7 @@ class HardwareServiceImpl(
     }
 
     override fun startMediaHandler(mediaHandlerId: String?) {
-        mIsChoosePlugin = true
+        mIsChooseExtension = true
         mMediaHandlerId = mediaHandlerId
     }
 
@@ -461,13 +461,13 @@ class HardwareServiceImpl(
     }
 
     override fun stopMediaHandler() {
-        mIsChoosePlugin = false
+        mIsChooseExtension = false
         mMediaHandlerId = null
     }
 
     override fun startCapture(camId: String?) {
         val cam = camId ?: cameraService.switchInput(true) ?: return
-        Log.i(TAG, "startCapture > camId: $camId, cam: $cam, mIsChoosePlugin: $mIsChoosePlugin")
+        Log.i(TAG, "startCapture > camId: $camId, cam: $cam, mIsChooseExtension: $mIsChooseExtension")
         shouldCapture.add(cam)
         val videoParams = cameraService.getParams(cam) ?: return
         if (videoParams.isCapturing) return
@@ -481,7 +481,7 @@ class HardwareServiceImpl(
         }
         val conf = mCameraPreviewCall.get()
         val useHardwareCodec =
-            mPreferenceService.isHardwareAccelerationEnabled && (conf == null || !conf.isConference) && !mIsChoosePlugin
+            mPreferenceService.isHardwareAccelerationEnabled && (conf == null || !conf.isConference) && !mIsChooseExtension
         if (conf != null && useHardwareCodec) {
             val call = conf.call
             if (call != null) {
@@ -508,15 +508,15 @@ class HardwareServiceImpl(
                 object : CameraListener {
                     override fun onOpened() {
                         val currentCall = conf?.id ?: return
-                        if (mPluginCallId != null && mPluginCallId != currentCall) {
+                        if (mExtensionCallId != null && mExtensionCallId != currentCall) {
                             if (mMediaHandlerId != null) {
                                 JamiService.toggleCallMediaHandler(mMediaHandlerId, currentCall,false)
                             }
-                            mIsChoosePlugin = false
+                            mIsChooseExtension = false
                             mMediaHandlerId = null
-                            mPluginCallId = null
-                        } else if (mIsChoosePlugin && mMediaHandlerId != null) {
-                            mPluginCallId = currentCall
+                            mExtensionCallId = null
+                        } else if (mIsChooseExtension && mMediaHandlerId != null) {
+                            mExtensionCallId = currentCall
                             toggleMediaHandler(currentCall)
                         }
                     }
@@ -694,7 +694,7 @@ class HardwareServiceImpl(
 
         private val TAG = HardwareServiceImpl::class.simpleName!!
         private var mCameraPreviewSurface = WeakReference<TextureView>(null)
-        private var mCameraPluginPreviewSurface = WeakReference<SurfaceView>(null)
+        private var mCameraExtensionPreviewSurface = WeakReference<SurfaceView>(null)
         private var mCameraPreviewCall = WeakReference<Conference>(null)
         private val videoSurfaces = HashMap<String, WeakReference<SurfaceHolder>>()
     }
diff --git a/jami-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.kt b/jami-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.kt
index 2725fd015a3d1c9dbfa4d102e2d2971146aaa83f..e8db12a17d3c1249d06e2c1957c1178728bcb1c6 100644
--- a/jami-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.kt
+++ b/jami-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.kt
@@ -217,7 +217,7 @@ class SharedPreferencesServiceImpl(private val context: Context, accountService:
         private const val PREF_ON_STARTUP = "on_startup"
         const val PREF_DARK_MODE = "darkMode"
         private const val PREF_ACCEPT_IN_MAX_SIZE = "acceptIncomingFilesMaxSize"
-        const val PREF_PLUGINS = "plugins"
+        const val PREF_EXTENSIONS = "extensions"
         private const val PREF_LOG_IS_ACTIVE = "log_is_active"
 
         fun getConversationPreferences(context: Context, accountId: String, conversationUri: Uri): SharedPreferences =
diff --git a/jami-android/app/src/main/java/cx/ring/settings/SettingsFragment.kt b/jami-android/app/src/main/java/cx/ring/settings/SettingsFragment.kt
index 68ccf1fc850b60e05b21a0964bb80a215a980b5a..483047a1c6c58206379c4c72d758738fd0506868 100644
--- a/jami-android/app/src/main/java/cx/ring/settings/SettingsFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/settings/SettingsFragment.kt
@@ -36,10 +36,10 @@ import cx.ring.client.LogsActivity
 import cx.ring.databinding.FragSettingsBinding
 import cx.ring.interfaces.AppBarStateListener
 import cx.ring.mvp.BaseSupportFragment
-import cx.ring.settings.pluginssettings.PluginDetails
-import cx.ring.settings.pluginssettings.PluginPathPreferenceFragment
-import cx.ring.settings.pluginssettings.PluginSettingsFragment
-import cx.ring.settings.pluginssettings.PluginsListSettingsFragment
+import cx.ring.settings.extensionssettings.ExtensionDetails
+import cx.ring.settings.extensionssettings.ExtensionPathPreferenceFragment
+import cx.ring.settings.extensionssettings.ExtensionSettingsFragment
+import cx.ring.settings.extensionssettings.ExtensionsListSettingsFragment
 import cx.ring.utils.ActionHelper.openJamiDonateWebPage
 import dagger.hilt.android.AndroidEntryPoint
 import net.jami.daemon.JamiService
@@ -86,15 +86,15 @@ class SettingsFragment :
                 }
             }
 
-            settingsPluginsLayout.setOnClickListener {
+            settingsExtensionsLayout.setOnClickListener {
                 if (JamiService.getPluginsEnabled()) {
-                    goToPluginsListSettings()
+                    goToExtensionsListSettings()
                 }
             }
             settingsDarkTheme.setOnCheckedChangeListener { _, isChecked: Boolean ->
                 presenter.darkMode = isChecked
             }
-            settingsPluginsSwitch.setOnCheckedChangeListener { _, isChecked: Boolean ->
+            settingsExtensionsSwitch.setOnCheckedChangeListener { _, isChecked: Boolean ->
                 JamiService.setPluginsEnabled(isChecked)
             }
             val save = CompoundButton.OnCheckedChangeListener { _, isChecked: Boolean ->
@@ -134,7 +134,7 @@ class SettingsFragment :
                 activity?.onBackPressedDispatcher?.onBackPressed()
             }
             settingsDarkTheme.isChecked = presenter.darkMode
-            settingsPluginsSwitch.isChecked = JamiService.getPluginsEnabled()
+            settingsExtensionsSwitch.isChecked = JamiService.getPluginsEnabled()
             if (TextUtils.isEmpty(JamiApplication.instance?.pushToken)) {
                 settingsPushNotificationsLayout.visibility = View.GONE
             }
@@ -154,43 +154,43 @@ class SettingsFragment :
         backPressedCallback.isEnabled = true
     }
 
-    private fun goToPluginsListSettings(accountId: String? = "") {
+    private fun goToExtensionsListSettings(accountId: String? = "") {
         val binding = binding ?: return
-        val content = PluginsListSettingsFragment.newInstance(accountId)
+        val content = ExtensionsListSettingsFragment.newInstance(accountId)
         childFragmentManager
             .beginTransaction()
             .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
-            .replace(R.id.fragment_container, content, PLUGINS_LIST_SETTINGS_TAG)
-            .addToBackStack(PLUGINS_LIST_SETTINGS_TAG).commit()
+            .replace(R.id.fragment_container, content, EXTENSIONS_LIST_SETTINGS_TAG)
+            .addToBackStack(EXTENSIONS_LIST_SETTINGS_TAG).commit()
         binding.fragmentContainer.isVisible = true
         binding.donateButton.isVisible = false
         backPressedCallback.isEnabled = true
     }
 
-    fun goToPluginSettings(pluginDetails: PluginDetails) {
-        val content = PluginSettingsFragment.newInstance(pluginDetails)
+    fun goToExtensionSettings(extensionDetails: ExtensionDetails) {
+        val content = ExtensionSettingsFragment.newInstance(extensionDetails)
         val fragmentTransaction = childFragmentManager
             .beginTransaction()
             .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
-            .replace(R.id.fragment_container, content, PLUGIN_SETTINGS_TAG)
+            .replace(R.id.fragment_container, content, EXTENSION_SETTINGS_TAG)
         val backStackEntryCount = childFragmentManager.backStackEntryCount
         if(backStackEntryCount > 0) {
             val topBackStackEntry = childFragmentManager.getBackStackEntryAt(backStackEntryCount-1)
-            if (topBackStackEntry.name != PLUGIN_SETTINGS_TAG)
-                fragmentTransaction.addToBackStack(PLUGIN_SETTINGS_TAG)
+            if (topBackStackEntry.name != EXTENSION_SETTINGS_TAG)
+                fragmentTransaction.addToBackStack(EXTENSION_SETTINGS_TAG)
         }
         fragmentTransaction.commit()
         binding!!.fragmentContainer.isVisible = true
         backPressedCallback.isEnabled = true
     }
 
-    fun goToPluginPathPreference(pluginDetails: PluginDetails, preferenceKey: String) {
-        val content = PluginPathPreferenceFragment.newInstance(pluginDetails, preferenceKey)
+    fun goToExtensionPathPreference(extensionDetails: ExtensionDetails, preferenceKey: String) {
+        val content = ExtensionPathPreferenceFragment.newInstance(extensionDetails, preferenceKey)
         childFragmentManager
             .beginTransaction()
             .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
-            .replace(R.id.fragment_container, content, PLUGIN_PATH_PREFERENCE_TAG)
-            .addToBackStack(PLUGIN_PATH_PREFERENCE_TAG).commit()
+            .replace(R.id.fragment_container, content, EXTENSION_PATH_PREFERENCE_TAG)
+            .addToBackStack(EXTENSION_PATH_PREFERENCE_TAG).commit()
         binding!!.fragmentContainer.isVisible = true
         backPressedCallback.isEnabled = true
     }
@@ -304,8 +304,8 @@ class SettingsFragment :
         const val NOTIFICATION_PUBLIC = 1
         const val NOTIFICATION_SECRET = 2
         const val VIDEO_SETTINGS_TAG = "VideoPrefs"
-        const val PLUGINS_LIST_SETTINGS_TAG = "PluginsListSettings"
-        const val PLUGIN_SETTINGS_TAG = "PluginSettings"
-        const val PLUGIN_PATH_PREFERENCE_TAG = "PluginPathPreference"
+        const val EXTENSIONS_LIST_SETTINGS_TAG = "ExtensionsListSettings"
+        const val EXTENSION_SETTINGS_TAG = "ExtensionSettings"
+        const val EXTENSION_PATH_PREFERENCE_TAG = "ExtensionPathPreference"
     }
 }
\ No newline at end of file
diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginDetails.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionDetails.kt
similarity index 74%
rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginDetails.kt
rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionDetails.kt
index 8e5711606929e085ed1d7afbfcfa97ee7f34bfdb..fa950acedb8ab61348ffefdb61a7ffd7e12d6a1e 100644
--- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginDetails.kt
+++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionDetails.kt
@@ -14,7 +14,7 @@
  *  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.settings.pluginssettings
+package cx.ring.settings.extensionssettings
 
 import android.graphics.drawable.Drawable
 import android.util.Log
@@ -25,10 +25,10 @@ import java.io.File
 import java.util.*
 
 /**
- * Class that contains PluginDetails like name, rootPath
+ * Class that contains ExtensionDetails like name, rootPath
  */
-class PluginDetails(val name: String, val rootPath: String, var isEnabled: Boolean, var handlerId: String?= null, var accountId: String? = "") {
-    private val details: Map<String, String> = pluginDetails
+class ExtensionDetails(val name: String, val rootPath: String, var isEnabled: Boolean, var handlerId: String?= null, var accountId: String? = "") {
+    private val details: Map<String, String> = extensionDetails
     var icon: Drawable? = null
         private set
     var isRunning: Boolean = false
@@ -45,19 +45,19 @@ class PluginDetails(val name: String, val rootPath: String, var isEnabled: Boole
         }
     }
 
-    private val pluginDetails: Map<String, String>
+    private val extensionDetails: Map<String, String>
         get() = JamiService.getPluginDetails(rootPath).toNative()
-    val pluginPreferences: List<Map<String, String>>
+    val extensionPreferences: List<Map<String, String>>
         get() = JamiService.getPluginPreferences(rootPath, accountId).toNative()
-    val pluginPreferencesValues: Map<String, String>
+    val extensionPreferencesValues: Map<String, String>
         get() = JamiService.getPluginPreferencesValues(rootPath, accountId)
 
-    fun setPluginPreference(key: String, value: String): Boolean {
+    fun setExtensionPreference(key: String, value: String): Boolean {
         return JamiService.setPluginPreference(rootPath, accountId, key, value)
     }
 
     companion object {
-        val TAG = PluginDetails::class.simpleName!!
+        val TAG = ExtensionDetails::class.simpleName!!
     }
 
     init {
diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListAdapter.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionListAdapter.kt
similarity index 55%
rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListAdapter.kt
rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionListAdapter.kt
index ccfdad0d528f69e91b824ab7a781c47de19f5208..283b223d872f4b4d5e16bca536e3e8eee16ec678 100644
--- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListAdapter.kt
+++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionListAdapter.kt
@@ -14,25 +14,25 @@
  *  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.settings.pluginssettings
+package cx.ring.settings.extensionssettings
 
 import android.view.LayoutInflater
 import android.view.ViewGroup
 import androidx.recyclerview.widget.RecyclerView
 import cx.ring.R
-import cx.ring.viewholders.PluginSettingViewHolder
+import cx.ring.viewholders.ExtensionSettingViewHolder
 
-class PluginsListAdapter(private var mList: List<PluginDetails>, private val listener: PluginListItemListener, private val accountId: String? = "") :
-    RecyclerView.Adapter<PluginSettingViewHolder>() {
-    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PluginSettingViewHolder {
-        val view = LayoutInflater.from(parent.context).inflate(R.layout.frag_plugins_list_item, parent, false)
-        return PluginSettingViewHolder(view, listener)
+class ExtensionsListAdapter(private var mList: List<ExtensionDetails>, private val listener: ExtensionListItemListener, private val accountId: String? = "") :
+    RecyclerView.Adapter<ExtensionSettingViewHolder>() {
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ExtensionSettingViewHolder {
+        val view = LayoutInflater.from(parent.context).inflate(R.layout.frag_extensions_list_item, parent, false)
+        return ExtensionSettingViewHolder(view, listener)
     }
 
-    fun notifyItemChanged(pluginDetails: PluginDetails) =
-        mList.indexOf(pluginDetails).let { if (it != -1) notifyItemChanged(it) }
+    fun notifyItemChanged(extensionDetails: ExtensionDetails) =
+        mList.indexOf(extensionDetails).let { if (it != -1) notifyItemChanged(it) }
 
-    override fun onBindViewHolder(holderSetting: PluginSettingViewHolder, position: Int) {
+    override fun onBindViewHolder(holderSetting: ExtensionSettingViewHolder, position: Int) {
         for (item in mList) {
             item.accountId = accountId
         }
@@ -41,10 +41,10 @@ class PluginsListAdapter(private var mList: List<PluginDetails>, private val lis
 
     override fun getItemCount(): Int {
         if (!accountId!!.isEmpty()) {
-            var copy: List<PluginDetails> = ArrayList()
+            var copy: List<ExtensionDetails> = ArrayList()
             for (item in mList) {
                 item.accountId = accountId
-                if (!item.pluginPreferences.isEmpty())
+                if (!item.extensionPreferences.isEmpty())
                     copy += item
             }
             mList = copy
@@ -52,20 +52,20 @@ class PluginsListAdapter(private var mList: List<PluginDetails>, private val lis
         return mList.size
     }
 
-    fun updatePluginsList(listPlugins: List<PluginDetails>) {
-        for (item in listPlugins) {
+    fun updateExtensionsList(listExtensions: List<ExtensionDetails>) {
+        for (item in listExtensions) {
             item.accountId = accountId
         }
-        mList = listPlugins
+        mList = listExtensions
         notifyDataSetChanged()
     }
 
-    interface PluginListItemListener {
-        fun onPluginItemClicked(pluginDetails: PluginDetails)
-        fun onPluginEnabled(pluginDetails: PluginDetails)
+    interface ExtensionListItemListener {
+        fun onExtensionItemClicked(extensionDetails: ExtensionDetails)
+        fun onExtensionEnabled(extensionDetails: ExtensionDetails)
     }
 
     companion object {
-        val TAG = PluginsListAdapter::class.simpleName!!
+        val TAG = ExtensionsListAdapter::class.simpleName!!
     }
 }
\ No newline at end of file
diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionListSettingsFragment.kt
similarity index 53%
rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.kt
rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionListSettingsFragment.kt
index 311c86aacb370b9b304fc7f42122665e0a19abef..15599403f16c74c70549c1241fbc37e50097c587 100644
--- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionListSettingsFragment.kt
@@ -14,7 +14,7 @@
  *  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.settings.pluginssettings
+package cx.ring.settings.extensionssettings
 
 import android.app.Activity
 import android.content.Intent
@@ -33,14 +33,14 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.google.android.material.snackbar.Snackbar
 import cx.ring.R
 import cx.ring.account.AccountEditionFragment
-import cx.ring.databinding.FragPluginsListSettingsBinding
+import cx.ring.databinding.FragExtensionsListSettingsBinding
 import cx.ring.databinding.ItemProgressDialogBinding
 import cx.ring.interfaces.AppBarStateListener
-import cx.ring.plugins.PluginUtils.getInstalledPlugins
-import cx.ring.plugins.PluginUtils.loadPlugin
-import cx.ring.plugins.PluginUtils.unloadPlugin
+import cx.ring.extensions.ExtensionUtils.getInstalledExtensions
+import cx.ring.extensions.ExtensionUtils.loadExtension
+import cx.ring.extensions.ExtensionUtils.unloadExtension
 import cx.ring.settings.SettingsFragment
-import cx.ring.settings.pluginssettings.PluginsListAdapter.PluginListItemListener
+import cx.ring.settings.extensionssettings.ExtensionsListAdapter.ExtensionListItemListener
 import cx.ring.utils.AndroidFileUtils.getCacheFile
 import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
 import io.reactivex.rxjava3.disposables.CompositeDisposable
@@ -48,31 +48,31 @@ import net.jami.daemon.JamiService
 import java.io.File
 import java.io.IOException
 
-class PluginsListSettingsFragment : Fragment(), PluginListItemListener {
-    private var binding: FragPluginsListSettingsBinding? = null
-    private var mAdapter: PluginsListAdapter? = null
+class ExtensionsListSettingsFragment : Fragment(), ExtensionListItemListener {
+    private var binding: FragExtensionsListSettingsBinding? = null
+    private var mAdapter: ExtensionsListAdapter? = null
     private val mCompositeDisposable = CompositeDisposable()
     private var mProgress: AlertDialog? = null
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
-        binding = FragPluginsListSettingsBinding.inflate(inflater, container, false)
+        binding = FragExtensionsListSettingsBinding.inflate(inflater, container, false)
         val accountId = requireArguments().getString(AccountEditionFragment.ACCOUNT_ID_KEY)!!
 
         val appBarStateListener = parentFragment as? AppBarStateListener
-        appBarStateListener?.onToolbarTitleChanged(getString(R.string.menu_item_plugin_list))
-        appBarStateListener?.onAppBarScrollTargetViewChanged(binding!!.pluginsList)
+        appBarStateListener?.onToolbarTitleChanged(getString(R.string.menu_item_extension_list))
+        appBarStateListener?.onAppBarScrollTargetViewChanged(binding!!.extensionsList)
 
         // use this setting to improve performance if you know that changes
         // in content do not change the layout size of the RecyclerView
-        binding!!.pluginsList.setHasFixedSize(true)
+        binding!!.extensionsList.setHasFixedSize(true)
 
-        mAdapter = PluginsListAdapter(getInstalledPlugins(binding!!.pluginsList.context), this, accountId)
-        binding!!.pluginsList.adapter = mAdapter
+        mAdapter = ExtensionsListAdapter(getInstalledExtensions(binding!!.extensionsList.context), this, accountId)
+        binding!!.extensionsList.adapter = mAdapter
 
         //Fab
         if (accountId.isEmpty()) {
-            binding!!.pluginsListSettingsFab.visibility = View.VISIBLE
-            binding!!.pluginsListSettingsFab.setOnClickListener {
+            binding!!.extensionsListSettingsFab.visibility = View.VISIBLE
+            binding!!.extensionsListSettingsFab.setOnClickListener {
                 val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
                 intent.addCategory(Intent.CATEGORY_OPENABLE)
                 intent.type = "*/*"
@@ -83,33 +83,33 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener {
     }
 
     /**
-     * Implements PluginListItemListener.onPluginItemClicked which is called when we click on
-     * a plugin list item
-     * @param pluginDetails instance of a plugin details that is sent to PluginSettingsFragment
+     * Implements ExtensionListItemListener.onExtensionItemClicked which is called when an extension
+     * list item is clicked
+     * @param extensionDetails instance of an extension details that is sent to ExtensionSettingsFragment
      */
-    override fun onPluginItemClicked(pluginDetails: PluginDetails) {
-        (parentFragment as SettingsFragment).goToPluginSettings(pluginDetails)
+    override fun onExtensionItemClicked(extensionDetails: ExtensionDetails) {
+        (parentFragment as SettingsFragment).goToExtensionSettings(extensionDetails)
     }
 
     /**
-     * Implements PluginListItemListener.onPluginEnabled which is called when the checkbox
-     * associated with the plugin list item is called
-     * @param pluginDetails instance of a plugin details that is sent to PluginSettingsFragment
+     * Implements ExtensionListItemListener.onExtensionEnabled which is called when the checkbox
+     * associated with the extension list item is called
+     * @param extensionDetails instance of an extension details that is sent to ExtensionSettingsFragment
      */
-    override fun onPluginEnabled(pluginDetails: PluginDetails) {
+    override fun onExtensionEnabled(extensionDetails: ExtensionDetails) {
         var status: String?
 
-        if (pluginDetails.isEnabled) {
-            pluginDetails.isEnabled = loadPlugin(pluginDetails.rootPath)
+        if (extensionDetails.isEnabled) {
+            extensionDetails.isEnabled = loadExtension(extensionDetails.rootPath)
             status =
-                if (pluginDetails.isEnabled) getString(R.string.load_sucess, pluginDetails.name)
+                if (extensionDetails.isEnabled) getString(R.string.load_success, extensionDetails.name)
                 else {
-                    mAdapter?.notifyItemChanged(pluginDetails)
-                    getString(R.string.unable_to_load, pluginDetails.name)
+                    mAdapter?.notifyItemChanged(extensionDetails)
+                    getString(R.string.unable_to_load, extensionDetails.name)
                 }
         } else {
-            unloadPlugin(pluginDetails.rootPath)
-            status = getString(R.string.unload_sucess, pluginDetails.name)
+            unloadExtension(extensionDetails.rootPath)
+            status = getString(R.string.unload_success, extensionDetails.name)
         }
         Toast.makeText(requireContext(), status, Toast.LENGTH_SHORT).show()
     }
@@ -119,26 +119,26 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener {
             if (data != null) {
                 val uri = data.data
                 if (uri != null) {
-                    installPluginFromUri(uri, false)
+                    installExtensionFromUri(uri, false)
                 }
             }
         }
     }
 
     @Throws(IOException::class)
-    private fun installPluginFile(pluginFile: File, force: Boolean): String {
-        val i = JamiService.installPlugin(pluginFile.absolutePath, force)
-        if (!pluginFile.delete()) {
-            Log.e(TAG, "Plugin Jpl file in the cache not freed")
+    private fun installExtensionFile(extensionFile: File, force: Boolean): String {
+        val i = JamiService.installPlugin(extensionFile.absolutePath, force)
+        if (!extensionFile.delete()) {
+            Log.e(TAG, "Extension Jpl file in the cache not freed.")
         }
         return when (i) {
-            0 -> pluginFile.name
-            100 -> throw IOException(getString(R.string.plugin_same_version_exception, pluginFile.name))
-            200 -> throw IOException(getString(R.string.plugin_recent_version_exception, pluginFile.name))
-            300 -> throw IOException(getString(R.string.plugin_invalid_signature, pluginFile.name))
-            400 -> throw IOException(getString(R.string.plugin_invalid_authority, pluginFile.name))
-            500 -> throw IOException(getString(R.string.plugin_invalid_format, pluginFile.name))
-            else -> throw IOException(getString(R.string.plugin_install_failure, pluginFile.name))
+            0 -> extensionFile.name
+            100 -> throw IOException(getString(R.string.extension_same_version_exception, extensionFile.name))
+            200 -> throw IOException(getString(R.string.extension_recent_version_exception, extensionFile.name))
+            300 -> throw IOException(getString(R.string.extension_invalid_signature, extensionFile.name))
+            400 -> throw IOException(getString(R.string.extension_invalid_authority, extensionFile.name))
+            500 -> throw IOException(getString(R.string.extension_invalid_format, extensionFile.name))
+            else -> throw IOException(getString(R.string.extension_install_failure, extensionFile.name))
         }
     }
 
@@ -154,30 +154,30 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener {
             progress.dismiss()
     }
 
-    private fun installPluginFromUri(uri: Uri, force: Boolean) {
+    private fun installExtensionFromUri(uri: Uri, force: Boolean) {
         showLoading(true)
         mCompositeDisposable.add(
             getCacheFile(requireContext(), uri)
                 .observeOn(AndroidSchedulers.mainThread())
-                .map { file: File -> installPluginFile(file, force) }
+                .map { file: File -> installExtensionFile(file, force) }
                 .subscribe({ filename: String ->
-                    val plugin = filename.split(".jpl".toRegex()).toTypedArray()
-                    val availablePlugins = getInstalledPlugins(requireContext())
-                    for (availablePlugin in availablePlugins) {
-                        if (availablePlugin.name == plugin[0]) {
-                            availablePlugin.isEnabled = true
-                            onPluginEnabled(availablePlugin)
+                    val extension = filename.split(".jpl".toRegex()).toTypedArray()
+                    val availableExtensions = getInstalledExtensions(requireContext())
+                    for (availableExtension in availableExtensions) {
+                        if (availableExtension.name == extension[0]) {
+                            availableExtension.isEnabled = true
+                            onExtensionEnabled(availableExtension)
                         }
                     }
-                    mAdapter!!.updatePluginsList(getInstalledPlugins(requireContext()))
+                    mAdapter!!.updateExtensionsList(getInstalledExtensions(requireContext()))
                     showLoading(false)
-                    Toast.makeText(requireContext(), getString(R.string.install_sucess, filename), Toast.LENGTH_LONG)
+                    Toast.makeText(requireContext(), getString(R.string.install_success, filename), Toast.LENGTH_LONG)
                         .show()
                 }) { e: Throwable ->
                     if (binding != null) {
-                        Log.e(TAG, "Error importing plugin", e)
+                        Log.e(TAG, "An error occurred while importing the extension.", e)
                         val sb = Snackbar.make(binding!!.listLayout, getString(R.string.install_error), Snackbar.LENGTH_LONG)
-                        sb.setAction(R.string.plugin_force_install) { v: View? -> installPluginFromUri(uri, true) }
+                        sb.setAction(R.string.extension_force_install) { v: View? -> installExtensionFromUri(uri, true) }
                         sb.show()
                     }
                     showLoading(false)
@@ -195,11 +195,11 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener {
     }
 
     companion object {
-        val TAG = PluginsListSettingsFragment::class.java.simpleName
+        val TAG = ExtensionsListSettingsFragment::class.java.simpleName
         private const val ARCHIVE_REQUEST_CODE = 42
 
-        fun newInstance(accountId: String?): PluginsListSettingsFragment {
-            val fragment = PluginsListSettingsFragment()
+        fun newInstance(accountId: String?): ExtensionsListSettingsFragment {
+            val fragment = ExtensionsListSettingsFragment()
             fragment.arguments = Bundle().apply { putString(AccountEditionFragment.ACCOUNT_ID_KEY, accountId) }
             return fragment
         }
diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginPathPreferenceFragment.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionPathPreferenceFragment.kt
similarity index 81%
rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginPathPreferenceFragment.kt
rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionPathPreferenceFragment.kt
index d38671b8d050a14aafc5f5668c83054310ad0124..4483b277541f871088faba5029fb8d2e17d47bc7 100644
--- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginPathPreferenceFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionPathPreferenceFragment.kt
@@ -14,7 +14,7 @@
  *  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.settings.pluginssettings
+package cx.ring.settings.extensionssettings
 
 import android.app.Activity
 import android.content.Intent
@@ -25,32 +25,32 @@ import android.view.View
 import android.view.ViewGroup
 import android.widget.Toast
 import androidx.fragment.app.Fragment
-import cx.ring.databinding.FragPluginsPathPreferenceBinding
+import cx.ring.databinding.FragExtensionsPathPreferenceBinding
 import cx.ring.interfaces.AppBarStateListener
-import cx.ring.settings.pluginssettings.PathListAdapter.PathListItemListener
+import cx.ring.settings.extensionssettings.PathListAdapter.PathListItemListener
 import cx.ring.utils.AndroidFileUtils
 import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
 import java.io.File
 
-class PluginPathPreferenceFragment : Fragment(), PathListItemListener {
+class ExtensionPathPreferenceFragment : Fragment(), PathListItemListener {
     private val pathList: MutableList<String> = ArrayList()
-    private lateinit var mPluginDetails: PluginDetails
+    private lateinit var mExtensionDetails: ExtensionDetails
     private lateinit var mCurrentKey: String
     private var mCurrentValue: String? = null
     private var subtitle: String = ""
     private var supportedMimeTypes = arrayOf("*/*")
-    private var binding: FragPluginsPathPreferenceBinding? = null
+    private var binding: FragExtensionsPathPreferenceBinding? = null
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         val arguments = requireArguments()
-        val details = PluginDetails(arguments.getString("name")!!, arguments.getString("rootPath")!!, arguments.getBoolean("enabled"))
-        mPluginDetails = details
+        val details = ExtensionDetails(arguments.getString("name")!!, arguments.getString("rootPath")!!, arguments.getBoolean("enabled"))
+        mExtensionDetails = details
         val key = arguments.getString("preferenceKey")!!
         mCurrentKey = key
-        val mPreferencesAttributes = details.pluginPreferences
+        val mPreferencesAttributes = details.extensionPreferences
         if (mPreferencesAttributes.isNotEmpty()) {
-            mCurrentValue = details.pluginPreferencesValues[key]
+            mCurrentValue = details.extensionPreferencesValues[key]
             setHasOptionsMenu(true)
             for (preferenceAttributes in mPreferencesAttributes) {
                 if (preferenceAttributes["key"] == key) {
@@ -79,12 +79,12 @@ class PluginPathPreferenceFragment : Fragment(), PathListItemListener {
     }
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
-        FragPluginsPathPreferenceBinding.inflate(inflater, container, false).apply {
+        FragExtensionsPathPreferenceBinding.inflate(inflater, container, false).apply {
             if (pathList.isNotEmpty())
-                pathPreferences.adapter = PathListAdapter(pathList, this@PluginPathPreferenceFragment)
+                pathPreferences.adapter = PathListAdapter(pathList, this@ExtensionPathPreferenceFragment)
             binding = this
-            pluginSettingSubtitle.text = subtitle
-            pluginsPathPreferenceFab.setOnClickListener {
+            extensionSettingSubtitle.text = subtitle
+            extensionsPathPreferenceFab.setOnClickListener {
                 val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
                     addCategory(Intent.CATEGORY_OPENABLE)
                     type = supportedMimeTypes[0]
@@ -115,7 +115,7 @@ class PluginPathPreferenceFragment : Fragment(), PathListItemListener {
         } else {
             binding.currentPathItemIcon.visibility = View.INVISIBLE
             binding.currentPathItemName.visibility = View.INVISIBLE
-            binding.pluginsPathPreferenceFab.performClick()
+            binding.extensionsPathPreferenceFab.performClick()
         }
 
         (parentFragment as? AppBarStateListener)?.onAppBarScrollTargetViewChanged(binding.pathPreferences)
@@ -133,7 +133,7 @@ class PluginPathPreferenceFragment : Fragment(), PathListItemListener {
     }
 
     override fun onResume() {
-//        (requireActivity() as HomeActivity).setToolbarTitle(R.string.menu_item_plugin_list)
+//        (requireActivity() as HomeActivity).setToolbarTitle(R.string.menu_item_extension_list)
         super.onResume()
     }
 
@@ -143,7 +143,7 @@ class PluginPathPreferenceFragment : Fragment(), PathListItemListener {
     }
 
     private fun setPreferencePath(path: String) {
-        if (mPluginDetails.setPluginPreference(mCurrentKey, path)) {
+        if (mExtensionDetails.setExtensionPreference(mCurrentKey, path)) {
             mCurrentValue = path
             val binding = binding ?: return
             if (path.isNotEmpty()) {
@@ -168,14 +168,14 @@ class PluginPathPreferenceFragment : Fragment(), PathListItemListener {
     }
 
     companion object {
-        val TAG = PluginPathPreferenceFragment::class.simpleName!!
+        val TAG = ExtensionPathPreferenceFragment::class.simpleName!!
         private const val PATH_REQUEST_CODE = 1
-        fun newInstance(pluginDetails: PluginDetails, preferenceKey: String?): PluginPathPreferenceFragment {
-            val ppf = PluginPathPreferenceFragment()
+        fun newInstance(extensionDetails: ExtensionDetails, preferenceKey: String?): ExtensionPathPreferenceFragment {
+            val ppf = ExtensionPathPreferenceFragment()
             ppf.arguments = Bundle().apply {
-                putString("name", pluginDetails.name)
-                putString("rootPath", pluginDetails.rootPath)
-                putBoolean("enabled", pluginDetails.isEnabled)
+                putString("name", extensionDetails.name)
+                putString("rootPath", extensionDetails.rootPath)
+                putBoolean("enabled", extensionDetails.isEnabled)
                 putString("preferenceKey", preferenceKey)
             }
             return ppf
diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginPreferencesDataStore.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionPreferencesDataStore.kt
similarity index 82%
rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginPreferencesDataStore.kt
rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionPreferencesDataStore.kt
index 26797f54932005d1af9d80986555eb0f306b18fe..cce9237270cc053fc951af6ee943186af9fd5761 100644
--- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginPreferencesDataStore.kt
+++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionPreferencesDataStore.kt
@@ -14,16 +14,16 @@
  *  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.settings.pluginssettings
+package cx.ring.settings.extensionssettings
 
 import androidx.preference.PreferenceDataStore
 import java.util.concurrent.locks.ReadWriteLock
 import java.util.concurrent.locks.ReentrantReadWriteLock
 
-class PluginPreferencesDataStore(private val mPluginDetails: PluginDetails) : PreferenceDataStore() {
+class ExtensionPreferencesDataStore(private val mExtensionDetails: ExtensionDetails) : PreferenceDataStore() {
     private val mPreferenceTypes: MutableMap<String, String> = HashMap()
 
-    private var preferencesValues: Map<String, String> = mPluginDetails.pluginPreferencesValues
+    private var preferencesValues: Map<String, String> = mExtensionDetails.extensionPreferencesValues
     private val lock: ReadWriteLock = ReentrantReadWriteLock()
 
     fun addToPreferenceTypes(preferenceModel: Map<String, String>) {
@@ -37,39 +37,39 @@ class PluginPreferencesDataStore(private val mPluginDetails: PluginDetails) : Pr
     }
 
     override fun putBoolean(key: String, value: Boolean) {
-        if (mPluginDetails.setPluginPreference(key, if (value) "1" else "0")) {
+        if (mExtensionDetails.setExtensionPreference(key, if (value) "1" else "0")) {
             notifyPreferencesValuesChange()
         }
     }
 
     override fun putString(key: String, value: String?) {
-        if (mPluginDetails.setPluginPreference(key, value ?: "")) {
+        if (mExtensionDetails.setExtensionPreference(key, value ?: "")) {
             notifyPreferencesValuesChange()
         }
     }
 
     override fun putStringSet(key: String, values: Set<String>?) {
         if (values != null) {
-            if (mPluginDetails.setPluginPreference(key, values.joinToString(","))) {
+            if (mExtensionDetails.setExtensionPreference(key, values.joinToString(","))) {
                 notifyPreferencesValuesChange()
             }
         }
     }
 
     override fun putInt(key: String, value: Int) {
-        if (mPluginDetails.setPluginPreference(key, value.toString())) {
+        if (mExtensionDetails.setExtensionPreference(key, value.toString())) {
             notifyPreferencesValuesChange()
         }
     }
 
     override fun putLong(key: String, value: Long) {
-        if (mPluginDetails.setPluginPreference(key, value.toString())) {
+        if (mExtensionDetails.setExtensionPreference(key, value.toString())) {
             notifyPreferencesValuesChange()
         }
     }
 
     override fun putFloat(key: String, value: Float) {
-        if (mPluginDetails.setPluginPreference(key, value.toString())) {
+        if (mExtensionDetails.setExtensionPreference(key, value.toString())) {
             notifyPreferencesValuesChange()
         }
     }
@@ -111,7 +111,7 @@ class PluginPreferencesDataStore(private val mPluginDetails: PluginDetails) : Pr
         val writeLock = lock.writeLock()
         preferencesValues = try {
             writeLock.lock()
-            mPluginDetails.pluginPreferencesValues
+            mExtensionDetails.extensionPreferencesValues
         } finally {
             writeLock.unlock()
         }
diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginSettingsFragment.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionSettingsFragment.kt
similarity index 86%
rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginSettingsFragment.kt
rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionSettingsFragment.kt
index a0da329f9f34dec6af3e9542a5d94caeb5ab80bf..ed418b963749282d845155b1c54f83b6b94d40a0 100644
--- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginSettingsFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionSettingsFragment.kt
@@ -14,7 +14,7 @@
  *  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.settings.pluginssettings
+package cx.ring.settings.extensionssettings
 
 import android.content.DialogInterface
 import android.os.Bundle
@@ -24,15 +24,15 @@ import androidx.preference.*
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import cx.ring.R
 import cx.ring.client.HomeActivity
-import cx.ring.plugins.PluginPreferences
-import cx.ring.plugins.PluginUtils.stringListToListString
+import cx.ring.extensions.ExtensionPreferences
+import cx.ring.extensions.ExtensionUtils.stringListToListString
 import cx.ring.settings.SettingsFragment
 import net.jami.daemon.JamiService
 
-class PluginSettingsFragment : PreferenceFragmentCompat() {
+class ExtensionSettingsFragment : PreferenceFragmentCompat() {
     private var mPreferencesAttributes: List<Map<String, String>>? = null
-    private var pluginDetails: PluginDetails? = null
-    private var ppds: PluginPreferencesDataStore? = null
+    private var extensionDetails: ExtensionDetails? = null
+    private var ppds: ExtensionPreferencesDataStore? = null
     private var accountId: String? = ""
 
     override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {}
@@ -40,11 +40,11 @@ class PluginSettingsFragment : PreferenceFragmentCompat() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         val arguments = requireArguments()
-        val details = PluginDetails(arguments.getString("name")!!, arguments.getString("rootPath")!!, arguments.getBoolean("enabled"), null, accountId)
-        mPreferencesAttributes = details.pluginPreferences
+        val details = ExtensionDetails(arguments.getString("name")!!, arguments.getString("rootPath")!!, arguments.getBoolean("enabled"), null, accountId)
+        mPreferencesAttributes = details.extensionPreferences
         val preferenceManager = preferenceManager
-        ppds = PluginPreferencesDataStore(details)
-        pluginDetails = details
+        ppds = ExtensionPreferencesDataStore(details)
+        extensionDetails = details
         preferenceManager.preferenceDataStore = ppds
     }
 
@@ -92,11 +92,11 @@ class PluginSettingsFragment : PreferenceFragmentCompat() {
     }
 
     private fun createHeadPreference(): Preference {
-        val preference = PluginPreferences(requireContext(), pluginDetails, accountId)
+        val preference = ExtensionPreferences(requireContext(), extensionDetails, accountId)
         val message = run {
-            var value = R.string.plugin_reset_preferences_ask
+            var value = R.string.extension_reset_preferences_ask
             if (accountId!!.isNotEmpty()) {
-                value = R.string.plugin_reset_account_preferences_ask
+                value = R.string.extension_reset_account_preferences_ask
             }
             value
         }
@@ -105,7 +105,7 @@ class PluginSettingsFragment : PreferenceFragmentCompat() {
                 .setTitle(preference.title)
                 .setMessage(message)
                 .setPositiveButton(android.R.string.ok) { dialog: DialogInterface?, id: Int ->
-                    JamiService.resetPluginPreferencesValues(pluginDetails!!.rootPath, pluginDetails!!.accountId)
+                    JamiService.resetPluginPreferencesValues(extensionDetails!!.rootPath, extensionDetails!!.accountId)
                     parentFragmentManager.popBackStack()
                 }
                 .setNegativeButton(android.R.string.cancel) { dialog: DialogInterface?, whichButton: Int -> }
@@ -114,22 +114,22 @@ class PluginSettingsFragment : PreferenceFragmentCompat() {
         preference.setInstallClickListener {
             MaterialAlertDialogBuilder(requireContext())
                 .setMessage(R.string.account_delete_dialog_message)
-                .setTitle(R.string.plugin_uninstall_title)
+                .setTitle(R.string.extension_uninstall_title)
                 .setPositiveButton(android.R.string.ok) { dialog: DialogInterface?, whichButton: Int ->
-                    pluginDetails!!.isEnabled = false
-                    JamiService.uninstallPlugin(pluginDetails!!.rootPath)
+                    extensionDetails!!.isEnabled = false
+                    JamiService.uninstallPlugin(extensionDetails!!.rootPath)
                     parentFragmentManager.popBackStack()
                 }
                 .setNegativeButton(android.R.string.cancel, null)
                 .show()
         }
-        preference.setPluginSettingsRedirect {
+        preference.setExtensionSettingsRedirect {
             if (accountId!!.isEmpty()) {
                 val act = requireActivity() as HomeActivity
                 val acc = act.mAccountService.currentAccount!!.accountId
-                (parentFragment as SettingsFragment).goToPluginSettings(PluginDetails(pluginDetails!!.name, pluginDetails!!.rootPath, pluginDetails!!.isEnabled, null, acc))
+                (parentFragment as SettingsFragment).goToExtensionSettings(ExtensionDetails(extensionDetails!!.name, extensionDetails!!.rootPath, extensionDetails!!.isEnabled, null, acc))
             } else {
-                (parentFragment as SettingsFragment).goToPluginSettings(PluginDetails(pluginDetails!!.name, pluginDetails!!.rootPath, pluginDetails!!.isEnabled))
+                (parentFragment as SettingsFragment).goToExtensionSettings(ExtensionDetails(extensionDetails!!.name, extensionDetails!!.rootPath, extensionDetails!!.isEnabled))
             }
         }
         return preference
@@ -171,7 +171,7 @@ class PluginSettingsFragment : PreferenceFragmentCompat() {
     private fun createPathPreference(preferenceModel: Map<String, String>): Preference {
         val preference = Preference(requireContext())
         preference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
-            (parentFragment as SettingsFragment).goToPluginPathPreference(pluginDetails!!, preferenceModel["key"]!!)
+            (parentFragment as SettingsFragment).goToExtensionPathPreference(extensionDetails!!, preferenceModel["key"]!!)
             false
         }
         setPreferenceAttributes(preference, preferenceModel)
@@ -326,14 +326,14 @@ class PluginSettingsFragment : PreferenceFragmentCompat() {
     }
 
     companion object {
-        val TAG = PluginSettingsFragment::class.simpleName!!
-        fun newInstance(pluginDetails: PluginDetails): PluginSettingsFragment {
-            val psf = PluginSettingsFragment()
+        val TAG = ExtensionSettingsFragment::class.simpleName!!
+        fun newInstance(extensionDetails: ExtensionDetails): ExtensionSettingsFragment {
+            val psf = ExtensionSettingsFragment()
             psf.arguments = Bundle().apply {
-                putString("name", pluginDetails.name)
-                putString("rootPath", pluginDetails.rootPath)
-                putBoolean("enabled", pluginDetails.isEnabled)
-                psf.accountId = pluginDetails.accountId
+                putString("name", extensionDetails.name)
+                putString("rootPath", extensionDetails.rootPath)
+                putBoolean("enabled", extensionDetails.isEnabled)
+                psf.accountId = extensionDetails.accountId
             }
             return psf
         }
diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PathListAdapter.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/PathListAdapter.kt
similarity index 95%
rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PathListAdapter.kt
rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/PathListAdapter.kt
index 9ad33f6528565714916e9225fd26c3a4b2f596d3..159021b8861397a00f185745f1b39a5005318cef 100644
--- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PathListAdapter.kt
+++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/PathListAdapter.kt
@@ -14,7 +14,7 @@
  *  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.settings.pluginssettings
+package cx.ring.settings.extensionssettings
 
 import android.graphics.drawable.Drawable
 import android.view.LayoutInflater
@@ -45,7 +45,7 @@ class PathListAdapter internal constructor(
         return mList.size
     }
 
-    fun updatePluginsList(listPaths: List<String>) {
+    fun updateExtensionsList(listPaths: List<String>) {
         mList = listPaths
         notifyDataSetChanged()
     }
@@ -57,7 +57,7 @@ class PathListAdapter internal constructor(
 
         // update the viewHolder view
         fun update(s: String) {
-            // Set the plugin icon
+            // Set the extension icon
             val file = File(s)
             if (file.exists()) {
                 if (AndroidFileUtils.isImage(s)) {
diff --git a/jami-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.kt b/jami-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.kt
index 35872ea9b59c0006ef2ab6c9dc89155b7312cbb2..ec644b1f22176fb2e273d2b4f7975f8c7136b030 100644
--- a/jami-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.kt
@@ -286,7 +286,7 @@ class TVCallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView
         isMicrophoneMuted: Boolean,
         displayFlip: Boolean,
         canDial: Boolean,
-        showPluginBtn: Boolean,
+        showExtensionBtn: Boolean,
         onGoingCall: Boolean,
         hasActiveVideo: Boolean,
         hasActiveScreenShare: Boolean) {
@@ -431,7 +431,7 @@ class TVCallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView
         startActivity(Intent(Intent.ACTION_VIEW, ConversationPath.toUri(accountId, contact.uri), requireContext(), ContactDetailsActivity::class.java))
     }
 
-    override fun displayPluginsButton(): Boolean {
+    override fun displayExtensionsButton(): Boolean {
         return false
     }
 
diff --git a/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.kt b/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.kt
index 078f6c2703dc7bf10663ba7917f2593ad6e84bf3..cd146a9b2b7bbe650b59112712e322cd541b2142 100644
--- a/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.kt
+++ b/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.kt
@@ -858,7 +858,7 @@ class TvConversationAdapter(
                 ContactEvent.Event.ADDED -> R.string.hist_contact_added
                 ContactEvent.Event.INVITED -> R.string.hist_contact_invited
                 ContactEvent.Event.REMOVED -> R.string.hist_contact_left
-                ContactEvent.Event.BANNED -> R.string.hist_contact_banned
+                ContactEvent.Event.BANNED -> R.string.hist_contact_blocked
                 ContactEvent.Event.INCOMING_REQUEST -> R.string.hist_invitation_received
                 else -> R.string.hist_contact_added
             }
diff --git a/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.kt b/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.kt
index 2b9be164e3588e2e9370628e575be4f910e42940..bf36aaa53faa02651dc9b62304f2107911212c65 100644
--- a/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.kt
@@ -289,7 +289,7 @@ class TvConversationFragment : BaseSupportFragment<ConversationPresenter, Conver
                         startActivity(intent)
                     }
                 } catch (e: Exception) {
-                    Log.e(TAG, "Error starting activity", e)
+                    Log.e(TAG, "An error occurred starting the activity.", e)
                 }
             }
         }
@@ -597,7 +597,7 @@ class TvConversationFragment : BaseSupportFragment<ConversationPresenter, Conver
     override fun startShareLocation(accountId: String, conversationId: String) {}
     override fun showMap(accountId: String, contactId: String, open: Boolean) {}
     override fun hideMap() {}
-    override fun showPluginListHandlers(accountId: String, contactId: String) {}
+    override fun showExtensionListHandlers(accountId: String, contactId: String) {}
     override fun hideErrorPanel() {}
     override fun displayNetworkErrorPanel() {}
     override fun displayAccountOfflineErrorPanel() {}
@@ -649,7 +649,7 @@ class TvConversationFragment : BaseSupportFragment<ConversationPresenter, Conver
     override fun switchToBannedView() {
         binding?.apply {
             conversationActionGroup.isVisible = false
-            conversationActionMessage.text = getString(R.string.conversation_contact_banned, "")
+            conversationActionMessage.text = getString(R.string.conversation_contact_blocked, "")
             conversationActionMessage.isVisible = true
         }
     }
diff --git a/jami-android/app/src/main/java/cx/ring/viewholders/PluginSettingViewHolder.kt b/jami-android/app/src/main/java/cx/ring/viewholders/ExtensionSettingViewHolder.kt
similarity index 53%
rename from jami-android/app/src/main/java/cx/ring/viewholders/PluginSettingViewHolder.kt
rename to jami-android/app/src/main/java/cx/ring/viewholders/ExtensionSettingViewHolder.kt
index d42a8a4267694f307a65c5c7d7661b704bdae2b0..8cb8877e6b2584f77a9723f5316641c9b2bee4be 100644
--- a/jami-android/app/src/main/java/cx/ring/viewholders/PluginSettingViewHolder.kt
+++ b/jami-android/app/src/main/java/cx/ring/viewholders/ExtensionSettingViewHolder.kt
@@ -22,43 +22,43 @@ import android.widget.TextView
 import androidx.recyclerview.widget.RecyclerView
 import com.google.android.material.materialswitch.MaterialSwitch
 import cx.ring.R
-import cx.ring.settings.pluginssettings.PluginDetails
-import cx.ring.settings.pluginssettings.PluginsListAdapter.PluginListItemListener
+import cx.ring.settings.extensionssettings.ExtensionDetails
+import cx.ring.settings.extensionssettings.ExtensionsListAdapter.ExtensionListItemListener
 
-class PluginSettingViewHolder(itemView: View, listener: PluginListItemListener) : RecyclerView.ViewHolder(itemView) {
-    private val pluginIcon: ImageView = itemView.findViewById(R.id.plugin_item_icon)
-    private val pluginNameTextView: TextView = itemView.findViewById(R.id.plugin_item_name)
-    private val pluginItemEnableCheckbox: MaterialSwitch = itemView.findViewById(R.id.plugin_item_enable_checkbox)
-    private var details: PluginDetails? = null
+class ExtensionSettingViewHolder(itemView: View, listener: ExtensionListItemListener) : RecyclerView.ViewHolder(itemView) {
+    private val extensionIcon: ImageView = itemView.findViewById(R.id.extension_item_icon)
+    private val extensionNameTextView: TextView = itemView.findViewById(R.id.extension_item_name)
+    private val extensionItemEnableCheckbox: MaterialSwitch = itemView.findViewById(R.id.extension_item_enable_checkbox)
+    private var details: ExtensionDetails? = null
 
-    fun setDetails(details: PluginDetails) {
+    fun setDetails(details: ExtensionDetails) {
         this.details = details
         update(details)
     }
 
     // update the viewHolder view
-    fun update(details: PluginDetails) {
-        pluginNameTextView.text = details.name
+    fun update(details: ExtensionDetails) {
+        extensionNameTextView.text = details.name
         if (details.accountId!!.isEmpty())
-            pluginItemEnableCheckbox.isChecked = details.isEnabled
+            extensionItemEnableCheckbox.isChecked = details.isEnabled
         else
-            pluginItemEnableCheckbox.visibility = View.GONE
+            extensionItemEnableCheckbox.visibility = View.GONE
 
-        // Set the plugin icon
+        // Set the extension icon
         val icon = details.icon
         if (icon != null) {
-            pluginIcon.setImageDrawable(icon)
+            extensionIcon.setImageDrawable(icon)
         }
     }
 
     init {
         itemView.setOnClickListener {
-            details?.let { details -> listener.onPluginItemClicked(details) }
+            details?.let { details -> listener.onExtensionItemClicked(details) }
         }
-        pluginItemEnableCheckbox.setOnClickListener {
+        extensionItemEnableCheckbox.setOnClickListener {
             details?.let { details ->
                 details.isEnabled = !details.isEnabled
-                listener.onPluginEnabled(details)
+                listener.onExtensionEnabled(details)
             }
         }
     }
diff --git a/jami-android/app/src/main/java/cx/ring/viewholders/PluginViewHolder.kt b/jami-android/app/src/main/java/cx/ring/viewholders/ExtensionViewHolder.kt
similarity index 53%
rename from jami-android/app/src/main/java/cx/ring/viewholders/PluginViewHolder.kt
rename to jami-android/app/src/main/java/cx/ring/viewholders/ExtensionViewHolder.kt
index ec007df2394531c3bf9eb501a7a806bdfb444c9c..2708af4209ce112dabbef030e52abb7085cd5b4b 100644
--- a/jami-android/app/src/main/java/cx/ring/viewholders/PluginViewHolder.kt
+++ b/jami-android/app/src/main/java/cx/ring/viewholders/ExtensionViewHolder.kt
@@ -22,39 +22,39 @@ import android.widget.TextView
 import androidx.recyclerview.widget.RecyclerView
 import com.google.android.material.materialswitch.MaterialSwitch
 import cx.ring.R
-import cx.ring.settings.pluginssettings.PluginDetails
-import cx.ring.adapters.PluginsAdapter.PluginListItemListener
+import cx.ring.settings.extensionssettings.ExtensionDetails
+import cx.ring.adapters.ExtensionsAdapter.ExtensionListItemListener
 
-class PluginViewHolder(itemView: View, listener: PluginListItemListener) : RecyclerView.ViewHolder(itemView) {
-    private val pluginIcon: ImageView = itemView.findViewById(R.id.plugin_item_icon)
-    private val pluginNameTextView: TextView = itemView.findViewById(R.id.plugin_item_name)
-    private val pluginItemEnableCheckbox: MaterialSwitch = itemView.findViewById(R.id.plugin_item_enable_checkbox)
-    private var details: PluginDetails? = null
+class ExtensionViewHolder(itemView: View, listener: ExtensionListItemListener) : RecyclerView.ViewHolder(itemView) {
+    private val extensionIcon: ImageView = itemView.findViewById(R.id.extension_item_icon)
+    private val extensionNameTextView: TextView = itemView.findViewById(R.id.extension_item_name)
+    private val extensionItemEnableCheckbox: MaterialSwitch = itemView.findViewById(R.id.extension_item_enable_checkbox)
+    private var details: ExtensionDetails? = null
 
-    fun setDetails(details: PluginDetails) {
+    fun setDetails(details: ExtensionDetails) {
         this.details = details
         update(details)
     }
 
     // update the viewHolder view
-    fun update(details: PluginDetails) {
-        pluginNameTextView.text = details.name
-        pluginItemEnableCheckbox.isChecked = details.isRunning
-        // Set the plugin icon
+    fun update(details: ExtensionDetails) {
+        extensionNameTextView.text = details.name
+        extensionItemEnableCheckbox.isChecked = details.isRunning
+        // Set the extension icon
         val icon = details.icon
         if (icon != null) {
-            pluginIcon.setImageDrawable(icon)
+            extensionIcon.setImageDrawable(icon)
         }
     }
 
     init {
         itemView.setOnClickListener {
-            details?.let { details -> listener.onPluginItemClicked(details) }
+            details?.let { details -> listener.onExtensionItemClicked(details) }
         }
 
-        pluginItemEnableCheckbox.setOnClickListener {
+        extensionItemEnableCheckbox.setOnClickListener {
             details?.let { details ->
-                listener.onPluginEnabled(details)
+                listener.onExtensionEnabled(details)
             }
         }
     }
diff --git a/jami-android/app/src/main/res/drawable/ic_plugin.xml b/jami-android/app/src/main/res/drawable/ic_extension.xml
similarity index 100%
rename from jami-android/app/src/main/res/drawable/ic_plugin.xml
rename to jami-android/app/src/main/res/drawable/ic_extension.xml
diff --git a/jami-android/app/src/main/res/layout/activity_contact_details.xml b/jami-android/app/src/main/res/layout/activity_contact_details.xml
index 61cb0f874e88c5257170ced0c8adc056b893b6ee..33fa051f250352aa9a95497d4669ca0a41a11922 100644
--- a/jami-android/app/src/main/res/layout/activity_contact_details.xml
+++ b/jami-android/app/src/main/res/layout/activity_contact_details.xml
@@ -85,17 +85,17 @@
                 <com.google.android.material.tabs.TabItem
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:text="@string/tab_about"/>
+                    android:text="@string/tab_members"/>
 
                 <com.google.android.material.tabs.TabItem
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:text="@string/tab_members"/>
+                    android:text="@string/tab_files"/>
 
                 <com.google.android.material.tabs.TabItem
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:text="@string/tab_documetn"/>
+                    android:text="@string/tab_settings"/>
 
             </com.google.android.material.tabs.TabLayout>
 
diff --git a/jami-android/app/src/main/res/layout/frag_call.xml b/jami-android/app/src/main/res/layout/frag_call.xml
index 3a1e3a5f32efd20db31a7e385c8d74e2d77d9723..f1de8a8224c750a57c87424582c61cc1e226518d 100644
--- a/jami-android/app/src/main/res/layout/frag_call.xml
+++ b/jami-android/app/src/main/res/layout/frag_call.xml
@@ -37,7 +37,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
         android:layout_height="match_parent">
 
         <androidx.cardview.widget.CardView
-            android:id="@+id/plugin_preview_container"
+            android:id="@+id/extension_preview_container"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignParentStart="true"
@@ -52,13 +52,13 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
             tools:visibility="visible">
 
             <cx.ring.views.AutoFitSurfaceView
-                android:id="@+id/plugin_preview_surface"
+                android:id="@+id/extension_preview_surface"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:visibility="visible" />
 
             <ImageView
-                android:id="@+id/plugin_preview_handle"
+                android:id="@+id/extension_preview_handle"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="right|center_vertical"
@@ -703,9 +703,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
                             android:textSize="11sp" />
                     </LinearLayout>
 
-                    <!-- Plugins list button -->
+                    <!-- Extensions list button -->
                     <LinearLayout
-                        android:id="@+id/plugins_btn_container"
+                        android:id="@+id/extensions_btn_container"
                         android:layout_width="0dp"
                         android:layout_height="wrap_content"
                         android:layout_rowWeight="1"
@@ -714,7 +714,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
                         android:padding="5dp">
 
                         <cx.ring.views.CheckableImageButton
-                            android:id="@+id/call_plugins_btn"
+                            android:id="@+id/call_extensions_btn"
                             android:layout_width="wrap_content"
                             android:layout_height="wrap_content"
                             android:layout_gravity="center"
@@ -724,7 +724,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
                             app:tint="@color/white" />
 
                         <TextView
-                            android:id="@+id/textView_call_plugins_btn"
+                            android:id="@+id/textView_call_extensions_btn"
                             android:layout_width="match_parent"
                             android:layout_height="wrap_content"
                             android:layout_gravity="center"
@@ -732,7 +732,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
                             android:ellipsize="end"
                             android:scrollHorizontally="false"
                             android:singleLine="true"
-                            android:text="@string/bottomSheet_plugins_btn"
+                            android:text="@string/bottomSheet_extensions_btn"
                             android:textAlignment="center"
                             android:textColor="@color/white"
                             android:textSize="11sp" />
@@ -757,7 +757,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
                 <!-- Recycler view for participants in call -->
 
                 <androidx.recyclerview.widget.RecyclerView
-                    android:id="@+id/pluginslist_container"
+                    android:id="@+id/extensions_list_container"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
                     android:orientation="vertical"
@@ -767,7 +767,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toBottomOf="@id/call_parameters_grid"
                     tools:itemCount="2"
-                    tools:listitem="@layout/frag_plugins_list_item"
+                    tools:listitem="@layout/frag_extensions_list_item"
                     tools:visibility="visible" />
 
 
diff --git a/jami-android/app/src/main/res/layout/frag_conversation.xml b/jami-android/app/src/main/res/layout/frag_conversation.xml
index 62f305b6c5651f6305dd7b6f90666530d21272ee..063788836d1026b738dd15b1b30b72a3182b545a 100644
--- a/jami-android/app/src/main/res/layout/frag_conversation.xml
+++ b/jami-android/app/src/main/res/layout/frag_conversation.xml
@@ -208,7 +208,7 @@
                 tools:background="@color/light_green_400" />
 
             <RelativeLayout
-                android:id="@+id/pluginListHandlers"
+                android:id="@+id/extensionListHandlers"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:clickable="false"
diff --git a/jami-android/app/src/main/res/layout/frag_plugin_handlers_list.xml b/jami-android/app/src/main/res/layout/frag_extension_handlers_list.xml
similarity index 77%
rename from jami-android/app/src/main/res/layout/frag_plugin_handlers_list.xml
rename to jami-android/app/src/main/res/layout/frag_extension_handlers_list.xml
index 869b83fb916c0c90a971a91239857eda6b603bf3..116a795031d33a77b00dc1d908e12be59d3c043c 100644
--- a/jami-android/app/src/main/res/layout/frag_plugin_handlers_list.xml
+++ b/jami-android/app/src/main/res/layout/frag_extension_handlers_list.xml
@@ -5,23 +5,23 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:animateLayoutChanges="true"
-    tools:context=".fragments.PluginHandlersListFragment">
+    tools:context=".fragments.ExtensionHandlersListFragment">
 
     <com.google.android.material.appbar.MaterialToolbar
-        android:id="@+id/chat_plugins_toolbar"
+        android:id="@+id/chat_extensions_toolbar"
         style="@style/Widget.Material3.Toolbar.Surface"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:elevation="4dp"
         app:navigationIcon="@drawable/baseline_close_24"
-        app:title="@string/chat_plugins"/>
+        app:title="@string/chat_extensions"/>
 
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/handler_list"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_below="@+id/chat_plugins_toolbar"
+        android:layout_below="@+id/chat_extensions_toolbar"
         android:orientation="vertical"
         app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
-        tools:listitem="@layout/frag_plugins_list_item" />
+        tools:listitem="@layout/frag_extensions_list_item" />
 </RelativeLayout>
\ No newline at end of file
diff --git a/jami-android/app/src/main/res/layout/frag_plugin_settings.xml b/jami-android/app/src/main/res/layout/frag_extension_settings.xml
similarity index 77%
rename from jami-android/app/src/main/res/layout/frag_plugin_settings.xml
rename to jami-android/app/src/main/res/layout/frag_extension_settings.xml
index 9d4f2bebdc3b7c5f9284a37127256d0040a0e5ad..33210a93a50920548e72db6a876a69ec04ac9d32 100644
--- a/jami-android/app/src/main/res/layout/frag_plugin_settings.xml
+++ b/jami-android/app/src/main/res/layout/frag_extension_settings.xml
@@ -6,7 +6,7 @@
     android:layout_height="wrap_content">
 
     <ImageView
-        android:id="@+id/plugin_setting_icon"
+        android:id="@+id/extension_setting_icon"
         android:layout_marginTop="32dp"
         android:layout_width="80dp"
         android:layout_height="80dp"
@@ -14,35 +14,35 @@
         app:srcCompat="@drawable/baseline_group_24" />
 
     <TextView
-        android:id="@+id/plugin_setting_title"
+        android:id="@+id/extension_setting_title"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="16dp"
-        android:layout_below="@+id/plugin_setting_icon"
+        android:layout_below="@+id/extension_setting_icon"
         android:singleLine="true"
-        android:text="@string/video_plugins"
+        android:text="@string/video_extensions"
         android:textSize="20sp"
         android:layout_centerHorizontal="true"
         android:textAppearance="?android:attr/textAppearanceLarge" />
 
     <View
-        android:id="@+id/plugin_setting_divider"
-        android:layout_below="@+id/plugin_setting_title"
+        android:id="@+id/extension_setting_divider"
+        android:layout_below="@+id/extension_setting_title"
         android:layout_marginTop="16dp"
         android:layout_width="match_parent"
         android:layout_height="1dp"
         android:background="@android:color/darker_gray"/>
 
     <LinearLayout
-        android:id="@+id/plugin_setting_buttons"
+        android:id="@+id/extension_setting_buttons"
         android:layout_width="match_parent"
         android:layout_height="48dp"
-        android:layout_below="@+id/plugin_setting_divider"
+        android:layout_below="@+id/extension_setting_divider"
         android:layout_marginTop="16dp"
         android:weightSum="2">
 
         <RelativeLayout
-            android:id="@+id/plugin_setting_reset"
+            android:id="@+id/extension_setting_reset"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_weight="1"
@@ -50,14 +50,14 @@
             android:focusable="true">
 
             <ImageView
-                android:id="@+id/plugin_setting_reset_image"
+                android:id="@+id/extension_setting_reset_image"
                 android:layout_width="32dp"
                 android:layout_height="32dp"
                 android:src="@drawable/round_settings_backup_restore_24"
                 android:layout_centerHorizontal="true"/>
 
             <TextView
-                android:layout_below="@+id/plugin_setting_reset_image"
+                android:layout_below="@+id/extension_setting_reset_image"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="@string/reset"
@@ -65,7 +65,7 @@
 
         </RelativeLayout>
         <RelativeLayout
-            android:id="@+id/plugin_setting_install"
+            android:id="@+id/extension_setting_install"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_weight="1"
@@ -73,14 +73,14 @@
             android:focusable="true">
 
             <ImageView
-                android:id="@+id/plugin_setting_install_image"
+                android:id="@+id/extension_setting_install_image"
                 android:layout_width="32dp"
                 android:layout_height="32dp"
                 android:src="@drawable/baseline_delete_24"
                 android:layout_centerHorizontal="true"/>
 
             <TextView
-                android:layout_below="@+id/plugin_setting_install_image"
+                android:layout_below="@+id/extension_setting_install_image"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="@string/uninstall"
@@ -92,14 +92,14 @@
 
     <View
         android:id="@+id/divisor"
-        android:layout_below="@+id/plugin_setting_buttons"
+        android:layout_below="@+id/extension_setting_buttons"
         android:layout_marginTop="16dp"
         android:layout_width="match_parent"
         android:layout_height="1dp"
         android:background="@android:color/darker_gray"/>
 
     <com.google.android.material.button.MaterialButton
-        android:id="@+id/plugin_account_setting_redirect"
+        android:id="@+id/extension_account_setting_redirect"
         style="@style/ButtonColored"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
@@ -109,6 +109,6 @@
         android:clickable="true"
         android:drawableTint="@color/colorOnPrimary"
         android:focusable="true"
-        android:text="@string/open_account_plugin_settings" />
+        android:text="@string/open_account_extension_settings" />
 
 </android.widget.RelativeLayout>
\ No newline at end of file
diff --git a/jami-android/app/src/main/res/layout/frag_plugins_list_item.xml b/jami-android/app/src/main/res/layout/frag_extensions_list_item.xml
similarity index 94%
rename from jami-android/app/src/main/res/layout/frag_plugins_list_item.xml
rename to jami-android/app/src/main/res/layout/frag_extensions_list_item.xml
index 8faeee5810e16223b39fe1fe0a4180331c157c61..77923ca70f466b459767802e18bc262c40e4e677 100644
--- a/jami-android/app/src/main/res/layout/frag_plugins_list_item.xml
+++ b/jami-android/app/src/main/res/layout/frag_extensions_list_item.xml
@@ -28,7 +28,7 @@ along with this program; if not, write to the Free Software
     android:padding="10dp">
 
     <ImageView
-        android:id="@+id/plugin_item_icon"
+        android:id="@+id/extension_item_icon"
         android:layout_width="56dp"
         android:layout_height="56dp"
         android:layout_weight="0"
@@ -41,7 +41,7 @@ along with this program; if not, write to the Free Software
         tools:src="@tools:sample/avatars"/>
 
     <TextView
-        android:id="@+id/plugin_item_name"
+        android:id="@+id/extension_item_name"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:layout_margin="@dimen/padding_large"
@@ -56,7 +56,7 @@ along with this program; if not, write to the Free Software
         tools:text="@tools:sample/full_names" />
 
     <com.google.android.material.materialswitch.MaterialSwitch
-        android:id="@+id/plugin_item_enable_checkbox"
+        android:id="@+id/extension_item_enable_checkbox"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:backgroundTint="@color/colorPrimary"
diff --git a/jami-android/app/src/main/res/layout/frag_plugins_list_settings.xml b/jami-android/app/src/main/res/layout/frag_extensions_list_settings.xml
similarity index 84%
rename from jami-android/app/src/main/res/layout/frag_plugins_list_settings.xml
rename to jami-android/app/src/main/res/layout/frag_extensions_list_settings.xml
index fa0d3efc86286d0bb7b00de92557157d59c5c248..57a9f2d34e2901c06bbc76ea62e12cf4b39965ad 100644
--- a/jami-android/app/src/main/res/layout/frag_plugins_list_settings.xml
+++ b/jami-android/app/src/main/res/layout/frag_extensions_list_settings.xml
@@ -14,20 +14,20 @@
         android:layout_alignParentBottom="true" >
 
         <androidx.recyclerview.widget.RecyclerView
-            android:id="@+id/plugins_list"
+            android:id="@+id/extensions_list"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:orientation="vertical"
             app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
-            tools:listitem="@layout/frag_plugins_list_item"/>
+            tools:listitem="@layout/frag_extensions_list_item"/>
 
         <com.google.android.material.floatingactionbutton.FloatingActionButton
-            android:id="@+id/plugins_list_settings_fab"
+            android:id="@+id/extensions_list_settings_fab"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="end|bottom"
             android:layout_margin="@dimen/fab_margin"
-            android:contentDescription="@string/fab_plugins_add"
+            android:contentDescription="@string/fab_extensions_add"
             android:src="@drawable/baseline_add_24"
             android:visibility="gone"/>
 
diff --git a/jami-android/app/src/main/res/layout/frag_plugins_path_preference.xml b/jami-android/app/src/main/res/layout/frag_extensions_path_preference.xml
similarity index 86%
rename from jami-android/app/src/main/res/layout/frag_plugins_path_preference.xml
rename to jami-android/app/src/main/res/layout/frag_extensions_path_preference.xml
index b98027b7163d51cfd4901923225f1693942b5952..eecb2cdfe2a9cbf09d71a8f1406334b738def878 100644
--- a/jami-android/app/src/main/res/layout/frag_plugins_path_preference.xml
+++ b/jami-android/app/src/main/res/layout/frag_extensions_path_preference.xml
@@ -10,10 +10,10 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent">
         <TextView
-            android:id="@+id/plugin_setting_subtitle"
+            android:id="@+id/extension_setting_subtitle"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            tools:text="Plugin Name + Preference Name"
+            tools:text="Extension Name + Preference Name"
             android:layout_marginHorizontal="16dp"
             android:textSize="18sp"/>
 
@@ -24,7 +24,7 @@
             android:layout_above="@+id/current_path_item_name"
             android:orientation="vertical"
             android:gravity="center"
-            android:layout_below="@+id/plugin_setting_subtitle"
+            android:layout_below="@+id/extension_setting_subtitle"
             app:srcCompat="@drawable/baseline_insert_drive_file_24">
 
         </ImageView>
@@ -39,7 +39,7 @@
             android:textSize="16sp" />
 
         <androidx.recyclerview.widget.RecyclerView
-            android:layout_toEndOf="@+id/plugins_path_preference_fab"
+            android:layout_toEndOf="@+id/extensions_path_preference_fab"
             android:layout_alignParentBottom="true"
             android:id="@+id/path_preferences"
             android:layout_width="fill_parent"
@@ -49,7 +49,7 @@
             tools:listitem="@layout/frag_path_list_item"/>
 
         <com.google.android.material.floatingactionbutton.FloatingActionButton
-            android:id="@+id/plugins_path_preference_fab"
+            android:id="@+id/extensions_path_preference_fab"
             android:layout_width="55dp"
             android:layout_height="55dp"
             android:gravity="center"
@@ -58,7 +58,7 @@
             android:layout_alignBaseline="@+id/path_preferences"
             android:src="@drawable/baseline_add_24"
             android:layout_margin="16dp"
-            android:contentDescription="@string/fab_plugins_add" />
+            android:contentDescription="@string/fab_extensions_add" />
     </RelativeLayout>
 
 </androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/jami-android/app/src/main/res/layout/frag_settings.xml b/jami-android/app/src/main/res/layout/frag_settings.xml
index 9ad861df5348966514669f4e21410580fe73cdb7..293617745f888721abae5791f165635ea1464656 100644
--- a/jami-android/app/src/main/res/layout/frag_settings.xml
+++ b/jami-android/app/src/main/res/layout/frag_settings.xml
@@ -164,51 +164,51 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
             </RelativeLayout>
 
             <RelativeLayout
-                android:id="@+id/settings_plugins_layout"
+                android:id="@+id/settings_extensions_layout"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:padding="@dimen/padding_large">
 
                 <ImageView
-                    android:id="@+id/plugins_image"
+                    android:id="@+id/extensions_image"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_alignParentStart="true"
                     android:layout_centerVertical="true"
-                    android:contentDescription="@string/pref_plugins_summary"
-                    app:srcCompat="@drawable/ic_plugin"
+                    android:contentDescription="@string/pref_extensions_summary"
+                    app:srcCompat="@drawable/ic_extension"
                     android:layout_marginEnd="32dp"/>
                 <LinearLayout
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_centerVertical="true"
-                    android:layout_toStartOf="@+id/settings_plugins_switch"
-                    android:layout_toEndOf="@+id/plugins_image"
+                    android:layout_toStartOf="@+id/settings_extensions_switch"
+                    android:layout_toEndOf="@+id/extensions_image"
                     android:orientation="vertical">
                     <TextView
-                        android:id="@+id/plugins_title"
+                        android:id="@+id/extensions_title"
                         style="@style/ListPrimary"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
                         android:maxLines="3"
                         android:singleLine="false"
-                        android:text="@string/pref_plugins_title"
-                        android:layout_toEndOf="@id/plugins_image"
+                        android:text="@string/pref_extensions_title"
+                        android:layout_toEndOf="@id/extensions_image"
                         android:layout_marginEnd="16dp" />
 
                     <TextView
                         style="@style/ListSecondary"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
-                        android:text="@string/pref_plugins_summary"
-                        android:layout_toEndOf="@id/plugins_image"
+                        android:text="@string/pref_extensions_summary"
+                        android:layout_toEndOf="@id/extensions_image"
                         android:layout_marginEnd="16dp"
-                        android:layout_below="@id/plugins_title"/>
+                        android:layout_below="@id/extensions_title"/>
 
                 </LinearLayout>
 
                 <com.google.android.material.materialswitch.MaterialSwitch
-                    android:id="@+id/settings_plugins_switch"
+                    android:id="@+id/settings_extensions_switch"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_alignParentEnd="true"
diff --git a/jami-android/app/src/main/res/layout/item_conv_msg_me_tv.xml b/jami-android/app/src/main/res/layout/item_conv_msg_me_tv.xml
index e28af1f105c121530bc163a06af1a5fe614618e1..4e6df54891e29bf8cfe8abba9c67bfcfe7553c64 100644
--- a/jami-android/app/src/main/res/layout/item_conv_msg_me_tv.xml
+++ b/jami-android/app/src/main/res/layout/item_conv_msg_me_tv.xml
@@ -65,7 +65,7 @@ along with this program; if not, write to the Free Software
             android:textIsSelectable="true"
             android:textSize="16sp"
             android:theme="@style/OutgoingTextMesssage"
-            tools:text="yo this is the test of a long long text can not be_found_message" />
+            tools:text="yo this is the test of a long long text which cannot be_found_message" />
 
     </RelativeLayout>
 
diff --git a/jami-android/app/src/main/res/layout/item_picker.xml b/jami-android/app/src/main/res/layout/item_picker.xml
index 14d2af42c71cfdd496f75a669786906ca73548f9..67701e499c073256d1112b6ec06ed84da062bfb7 100644
--- a/jami-android/app/src/main/res/layout/item_picker.xml
+++ b/jami-android/app/src/main/res/layout/item_picker.xml
@@ -4,5 +4,5 @@
     android:id="@+id/item_image_view"
     android:layout_width="64dp"
     android:layout_height="64dp"
-    tools:src="@drawable/ic_plugin"
+    tools:src="@drawable/ic_extension"
     android:layout_margin="24dp" />
diff --git a/jami-android/app/src/main/res/menu/ac_call.xml b/jami-android/app/src/main/res/menu/ac_call.xml
index 09cebb7f7c5a4e0f01f939cbfd7e8291b0e15bc0..13559cc370e405a36bf420187583785850de75fe 100644
--- a/jami-android/app/src/main/res/menu/ac_call.xml
+++ b/jami-android/app/src/main/res/menu/ac_call.xml
@@ -10,10 +10,10 @@
         android:orderInCategory="2"/>
 
     <item
-        android:id="@+id/menuitem_video_plugins"
+        android:id="@+id/menuitem_video_extensions"
         app:showAsAction="ifRoom"
-        android:icon="@drawable/ic_plugin"
-        android:title="@string/video_plugins"
+        android:icon="@drawable/ic_extension"
+        android:title="@string/video_extensions"
         android:orderInCategory="3"/>
 
 </menu>
\ No newline at end of file
diff --git a/jami-android/app/src/main/res/menu/conversation_share_actions.xml b/jami-android/app/src/main/res/menu/conversation_share_actions.xml
index 0edbf89dbee7cb800180d13f65d78240f0f6ca26..26402f8e3f29cea5fb87a87294ed18e26c2e0493 100644
--- a/jami-android/app/src/main/res/menu/conversation_share_actions.xml
+++ b/jami-android/app/src/main/res/menu/conversation_share_actions.xml
@@ -38,9 +38,9 @@
         tools:ignore="AlwaysShowAction" />
 
     <item
-        android:id="@+id/chat_plugins"
-        android:icon="@drawable/ic_plugin"
-        android:title="@string/chat_plugins"
+        android:id="@+id/chat_extensions"
+        android:icon="@drawable/ic_extension"
+        android:title="@string/chat_extensions"
         app:showAsAction="always"
         tools:ignore="AlwaysShowAction" />
 </menu>
diff --git a/jami-android/app/src/main/res/values/strings.xml b/jami-android/app/src/main/res/values/strings.xml
index 8b94c3ec51cfd1ea504797afef4e7fc7e0a8df39..7857e8a0739b839d49df7a9ef87e4efd9af10c57 100644
--- a/jami-android/app/src/main/res/values/strings.xml
+++ b/jami-android/app/src/main/res/values/strings.xml
@@ -26,7 +26,7 @@ along with this program; if not, write to the Free Software
     <string name="ring_contribute_website" translatable="false">https://jami.net/contribute</string>
     <string name="savoirfairelinux_website" translatable="false">https://savoirfairelinux.com</string>
 
-    <string name="copyright" translatable="false">2004&#8211;2024 Savoir-faire Linux Inc.</string>
+    <string name="copyright" translatable="false">2004–2024 Savoir-faire Linux Inc.</string>
     <string name="feedback_section">Feedback</string>
     <string name="report"><u>Send us an email</u></string>
     <string name="section_license">License</string>
@@ -35,10 +35,9 @@ along with this program; if not, write to the Free Software
     <string name="contribute_section">Contribute</string>
     <string name="version_section">Version</string>
     <string name="no_email_app_installed">No email app found, install one to send us a report</string>
-    <string name="no_browser_app_installed">No web browser app found, install one to view this page</string>
+    <string name="no_browser_app_installed">No web browser app found, install one to visit this page</string>
     <string name="email_chooser_title">Send mail using…</string>
-    <string name="website_chooser_title">View website using…</string>
-    <string name="license">This software is provided \"as is\", without warranty of any kind. For details, see <u>GNU General Public License version 3 or later</u></string>
+    <string name="license">This software is provided “as is”, without warranty of any kind. For details, see <u>GNU General Public License version 3 or later</u></string>
     <string name="description">Jami is free software for universal communication which respects the freedoms and privacy of its users.</string>
     <string name="credits">Credits</string>
     <string name="pip_title">Jami Conference</string>
@@ -160,7 +159,7 @@ along with this program; if not, write to the Free Software
     <string name="menu_item_settings">Settings</string>
     <string name="menu_item_advanced_settings">Advanced Settings</string>
     <string name="menu_item_account_settings">Account Settings</string>
-    <string name="menu_item_plugin_list">Plugins Settings</string>
+    <string name="menu_item_extension_list">Extensions Settings</string>
     <string name="menu_item_share">Share my account</string>
     <string name="menu_item_about">About Jami</string>
 
@@ -180,7 +179,7 @@ along with this program; if not, write to the Free Software
     </plurals>
 
     <!-- ContactList Fragment -->
-    <string name="searchbar_hint">Search name or conversation&#8230;</string>
+    <string name="searchbar_hint">Search name or conversation…</string>
     <string name="choose_number">Choose a number</string>
 
     <!-- FileExplorerDFragement -->
@@ -238,17 +237,17 @@ along with this program; if not, write to the Free Software
     <string name="hist_in_call">Incoming call of %1$s</string>
     <string name="hist_out_call">Outgoing call of %1$s</string>
     <string name="call_duration">Lasted %s</string>
-    <string name="start_error_title">Can\'t start Jami !</string>
+    <string name="start_error_title">Cannot start Jami!</string>
     <string name="start_error_mic_required">Jami requires the microphone permission to work.</string>
-    <string name="action_call_accept">Take call</string>
-    <string name="action_call_accept_audio">Answer in audio</string>
-    <string name="action_call_accept_video">Answer in video</string>
-    <string name="action_call_hold_accept">Hold and take call audio</string>
-    <string name="action_call_hold_accept_video">Hold and take call video</string>
-    <string name="action_call_end_accept">End and take call</string>
+    <string name="action_call_accept">Accept call</string>
+    <string name="action_call_accept_audio">Accept incoming call with audio only</string>
+    <string name="action_call_accept_video">Accept incoming call with video</string>
+    <string name="action_call_hold_accept">Accept incoming call with audio only and hold current call</string>
+    <string name="action_call_hold_accept_video">Accept incoming call with video and hold current call</string>
+    <string name="action_call_end_accept">Accept incoming call and end current call</string>
     <string name="action_call_decline">Decline</string>
     <string name="action_call_mic_mute">Mute microphone</string>
-    <string name="action_load_plugin">Load Plugin</string>
+    <string name="action_load_extension">Load extension</string>
     <string name="ab_action_speakerphone">Enable speaker</string>
     <string name="ab_action_contact_add">Add to contacts</string>
     <string name="ab_action_contact_add_question">Add to contacts?</string>
@@ -292,15 +291,15 @@ along with this program; if not, write to the Free Software
     <string name="ringtone_error_size_too_big">This file is too big. The maximum size is %1$dkB.</string>
     <string name="ringtone_custom_prompt">Set a custom ringtone</string>
     <string name="ringtone_custom_label">Custom</string>
-    <string name="ringtone_jami_tones">Jami Tones</string>
+    <string name="ringtone_jami_tones">Jami ringtones</string>
     <string name="ringtone_default_name" translatable="false">1 AfroNigeria.opus</string>
     <string name="ca_root_file" translatable="false">cacert.pem</string>
 
     <!-- Read contacts permission -->
-    <string name="permission_dialog_read_contacts_message">Jami needs the "Read contacts" permission to enable this feature. Please grant it.</string>
+    <string name="permission_dialog_read_contacts_message">Jami needs the “Read contacts” permission to enable this feature. Please grant it.</string>
 
     <!-- Write call log permission -->
-    <string name="permission_dialog_write_call_log_message">Jami needs the "Write call log" permission to enable this feature. Please grant it.</string>
+    <string name="permission_dialog_write_call_log_message">Jami needs the “Write call log” permission to enable this feature. Please grant it.</string>
 
     <!-- QRCode Scan -->
     <string name="scan_qr_account_message">Scan the QR Code of the account you want to add.</string>
@@ -319,8 +318,8 @@ along with this program; if not, write to the Free Software
     <string name="conversation_details">Conversation details</string>
     <string name="contact_details">Contact details</string>
     <string name="conversation_action_delete_this">Delete this conversation</string>
-    <string name="conversation_action_delete_this_title">Delete this conversation ?</string>
-    <string name="conversation_action_delete_this_message">This action can not be undone.</string>
+    <string name="conversation_action_delete_this_title">Delete this conversation?</string>
+    <string name="conversation_action_delete_this_message">This action cannot be undone.</string>
     <string name="conversation_action_history_clear">Clear history</string>
     <string name="conversation_action_history_clear_title">Clear the conversation history?</string>
     <string name="conversation_action_history_clear_message">This will definitely clear the conversation history.</string>
@@ -361,8 +360,8 @@ along with this program; if not, write to the Free Software
     <string name="conversation_contact_invited">%1$s was invited</string>
     <string name="conversation_contact_added">%1$s joined</string>
     <string name="conversation_contact_left">%1$s left</string>
-    <string name="conversation_contact_banned">%1$s was banned</string>
-    <string name="conversation_contact_unbanned">%1$s was unbanned</string>
+    <string name="conversation_contact_blocked">%1$s was blocked</string>
+    <string name="conversation_contact_unblocked">%1$s was unblocked</string>
     <string name="conversation_search_hint">Search conversation</string>
 
     <string name="audio_recorder_error">Audio recorder app was not found.</string>
@@ -393,7 +392,7 @@ along with this program; if not, write to the Free Software
     <string name="help_password_choose">Choose a strong password you will remember to protect your Jami account.</string>
     <string name="help_password_enter">Enter your main Jami account password.</string>
     <string name="help_server_enter">Enter URL of management server.</string>
-    <string name="help_pin_enter">Enter the PIN from another configured Jami account. Use the \"export Jami account\" feature to obtain a PIN.</string>
+    <string name="help_pin_enter">Enter the PIN from another configured Jami account. Use the “Export Jami account” feature to obtain a PIN.</string>
     <string name="pin_copied">PIN code copied to clipboard.</string>
     <string name="wizard_next">Next</string>
     <string name="wizard_back">Back</string>
@@ -401,8 +400,8 @@ along with this program; if not, write to the Free Software
     <string name="hist_contact_invited">Contact invited</string>
     <string name="hist_contact_added">Contact added</string>
     <string name="hist_contact_left">Contact left</string>
-    <string name="hist_contact_banned">Contact banned</string>
-    <string name="hist_contact_unbanned">Contact unbanned</string>
+    <string name="hist_contact_blocked">Contact blocked</string>
+    <string name="hist_contact_unblocked">Contact unblocked</string>
     <string name="hist_invitation_received">Invitation received</string>
 
     <!-- Account Summary -->
@@ -459,7 +458,7 @@ along with this program; if not, write to the Free Software
     <string name="gallery_error_title">No Gallery app found</string>
     <string name="gallery_error_message">No application found on device to open Gallery</string>
 
-    <string name="generic_error">An unknown error occurred</string>
+    <string name="generic_error">An unknown error occurred.</string>
 
     <!--File Transfer-->
     <string name="invalid_file">Invalid file</string>
@@ -480,7 +479,7 @@ along with this program; if not, write to the Free Software
     <string name="file_saved_in">File saved in %s</string>
     <string name="file_saved_successfully">File saved successfully</string>
     <string name="file_download">Download</string>
-    <string name="no_space_left_on_device">No space left on device</string>
+    <string name="no_space_left_on_device">No storage space available on the device</string>
     <string name="title_media_viewer">Media viewer</string>
     <string name="menu_file_open">Open file</string>
     <string name="menu_file_download">Download file</string>
@@ -525,8 +524,8 @@ along with this program; if not, write to the Free Software
     <string name="audio_permission_rationale_message">Jami requires the microphone permission to use speech-to-text and record audio features. It will be asked in the next step.</string>
     <string name="camera_permission_rationale_message">Jami requires the camera permission to record video and place video call. It will be asked in the next step.</string>
     <string name="unable_to_start_recorder">Unable to start recording audio.</string>
-    <string name="error_sharing_file">Error sharing file.</string>
-    <string name="error_opening_file">Error opening file.</string>
+    <string name="error_sharing_file">An error occurred while sharing the file.</string>
+    <string name="error_opening_file">An error occurred while opening the file.</string>
 
     <!-- Wizard -->
     <string name="wizard_status_recommended">Recommended</string>
@@ -545,31 +544,31 @@ along with this program; if not, write to the Free Software
     <string name="wizard_profile_button">Save Profile</string>
     <string name="wizard_profile_skip">Skip and do this later</string>
     <string name="fab_path_choose">Choose another file</string>
-    <string name="chat_plugins">Chat Plugins</string>
+    <string name="chat_extensions">Chat extensions</string>
 
     <!-- Bottom sheet -->
     <string name="bottomSheet_share_btn">Share</string>
     <string name="bottomSheet_dialpad_btn">Dialpad</string>
-    <string name="bottomSheet_plugins_btn">Plugins</string>
+    <string name="bottomSheet_extensions_btn">Extensions</string>
     <string name="bottomSheet_add_participants_btn">Add</string>
     <string name="bottomSheet_change_camera_btn">Change</string>
     <string name="bottomSheet_camera_onoff_switch_btn">Camera</string>
-    <string name="bottomSheet_hangup_btn">End Call</string>
+    <string name="bottomSheet_hangup_btn">End call</string>
     <string name="bottomSheet_mute_microphone_btn">Micro</string>
     <string name="bottomSheet_sound_output_btn">Sounds</string>
     <string name="bottomSheet_raiseHand_btn">Raise hand</string>
-    <string name="open_account_plugin_settings">Open Account Plugin Settings</string>
-    <string name="open_general_plugin_settings">Open General Plugin Settings</string>
+    <string name="open_account_extension_settings">Open Account Extension Settings</string>
+    <string name="open_general_extension_settings">Open General Extension Settings</string>
     <string name="uninstall">Uninstall</string>
     <string name="reset">Reset</string>
 
     <!-- Swarm Detail -->
     <string name="rename_btn">Confirm</string>
-    <string name="rename_error">can\'t be empty</string>
-    <string name="swarm_description">Add a description</string>
-    <string name="tab_about">About</string>
+    <string name="rename_error">cannot be empty.</string>
+    <string name="swarm_description">Add description</string>
     <string name="tab_members">Members</string>
-    <string name="tab_documetn">Documents</string>
+    <string name="tab_files">Files</string>
+    <string name="tab_settings">Settings</string>
     <string name="not_admin_toast">Only admins can edit the information of this group</string>
     <string name="dialogtitle_title">Edit Swarm title</string>
     <string name="dialogtitle_description">Edit Swarm description</string>
@@ -606,11 +605,11 @@ along with this program; if not, write to the Free Software
     <string name="donation_setting_description">Enable the donation reminder</string>
     <string name="donation_url" translatable="false">https://crowdfunding.lfx.linuxfoundation.org/projects/jami-a-gnu-package</string>
 
-    <!--  Plugin  -->
+    <!--  Extension  -->
     <string name="unable_to_load">Unable to load %1$s</string>
-    <string name="load_sucess">%1$s: enabled</string>
-    <string name="unload_sucess">%1$s: disabled</string>
-    <string name="install_sucess">Extension %1$s has been successfully installed.</string>
+    <string name="load_success">%1$s: enabled</string>
+    <string name="unload_success">%1$s: disabled</string>
+    <string name="install_success">Extension %1$s has been successfully installed.</string>
     <string name="install_error">An error occurred while importing the extension.</string>
 
 </resources>
diff --git a/jami-android/app/src/main/res/values/strings_account.xml b/jami-android/app/src/main/res/values/strings_account.xml
index 167717be4f30b163dfa69ccaa8df1c48e71c8346..9ff10c8a316de23ae9cb93056829e212a3461146 100644
--- a/jami-android/app/src/main/res/values/strings_account.xml
+++ b/jami-android/app/src/main/res/values/strings_account.xml
@@ -45,31 +45,31 @@ along with this program; if not, write to the Free Software
     <string name="dialog_wait_update">Updating account</string>
     <string name="dialog_wait_update_details">Please wait while your new account is updated…</string>
 
-    <string name="dialog_warn_ip2ip_account_title">Create empty SIP account ?</string>
+    <string name="dialog_warn_ip2ip_account_title">Create empty SIP account?</string>
     <string name="dialog_warn_ip2ip_account_message">You are about to create a SIP account with no valid hostname.
-        You will only be able to make and receive direct ip calls.
+        You will only be able to make and receive direct IP calls.
         You can edit your account later</string>
 
     <string name="account_type_ip2ip">IP account</string>
     <string name="help_ring">A Jami account allows you to reach people securely in peer to peer through a fully distributed network.</string>
 
-    <string name="help_sip_title">Add your SIP account</string>
+    <string name="help_sip_title">Add SIP account</string>
     <string name="help_sip">Configure an existing SIP account.</string>
-    <string name="create_sip_account">Add SIP account</string>
+    <string name="create_sip_account">Configure SIP account</string>
 
     <!-- Strings related to account deletion -->
-    <string name="account_delete_dialog_title">Delete account ?</string>
-    <string name="account_delete_dialog_message">This action can not be undone.</string>
+    <string name="account_delete_dialog_title">Delete account?</string>
+    <string name="account_delete_dialog_message">This action cannot be undone.</string>
 
     <!-- AccountManagementFragment -->
     <string name="empty_account_list">No account registered</string>
     <string name="normal_accounts_titles">Accounts</string>
-    <string name="normal_devices_titles">Linked Devices</string>
+    <string name="normal_devices_titles">Linked devices</string>
     <string name="account_device_revoke">Revoke device</string>
     <string name="account_device_revocation_success_title">Success</string>
     <string name="account_device_revocation_success">Device is now revoked!</string>
-    <string name="account_device_revocation_error_title">Can\'t revoke device</string>
-    <string name="account_device_revocation_wrong_password">Wrong password.</string>
+    <string name="account_device_revocation_error_title">Revoke device error</string>
+    <string name="account_device_revocation_wrong_password">Incorrect password.</string>
     <string name="account_device_revocation_unknown_device">Unknown device.</string>
     <string name="account_device_revocation_error_unknown">Unknown error.</string>
     <string name="account_password_change">Change Password</string>
@@ -96,8 +96,8 @@ along with this program; if not, write to the Free Software
     <string name="account_upnp_label">Enable UPnP</string>
     <string name="account_proxy_field">Proxy</string>
 
-    <!-- Plugin Details -->
-    <string name="account_preference_plugin_tab">Plugins</string>
+    <!-- Extension Details -->
+    <string name="account_preferences_extension_tab">Extensions</string>
 
     <!-- Audio Details -->
     <string name="account_audio_label">Audio</string>
@@ -194,38 +194,38 @@ along with this program; if not, write to the Free Software
     <string name="export_account_wait_message">Exporting account information</string>
     <string name="account_export_file">Backup account</string>
     <string name="account_export_file_summary">Backup your account on your device to restore it later.</string>
-    <string name="account_export_end_decryption_message">Couldn\'t unlock your account using the provided password.</string>
+    <string name="account_export_end_decryption_message">Incorrect password. Please try again with the correct password.</string>
     <string name="account_export_end_network_title">Network error</string>
-    <string name="account_export_end_network_message">Couldn\'t export account on the network. Check your connectivity.</string>
+    <string name="account_export_end_network_message">A network error occurred while exporting the account. Check your connectivity.</string>
     <string name="account_export_end_error_title">Error</string>
-    <string name="account_export_end_error_message">Couldn\'t export account. An unknown error occurred.</string>
+    <string name="account_export_end_error_message">An unknown error occurred while exporting the account.</string>
     <string name="account_enter_password">Enter password</string>
-    <string name="account_share_body">Contact me using \'%1$s\' on the Jami distributed communication platform: %2$s</string>
-    <string name="account_share_body_with_username">Contact me using \'%1$s\' or my public username \'%2$s\' on the Jami distributed communication platform: %3$s</string>
-    <string name="account_contact_me">Contact me on Jami !</string>
+    <string name="account_share_body">Contact me using “%1$s” on the Jami distributed communication platform: %2$s</string>
+    <string name="account_share_body_with_username">Contact me using “%1$s” or my public username “%2$s” on the Jami distributed communication platform: %3$s</string>
+    <string name="account_contact_me">Contact me on Jami!</string>
     <string name="update_account">Update account</string>
     <string name="account_migration">Your Jami account can be updated.\nPlease enter your password.</string>
     <string name="ring_account">Jami account</string>
     <string name="sip_account">SIP account</string>
     <string name="ring_account_identity">Identity</string>
     <string name="account_migration_title_dialog">Account migration</string>
-    <string name="account_migration_message_dialog">Your accounts need to be updated. Do you want to go the Account management screen to perform this operation ?</string>
+    <string name="account_migration_message_dialog">Your accounts need to be updated. Do you want to go the Account management screen to perform this operation?</string>
     <string name="account_update_needed">Update needed</string>
-    <string name="account_cannot_be_found_title">Can\'t find account</string>
-    <string name="account_cannot_be_found_message">Account couldn\'t be found on the Jami network.\nMake sure it was exported on Jami from an existing device, and that provided credentials are correct.</string>
+    <string name="account_cannot_be_found_title">Account error</string>
+    <string name="account_cannot_be_found_message">Unable to find account on the Jami network. Make sure it was exported on Jami from an existing device, and that provided credentials are correct.</string>
     <string name="account_sip_cannot_be_registered_message">You can continue with the account creation process or edit your information here. Edition is still possible later in the account settings.</string>
-    <string name="account_no_network_title">Can\'t connect to the network</string>
-    <string name="account_no_network_message">Could not add account because Jami couldn\'t connect to the distributed network. Check your device connectivity.</string>
+    <string name="account_no_network_title">Network error</string>
+    <string name="account_no_network_message">A connectivity error occurred while adding Jami account to the distributed network. Check your device connectivity.</string>
     <string name="account_device_added_title">Account device added</string>
     <string name="account_device_added_message">You have successfully setup your Jami account on this device.</string>
     <string name="account_device_updated_title">Account device updated</string>
     <string name="account_device_updated_message">You have successfully updated your Jami account.</string>
-    <string name="account_cannot_be_updated_message">Account device couldn\'t be update. Please check your password.</string>
-    <string name="account_sip_success_title">Sip account registered</string>
-    <string name="account_sip_success_message">You have successfully registered your Sip account.</string>
+    <string name="account_cannot_be_updated_message">An error occurred while updating account. Please check your password.</string>
+    <string name="account_sip_success_title">SIP account registered</string>
+    <string name="account_sip_success_message">You have successfully registered your SIP account.</string>
     <string name="account_sip_register_anyway">Register anyway</string>
 
-    <!--  TV  -->
+    <!-- TV -->
     <string name="account_tv_settings_header">Account settings</string>
     <string name="account_tv_advance_settings_header">Advanced settings</string>
     <string name="account_tv_add_contact">Add contact</string>
@@ -244,11 +244,11 @@ along with this program; if not, write to the Free Software
     <string name="account_link_export_button">Link a new device</string>
     <string name="account_link_show_button">Show %d more linked device</string>
     <string name="account_link_hide_button">Hide linked device</string>
-    <string name="account_link_export_info">To use this account on other devices, you must first expose it on Jami. This will generate a PIN code that you must enter on the new device to set up the account. The PIN is valid for 10 minutes.</string>
+    <string name="account_link_export_info">To use this account on other devices, you must first expose it on Jami. This will generate a PIN code that you must enter on the new device to set up the account. The PIN will expire in 10 minutes.</string>
     <string name="account_start_export_button">Generate PIN</string>
     <string name="account_end_export_button">close</string>
-    <string name="account_end_export_infos">Your PIN is:\n\n%%\n\nTo complete the process, you need to open Jami on the new device. Create a new account with \"Link this device to an account\". Your PIN is valid for 10 minutes.</string>
-    <string name="account_link_export_info_light">To use this account on other devices, you must first expose it on Jami. This will generate a PIN code that you must enter on the new device to set up the account. The PIN is valid for 10 minutes.</string>
+    <string name="account_end_export_infos">Your PIN is:\n\n%%\n\nTo complete the process, you need to open Jami on the new device. Create a new account with “Link this device to an account”. The PIN will expire in 10 minutes.</string>
+    <string name="account_link_export_info_light">To use this account on other devices, you must first expose it on Jami. This will generate a PIN code that you must enter on the new device to set up the account. The PIN will expire in 10 minutes.</string>
     <string name="account_export_title">Link account to other devices</string>
     <string name="account_connect_server_button">Connect to management server</string>
     <string name="account_connect_button">Connect</string>
@@ -282,23 +282,23 @@ along with this program; if not, write to the Free Software
     <string name="account_creation_profile">Create your profile</string>
     <string name="account_creation_ring">Create your Jami account</string>
     <string name="account_link_title">Link this device</string>
-    <string name="account_sip_cannot_be_registered">Can\'t register account</string>
+    <string name="account_sip_cannot_be_registered">An error occurred while registering SIP account.</string>
 
     <!-- Edit profile-->
-    <string name="account_edit_profile">Edit my account</string>
+    <string name="account_edit_profile">Edit profile</string>
 
     <!-- Devices -->
     <string name="account_revoke_device_hint">Enter password to confirm</string>
     <string name="enter_password">Enter password</string>
     <string name="revoke_device_title">Revoke device</string>
-    <string name="revoke_device_message">Are you sure you want to revoke %1$s ?</string>
+    <string name="revoke_device_message">Are you sure you want to revoke %1$s?</string>
     <string name="revoke_device_wait_title">Please wait…</string>
     <string name="revoke_device_wait_message">Revoking device</string>
     <string name="rename_device_title">Rename this device</string>
     <string name="rename_device_message">Choose a new name to identify this device in your Jami account</string>
     <string name="rename_device_button">Rename device</string>
     <string name="account_rename_device_hint">Choose new device name</string>
-    <string name="account_device_name_empty">Device name can\'t be empty</string>
+    <string name="account_device_name_empty">Device name cannot be empty.</string>
     <string name="account_device_this_indicator">This device</string>
     <string name="account_disabled_indicator">disabled</string>
 
@@ -312,12 +312,12 @@ along with this program; if not, write to the Free Software
     <string name="account_link_password">This account is password-encrypted, enter the password to generate the PIN code.</string>
     <string name="account_link_generate_button">Generate</string>
     <string name="account_link_time_valid">The PIN code will be invalid: %1$s.</string>
-    <string name="account_link_device_info">Choose \"Link a new device\" from the other Jami app to show the QR code or PIN</string>
+    <string name="account_link_device_info">Choose “Link a new device” from the other Jami app to show the QR code or PIN</string>
     <string name="account_generate_export_device">On the other device</string>
-    <string name="account_generate_export_info">Install and launch Jami, select \"Import from an other device\" and scan the QR code.</string>
+    <string name="account_generate_export_info">Install and launch Jami, select “Import from an other device” and scan the QR code.</string>
     <string name="content_description_qr_generated">Your Qr Code</string>
-    <string name="account_generate_export_invalid">The PIN is no longer valid.\n Enter the password and generate another one to link the new device.</string>
-    <string name="account_generate_export_invalid_two">The PIN is no longer valid.\n Generate another one to link the new device.</string>
+    <string name="account_generate_export_invalid">The PIN is no longer valid.\nEnter the password and generate another one to link the new device.</string>
+    <string name="account_generate_export_invalid_two">The PIN is no longer valid.\nGenerate another one to link the new device.</string>
     <string name="help_pin_info">Fill if the account is password-encrypted</string>
     <string name="connect_device_scanqr">Scan QR</string>
     <string name="connect_device_enterPIN">Or enter PIN</string>
diff --git a/jami-android/app/src/main/res/values/strings_content_description.xml b/jami-android/app/src/main/res/values/strings_content_description.xml
index b57c41171f04d6e0c14091f99534032ccf0c461e..5c6e8c1e63706fc6a1dbb65d308251dc3e145751 100644
--- a/jami-android/app/src/main/res/values/strings_content_description.xml
+++ b/jami-android/app/src/main/res/values/strings_content_description.xml
@@ -1,11 +1,11 @@
 <resources>
 
     <!-- Strings for xml content description of images -->
-    <string name="contact_quick_call_description">Quick Call</string>
-    <string name="contact_picture_description">Contact Picture</string>
+    <string name="contact_quick_call_description">Quick call</string>
+    <string name="contact_picture_description">Contact picture</string>
     <string name="dial_numeric_pad">Numeric dialpad</string>
     <string name="contact_unblock">Unblock</string>
-    <string name="video_plugins">Video Plugins</string>
+    <string name="video_extensions">Video extensions</string>
     <string name="file_download_button">Download</string>
     <string name="control_play">Play</string>
     <string name="control_replay">Replay</string>
diff --git a/jami-android/app/src/main/res/values/strings_preferences.xml b/jami-android/app/src/main/res/values/strings_preferences.xml
index f0ff2bddadfd2a3add1e51aa588b90ef44da9a53..2ac91fc5a9a44f01498571f59bb403d7e6745fa9 100644
--- a/jami-android/app/src/main/res/values/strings_preferences.xml
+++ b/jami-android/app/src/main/res/values/strings_preferences.xml
@@ -41,7 +41,7 @@
     <string name="pref_startOnBoot_summary">Run Jami in the background when the system starts.</string>
 
     <string name="pref_clearHistory_title">Clear history</string>
-    <string name="pref_clearHistory_summary">Clear all the conversations history. This action can\'t be undone.</string>
+    <string name="pref_clearHistory_summary">Clear the history of all conversations. This action cannot be undone.</string>
 
     <string name="pref_notification_title">Notification visibility</string>
     <string name="pref_notification_summary">Set application notifications visibility on lock screen.</string>
@@ -77,24 +77,24 @@
     <string name="notification_private">Private \n(show notifications but hide their content on lock screen)\n</string>
     <string name="notification_secret">Secret \n(do not show notifications on lock screen)</string>
 
-    <!-- Plugin -->
-    <string name="pref_plugins_title">Plugins</string>
-    <string name="pref_plugins_summary">Enable plugins and set their parameters</string>
-    <string name="fab_plugins_add">Add a new plugin</string>
-    <string name="plugin_uninstall_title">Uninstall Plugin ?</string>
-    <string name="plugin_reset_preferences">Reset plugin preferences</string>
-    <string name="plugin_reset_preferences_summary">Your plugin settings will be defaulted</string>
-    <string name="plugin_reset_preferences_ask">Do you want to reset the general plugin settings ?</string>
-    <string name="plugin_reset_account_preferences_ask">Do you want to reset the account plugin settings ?</string>
-    <string name="plugin_successfully_installed">Plugin <b>%1$s</b> successfully installed</string>
-    <string name="plugin_install_failure">Failed to install plugin: <b>%1$s</b></string>
-    <string name="plugin_recent_version_exception">You have a more recent version of: <b>%1$s</b></string>
-    <string name="plugin_same_version_exception">You have the same version of <b>%1$s</b> installed</string>
-    <string name="plugin_invalid_signature"><b>%1$s</b> has an invalid signature</string>
-    <string name="plugin_invalid_authority">Can\'t verify authority for: <b>%1$s</b></string>
-    <string name="plugin_invalid_format">Invalid plugin format: <b>%1$s</b></string>
-    <string name="plugin_force_install">force \n install</string>
-    <string name="plugin_path_image_add">Add a new image</string>
+    <!-- Extension -->
+    <string name="pref_extensions_title">Extensions</string>
+    <string name="pref_extensions_summary">Enable extensions and set their parameters</string>
+    <string name="fab_extensions_add">Add new extension</string>
+    <string name="extension_uninstall_title">Uninstall extension?</string>
+    <string name="extension_reset_preferences">Reset extension preferences</string>
+    <string name="extension_reset_preferences_summary">Extension restored to the default settings</string>
+    <string name="extension_reset_preferences_ask">Do you want to reset the general extension settings?</string>
+    <string name="extension_reset_account_preferences_ask">Do you want to reset the account extension settings?</string>
+    <string name="extension_successfully_installed">Extension <b>%1$s</b> successfully installed</string>
+    <string name="extension_install_failure">An error occurred while installing the following extension: <b>%1$s</b></string>
+    <string name="extension_recent_version_exception">A more recent version of <b>%1$s</b> is installed.</string>
+    <string name="extension_same_version_exception">The same version of <b>%1$s</b> is installed.</string>
+    <string name="extension_invalid_signature"><b>%1$s</b> has an invalid signature</string>
+    <string name="extension_invalid_authority">Cannot verify authority for: <b>%1$s</b></string>
+    <string name="extension_invalid_format">Invalid extension format: <b>%1$s</b></string>
+    <string name="extension_force_install">force \n install</string>
+    <string name="extension_path_image_add">Add new image</string>
 
     <string name="default_emoji_1" translatable="false">👍</string>
     <string name="default_emoji_2" translatable="false">❤️</string>
diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallPresenter.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallPresenter.kt
index 323d3c0e4ba4dd11e4944dd4b0eb0bfe4075eb8d..81aa3c2a7c500606c8d1d274520f35a0879b83b4 100644
--- a/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallPresenter.kt
+++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallPresenter.kt
@@ -54,7 +54,7 @@ class CallPresenter @Inject constructor(
     private var incomingIsFullIntent = true
     private var callInitialized = false
     private var currentSurfaceId: String? = null
-    private var currentPluginSurfaceId: String? = null
+    private var currentExtensionSurfaceId: String? = null
     private var timeUpdateTask: Disposable? = null
     fun isSpeakerphoneOn(): Boolean = mHardwareService.isSpeakerphoneOn()
     var isMicrophoneMuted: Boolean = false
@@ -203,13 +203,13 @@ class CallPresenter @Inject constructor(
     fun prepareBottomSheetButtonsStatus() {
         val conference = mConference ?: return
         val canDial = mOnGoingCall
-        val displayPluginsButton = view?.displayPluginsButton() == true
-        val showPluginBtn = displayPluginsButton && mOnGoingCall
+        val displayExtensionsButton = view?.displayExtensionsButton() == true
+        val showExtensionBtn = displayExtensionsButton && mOnGoingCall
         val hasActiveCameraVideo = conference.hasActiveNonScreenShareVideo()
         val hasActiveScreenShare = conference.hasActiveScreenSharing()
         val hasMultipleCamera = mHardwareService.cameraCount() > 1 && mOnGoingCall && hasActiveCameraVideo
         val isConference = conference.isConference
-        view?.updateBottomSheetButtonStatus(isConference, isSpeakerphoneOn(), conference.isAudioMuted, hasMultipleCamera, canDial, showPluginBtn, mOnGoingCall, hasActiveCameraVideo, hasActiveScreenShare)
+        view?.updateBottomSheetButtonStatus(isConference, isSpeakerphoneOn(), conference.isAudioMuted, hasMultipleCamera, canDial, showExtensionBtn, mOnGoingCall, hasActiveCameraVideo, hasActiveScreenShare)
     }
 
     fun chatClick() {
@@ -321,18 +321,18 @@ class CallPresenter @Inject constructor(
         }
     }
 
-    fun pluginSurfaceCreated(holder: Any) {
+    fun extensionSurfaceCreated(holder: Any) {
         val conference = mConference ?: return
         var newId : String
         if (conference.hasActiveVideo()) {
             val mediaList = conference.getMediaList()
             for (m in mediaList) if (m.mediaType == Media.MediaType.MEDIA_TYPE_VIDEO) {
                 newId = m.source!!
-                if (newId != currentPluginSurfaceId) {
-                    currentPluginSurfaceId?.let { id ->
+                if (newId != currentExtensionSurfaceId) {
+                    currentExtensionSurfaceId?.let { id ->
                         mHardwareService.removeVideoSurface(id)
                     }
-                    currentPluginSurfaceId = newId
+                    currentExtensionSurfaceId = newId
                 }
                 mHardwareService.addVideoSurface(newId, holder)
                 //view?.displayContactBubble(false)
@@ -340,12 +340,12 @@ class CallPresenter @Inject constructor(
         }
     }
 
-    private fun pluginSurfaceUpdateId(newId: String) {
-        if (newId != currentPluginSurfaceId) {
-            currentPluginSurfaceId?.let { oldId ->
+    private fun extensionSurfaceUpdateId(newId: String) {
+        if (newId != currentExtensionSurfaceId) {
+            currentExtensionSurfaceId?.let { oldId ->
                 mHardwareService.updateVideoSurfaceId(oldId, newId)
             }
-            currentPluginSurfaceId = newId
+            currentExtensionSurfaceId = newId
         }
     }
 
@@ -361,10 +361,10 @@ class CallPresenter @Inject constructor(
         }
     }
 
-    fun pluginSurfaceDestroyed() {
-        currentPluginSurfaceId?.let { id ->
+    fun extensionSurfaceDestroyed() {
+        currentExtensionSurfaceId?.let { id ->
             mHardwareService.removeVideoSurface(id)
-            currentPluginSurfaceId = null
+            currentExtensionSurfaceId = null
         }
     }
 
@@ -410,7 +410,7 @@ class CallPresenter @Inject constructor(
                 mHardwareService.setPreviewSettings()
                 mHardwareService.updatePreviewVideoSurface(call)
                 videoSurfaceUpdateId(call.id)
-                pluginSurfaceUpdateId(call.pluginId)
+                extensionSurfaceUpdateId(call.extensionId)
                 view.displayLocalVideo(hasActiveCameraVideo && mDeviceRuntimeService.hasVideoPermission())
                 if (permissionChanged) {
                     val camId = mHardwareService.changeCamera(true)
@@ -666,7 +666,7 @@ class CallPresenter @Inject constructor(
         return mConference?.maximizedParticipant == info.contact.contact
     }
 
-    fun startPlugin(mediaHandlerId: String) {
+    fun startExtension(mediaHandlerId: String) {
         mHardwareService.startMediaHandler(mediaHandlerId)
         val conference = mConference ?: return
         val media = conference.getMediaList()
@@ -676,7 +676,7 @@ class CallPresenter @Inject constructor(
         mHardwareService.switchInput(conference.accountId, conference.id, source)
     }
 
-    fun stopPlugin() {
+    fun stopExtension() {
         mHardwareService.stopMediaHandler()
         val conference = mConference ?: return
         val media = conference.getMediaList() ?: return
diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallView.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallView.kt
index 2de8c16c38149680caa36cdb598c36c2b9dbe928..9ba03693a14439cd1ed07ee17409b2ee64d3e602 100644
--- a/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallView.kt
+++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallView.kt
@@ -30,7 +30,7 @@ interface CallView {
     fun updateAudioState(state: AudioState)
     fun updateTime(duration: Long)
     fun updateCallStatus(callState: CallStatus)
-    fun updateBottomSheetButtonStatus(isConference: Boolean, isSpeakerOn: Boolean, isMicrophoneMuted: Boolean, hasMultipleCamera: Boolean, canDial: Boolean, showPluginBtn: Boolean, onGoingCall: Boolean, hasActiveCameraVideo: Boolean, hasActiveScreenShare: Boolean)
+    fun updateBottomSheetButtonStatus(isConference: Boolean, isSpeakerOn: Boolean, isMicrophoneMuted: Boolean, hasMultipleCamera: Boolean, canDial: Boolean, showExtensionBtn: Boolean, onGoingCall: Boolean, hasActiveCameraVideo: Boolean, hasActiveScreenShare: Boolean)
     fun resetBottomSheetState()
     fun initNormalStateDisplay()
     fun initIncomingCallDisplay(hasVideo: Boolean)
@@ -46,7 +46,7 @@ interface CallView {
     fun prepareCall(acceptIncomingCall: Boolean)
     fun handleCallWakelock(isAudioOnly: Boolean)
     fun goToContact(accountId: String, contact: Contact)
-    fun displayPluginsButton(): Boolean
+    fun displayExtensionsButton(): Boolean
     fun updateConfInfo(info: List<ParticipantInfo>)
     fun updateParticipantRecording(contacts: List<ContactViewModel>)
     fun getMediaProjection(resultCode: Int, data: Any): Any
diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationPresenter.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationPresenter.kt
index bd42ce69e81562f8e95bb06d29651fd9f6936da1..0af7f7c2a22b834c66352b9ce82b157507ee07e1 100644
--- a/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationPresenter.kt
+++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationPresenter.kt
@@ -437,8 +437,8 @@ class ConversationPresenter @Inject constructor(
             .subscribe { conversation -> view?.startShareLocation(conversation.accountId, conversation.uri.uri) })
     }
 
-    fun showPluginListHandlers() {
-        view?.showPluginListHandlers(mConversation!!.accountId, mConversationUri!!.uri)
+    fun showExtensionListHandlers() {
+        view?.showExtensionListHandlers(mConversation!!.accountId, mConversationUri!!.uri)
     }
 
     val path: Pair<String, Uri>
diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationView.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationView.kt
index 5ffcd42611b6ae4fb25cabf45de804b2d589c52c..7b50cdb7cb9c256db9d12013b7fd37a751774168 100644
--- a/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationView.kt
+++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationView.kt
@@ -58,7 +58,7 @@ interface ConversationView {
     fun startShareLocation(accountId: String, conversationId: String)
     fun showMap(accountId: String, contactId: String, open: Boolean)
     fun hideMap()
-    fun showPluginListHandlers(accountId: String, contactId: String)
+    fun showExtensionListHandlers(accountId: String, contactId: String)
     fun hideErrorPanel()
     fun displayNetworkErrorPanel()
     fun displayAccountOfflineErrorPanel()
diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/model/Conference.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/model/Conference.kt
index ea513181dc43f5c5722d7bd737ef6f162ad66496..9ffc0c163617bbe02fbe4ac9b45e7e3c72253685 100644
--- a/jami-android/libjamiclient/src/main/kotlin/net/jami/model/Conference.kt
+++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/model/Conference.kt
@@ -88,7 +88,7 @@ class Conference(val accountId: String, val id: String) {
             mParticipants[0]
         } else null
 
-    val pluginId: String
+    val extensionId: String
         get() = "local"
 
     val state: CallStatus?
diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/services/CallService.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/services/CallService.kt
index 19f7d03624f93c5ca7a67a191f5e0613db79830c..6231c6dcb8dc0c31e1b2b0125e22f721afe9ea9f 100644
--- a/jami-android/libjamiclient/src/main/kotlin/net/jami/services/CallService.kt
+++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/services/CallService.kt
@@ -326,18 +326,18 @@ abstract class CallService(
         }
     }
 
-    fun setAudioPlugin(audioPlugin: String) {
+    fun setAudioExtension(audioExtension: String) {
         mExecutor.execute {
-            Log.i(TAG, "setAudioPlugin() running…")
-            JamiService.setAudioPlugin(audioPlugin)
+            Log.i(TAG, "setAudioExtension() running…")
+            JamiService.setAudioPlugin(audioExtension)
         }
     }
 
-    val currentAudioOutputPlugin: String?
+    val currentAudioOutputExtension: String?
         get() {
             try {
                 return mExecutor.submit<String> {
-                    Log.i(TAG, "getCurrentAudioOutputPlugin() running…")
+                    Log.i(TAG, "getCurrentAudioOutputExtension() running…")
                     JamiService.getCurrentAudioOutputPlugin()
                 }.get()
             } catch (e: Exception) {