diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ChannelFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ChannelFragment.kt
index da8790327def321b00ce2af0339fdb8c882a6cc0..056cece73153fcbb787117c67ab6f6b1ea8dc414 100644
--- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ChannelFragment.kt
+++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ChannelFragment.kt
@@ -207,8 +207,6 @@ class ChannelFragment : MainFragment() {
             adapter.onAddToQueueClicked.subscribe { content ->
                 if(content is IPlatformVideo) {
                     StatePlayer.instance.addToQueue(content);
-                    val name = if (content.name.length > 20) (content.name.subSequence(0, 20).toString() + "...") else content.name;
-                    UIDialogs.toast(context, "Queued [$name]", false);
                 }
             }
             adapter.onUrlClicked.subscribe { url ->
diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentFeedView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentFeedView.kt
index 246f665fbd077ced5c24fc0cbc4cbc399e38342a..d30247b10b036e8aa9b71cafd5931ba2467a2d2c 100644
--- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentFeedView.kt
+++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentFeedView.kt
@@ -79,8 +79,6 @@ abstract class ContentFeedView<TFragment> : FeedView<TFragment, IPlatformContent
         adapter.onAddToQueueClicked.subscribe(this) {
             if(it is IPlatformVideo) {
                 StatePlayer.instance.addToQueue(it);
-                val name = if (it.name.length > 20) (it.name.subSequence(0, 20).toString() + "...") else it.name;
-                UIDialogs.toast(context, context.getString(R.string.queued) + " [$name]", false);
             }
         };
         adapter.onLongPress.subscribe(this) {
diff --git a/app/src/main/java/com/futo/platformplayer/states/StatePlayer.kt b/app/src/main/java/com/futo/platformplayer/states/StatePlayer.kt
index 22d76d01579eaa32de5829e2df10e86a1e87d998..98d9826c81bd46d3f97cf9b5890aa60f5ad2ecf0 100644
--- a/app/src/main/java/com/futo/platformplayer/states/StatePlayer.kt
+++ b/app/src/main/java/com/futo/platformplayer/states/StatePlayer.kt
@@ -2,6 +2,8 @@ package com.futo.platformplayer.states
 
 import android.content.Context
 import android.util.Log
+import com.futo.platformplayer.R
+import com.futo.platformplayer.UIDialogs
 import com.futo.platformplayer.api.media.models.playlists.IPlatformPlaylist
 import com.futo.platformplayer.api.media.models.playlists.IPlatformPlaylistDetails
 import com.futo.platformplayer.api.media.models.video.IPlatformVideo
@@ -268,7 +270,12 @@ class StatePlayer {
         setQueueWithPosition(videos, _queueType, index, withFocus);
     }
     fun addToQueue(video: IPlatformVideo) {
+        var didAdd = false;
         synchronized(_queue) {
+            if(_queue.any { it.url == video.url }) {
+                return@synchronized;
+            }
+
             if(_queue.isEmpty()) {
                 setQueueType(TYPE_QUEUE);
                 currentVideo?.let {
@@ -284,8 +291,19 @@ class StatePlayer {
             if (_queuePosition < 0) {
                 _queuePosition = 0;
             }
+            didAdd = true;
         }
-        onQueueChanged.emit(true);
+        if(didAdd) {
+            onQueueChanged.emit(true);
+            StateApp.instance.contextOrNull?.let { context ->
+                val name = if (video.name.length > 20) (video.name.subSequence(0, 20).toString() + "...") else video.name;
+                UIDialogs.toast(context, context.getString(R.string.queued) + " [$name]", false);
+            }
+        }
+        else
+            StateApp.instance.contextOrNull?.let { context ->
+                UIDialogs.toast(context, context.getString(R.string.already_queued), false);
+            }
     }
     fun insertToQueue(video: IPlatformVideo, playNow: Boolean = false) {
         synchronized(_queue) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 60b1776aa95742510c45553b3bc9d8ee76595068..14024a6bb775ee41aeb31b8c47e7fd2987dd3e61 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -537,6 +537,7 @@
     <string name="play_feed_as_queue">Play Feed as Queue</string>
     <string name="play_entire_feed">Play entire feed</string>
     <string name="queued">Queued</string>
+    <string name="already_queued">Already queued</string>
     <string name="used">Used</string>
     <string name="available">Available</string>
     <string name="failed_to_load_next_page">Failed to load next page</string>