diff --git a/Kasbot.APP/Extensions/IListExtensions.cs b/Kasbot.APP/Extensions/IListExtensions.cs
new file mode 100644
index 0000000..f7b9136
--- /dev/null
+++ b/Kasbot.APP/Extensions/IListExtensions.cs
@@ -0,0 +1,21 @@
+using Discord.WebSocket;
+
+namespace Kasbot.Extensions
+{
+    public static class IListExtensions
+    {
+        public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source)
+        {
+            var rng = new Random();
+
+            var buffer = source.ToList();
+            for (int i = 0; i < buffer.Count; i++)
+            {
+                int j = rng.Next(i, buffer.Count);
+                yield return buffer[j];
+
+                buffer[j] = buffer[i];
+            }
+        }
+    }
+}
diff --git a/Kasbot.APP/Modules/CommandModule.cs b/Kasbot.APP/Modules/CommandModule.cs
index 9d2b346..85089b0 100644
--- a/Kasbot.APP/Modules/CommandModule.cs
+++ b/Kasbot.APP/Modules/CommandModule.cs
@@ -56,6 +56,7 @@ namespace Kasbot.Modules
             await PlayerService.Stop(Context.Guild.Id);
         }
 
+        [Alias("s", "next", "n")]
         [Command("skip", RunMode = RunMode.Async)]
         public async Task SkipAsync()
         {
@@ -74,5 +75,11 @@ namespace Kasbot.Modules
         {
             await PlayerService.Repeat(Context.Guild.Id);
         }
+
+        [Command("shuffle", RunMode = RunMode.Async)]
+        public async Task Shuffle()
+        {
+            await PlayerService.Shuffle(Context.Guild.Id);
+        }
     }
 }
diff --git a/Kasbot.APP/Services/PlayerService.cs b/Kasbot.APP/Services/PlayerService.cs
index 056ae65..0c282b9 100644
--- a/Kasbot.APP/Services/PlayerService.cs
+++ b/Kasbot.APP/Services/PlayerService.cs
@@ -260,5 +260,25 @@ namespace Kasbot.Services
 
             await CreateConnection(guildId, (Context.User as IVoiceState).VoiceChannel);
         }
+
+        public async Task Shuffle(ulong guildId)
+        {
+            if (!Clients.ContainsKey(guildId))
+                throw new Exception("Bot is not connected!");
+
+            var media = Clients[guildId];
+
+            if (media.Queue.Count == 0)
+                throw new Exception("The queue is empty!");
+
+            var shuffled = media.Queue.Shuffle();
+            var newQueue = new Queue<Media>();
+
+            shuffled.ToList().ForEach(m => newQueue.Enqueue(m));
+
+            media.Queue = newQueue;
+
+            await media.Queue.First().Channel.SendTemporaryMessageAsync(":call_me: Queue shuffled!");
+        }
     }
 }