diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/SourcesListAdapter.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/SourcesListAdapter.kt
index 0aa6d1a..63b226a 100644
--- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/SourcesListAdapter.kt
+++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/SourcesListAdapter.kt
@@ -8,6 +8,7 @@ import android.view.View
 import android.view.ViewGroup
 import android.widget.Button
 import android.widget.Toast
+import androidx.appcompat.app.AlertDialog
 import androidx.constraintlayout.widget.ConstraintLayout
 import androidx.recyclerview.widget.RecyclerView
 import bou.amine.apps.readerforselfossv2.android.R
@@ -39,10 +40,7 @@ class SourcesListAdapter(
     private val repository: Repository by instance()
     private val appSettingsService: AppSettingsService by instance()
 
-    override fun onCreateViewHolder(
-        parent: ViewGroup,
-        viewType: Int,
-    ): ViewHolder {
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
         binding = SourceListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
         return ViewHolder(binding.root)
     }
@@ -51,50 +49,31 @@ class SourcesListAdapter(
         holder: ViewHolder,
         position: Int,
     ) {
-        val itm = items[position]
+        val source = items[position]
 
         val deleteBtn: Button = holder.mView.findViewById(R.id.deleteBtn)
 
-        deleteBtn.setOnClickListener {
-            val (id, title) = items[position]
-            CoroutineScope(Dispatchers.IO).launch {
-                val successfullyDeletedSource = repository.deleteSource(id, title)
-                if (successfullyDeletedSource) {
-                    items.removeAt(position)
-                    notifyItemRemoved(position)
-                    notifyItemRangeChanged(position, itemCount)
-                } else {
-                    Toast
-                        .makeText(
-                            app,
-                            R.string.can_delete_source,
-                            Toast.LENGTH_SHORT,
-                        ).show()
-                }
-            }
-        }
+        deleteBtn.setOnClickListener { this.showDeleteConfirmationDialog(source, position) }
 
         holder.mView.setOnClickListener {
-            val source = items[position]
-
             repository.setSelectedSource(source)
             app.startActivity(Intent(app, UpsertSourceActivity::class.java))
         }
 
-        if (itm.getIcon(repository.baseUrl).isEmpty()) {
-            binding.itemImage.setBackgroundAndText(itm.title.getHtmlDecoded())
+        if (source.getIcon(repository.baseUrl).isEmpty()) {
+            binding.itemImage.setBackgroundAndText(source.title.getHtmlDecoded())
         } else {
-            c.circularDrawable(itm.getIcon(repository.baseUrl), binding.itemImage, appSettingsService)
+            c.circularDrawable(source.getIcon(repository.baseUrl), binding.itemImage, appSettingsService)
         }
 
-        if (!itm.error.isNullOrBlank()) {
+        if (!source.error.isNullOrBlank()) {
             binding.errorText.visibility = View.VISIBLE
-            binding.errorText.text = itm.error
+            binding.errorText.text = source.error
         } else {
             binding.errorText.visibility = View.GONE
         }
 
-        binding.sourceTitle.text = itm.title.getHtmlDecoded()
+        binding.sourceTitle.text = source.title.getHtmlDecoded()
     }
 
     override fun getItemId(position: Int) = position.toLong()
@@ -103,6 +82,35 @@ class SourcesListAdapter(
 
     override fun getItemCount(): Int = items.size
 
+
+    private fun showDeleteConfirmationDialog(source: SelfossModel.SourceDetail, position: Int) {
+        AlertDialog.Builder(app)
+            .setTitle(app.getString(R.string.confirm_delete_title))
+            .setMessage(app.getString(R.string.confirm_delete_message, source.title))
+            .setPositiveButton(android.R.string.ok) { _, _ -> deleteSource(source, position) }
+            .setNegativeButton(android.R.string.cancel, null)
+            .show()
+    }
+
+    private fun deleteSource(source: SelfossModel.SourceDetail, position: Int) {
+        CoroutineScope(Dispatchers.IO).launch {
+            val successfullyDeletedSource = repository.deleteSource(source.id, source.title)
+            launch(Dispatchers.Main) {
+                if (successfullyDeletedSource) {
+                    items.removeAt(position)
+                    notifyItemRemoved(position)
+                    notifyItemRangeChanged(position, itemCount)
+                } else {
+                    Toast.makeText(
+                        app,
+                        R.string.can_delete_source,
+                        Toast.LENGTH_SHORT,
+                    ).show()
+                }
+            }
+        }
+    }
+
     inner class ViewHolder(
         val mView: ConstraintLayout,
     ) : RecyclerView.ViewHolder(mView)
diff --git a/androidApp/src/main/res/values/strings.xml b/androidApp/src/main/res/values/strings.xml
index 8698e41..d04a31a 100644
--- a/androidApp/src/main/res/values/strings.xml
+++ b/androidApp/src/main/res/values/strings.xml
@@ -131,4 +131,6 @@
     <string name="action_about">"About"</string>
     <string name="marked_as_read">"Item read"</string>
     <string name="marked_as_unread">"Item unread"</string>
+    <string name="confirm_delete_title">Confirm Deletion</string>
+    <string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
 </resources>