diff --git a/Emby.Server.Implementations/Images/ArtistImageProvider.cs b/Emby.Server.Implementations/Images/ArtistImageProvider.cs
new file mode 100644
index 0000000000..6408d154c5
--- /dev/null
+++ b/Emby.Server.Implementations/Images/ArtistImageProvider.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Emby.Server.Implementations.Images;
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Controller.Dto;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Controller.Entities.TV;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Playlists;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Querying;
+
+namespace Emby.Server.Implementations.Images
+{
+    public class ArtistImageProvider : BaseDynamicImageProvider<MusicArtist>
+    {
+        private readonly ILibraryManager _libraryManager;
+
+        public ArtistImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
+        {
+            _libraryManager = libraryManager;
+        }
+
+        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
+        {
+            return _libraryManager.GetItemList(new InternalItemsQuery
+            {
+                ArtistIds = new[] { item.Id },
+                IncludeItemTypes = new[] { typeof(MusicAlbum).Name },
+                OrderBy = new[] { (ItemSortBy.Random, SortOrder.Ascending) },
+                Limit = 4,
+                Recursive = true,
+                ImageTypes = new[] { ImageType.Primary },
+                DtoOptions = new DtoOptions(false)
+            });
+        }
+    }
+}
diff --git a/Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs b/Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs
index 23cef216c8..57302b5067 100644
--- a/Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs
+++ b/Emby.Server.Implementations/Images/BaseDynamicImageProvider.cs
@@ -215,7 +215,12 @@ namespace Emby.Server.Implementations.Images
 
             if (imageType == ImageType.Primary)
             {
-                if (item is UserView || item is Playlist || item is MusicGenre || item is Genre || item is PhotoAlbum || item is MusicArtist)
+                if (item is UserView
+                    || item is Playlist
+                    || item is MusicGenre
+                    || item is Genre
+                    || item is PhotoAlbum
+                    || item is MusicArtist)
                 {
                     return CreateSquareCollage(item, itemsWithImages, outputPath);
                 }
diff --git a/Emby.Server.Implementations/UserViews/CollectionFolderImageProvider.cs b/Emby.Server.Implementations/Images/CollectionFolderImageProvider.cs
similarity index 100%
rename from Emby.Server.Implementations/UserViews/CollectionFolderImageProvider.cs
rename to Emby.Server.Implementations/Images/CollectionFolderImageProvider.cs
diff --git a/Emby.Server.Implementations/UserViews/DynamicImageProvider.cs b/Emby.Server.Implementations/Images/DynamicImageProvider.cs
similarity index 100%
rename from Emby.Server.Implementations/UserViews/DynamicImageProvider.cs
rename to Emby.Server.Implementations/Images/DynamicImageProvider.cs
diff --git a/Emby.Server.Implementations/UserViews/FolderImageProvider.cs b/Emby.Server.Implementations/Images/FolderImageProvider.cs
similarity index 100%
rename from Emby.Server.Implementations/UserViews/FolderImageProvider.cs
rename to Emby.Server.Implementations/Images/FolderImageProvider.cs
diff --git a/Emby.Server.Implementations/Images/GenreImageProvider.cs b/Emby.Server.Implementations/Images/GenreImageProvider.cs
new file mode 100644
index 0000000000..a184ed4f52
--- /dev/null
+++ b/Emby.Server.Implementations/Images/GenreImageProvider.cs
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Emby.Server.Implementations.Images;
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Controller.Dto;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Controller.Entities.TV;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Playlists;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Querying;
+
+namespace Emby.Server.Implementations.Images
+{
+    public class MusicGenreImageProvider : BaseDynamicImageProvider<MusicGenre>
+    {
+        private readonly ILibraryManager _libraryManager;
+
+        public MusicGenreImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
+        {
+            _libraryManager = libraryManager;
+        }
+
+        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
+        {
+            return _libraryManager.GetItemList(new InternalItemsQuery
+            {
+                Genres = new[] { item.Name },
+                IncludeItemTypes = new[] { typeof(MusicAlbum).Name, typeof(MusicVideo).Name, typeof(Audio).Name },
+                OrderBy = new[] { (ItemSortBy.Random, SortOrder.Ascending) },
+                Limit = 4,
+                Recursive = true,
+                ImageTypes = new[] { ImageType.Primary },
+                DtoOptions = new DtoOptions(false)
+            });
+        }
+    }
+
+    public class GenreImageProvider : BaseDynamicImageProvider<Genre>
+    {
+        private readonly ILibraryManager _libraryManager;
+
+        public GenreImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
+        {
+            _libraryManager = libraryManager;
+        }
+
+        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
+        {
+            return _libraryManager.GetItemList(new InternalItemsQuery
+            {
+                Genres = new[] { item.Name },
+                IncludeItemTypes = new[] { typeof(Series).Name, typeof(Movie).Name },
+                OrderBy = new[] { (ItemSortBy.Random, SortOrder.Ascending) },
+                Limit = 4,
+                Recursive = true,
+                ImageTypes = new[] { ImageType.Primary },
+                DtoOptions = new DtoOptions(false)
+            });
+        }
+    }
+}
diff --git a/Emby.Server.Implementations/Images/PlaylistImageProvider.cs b/Emby.Server.Implementations/Images/PlaylistImageProvider.cs
new file mode 100644
index 0000000000..eb492b2fb3
--- /dev/null
+++ b/Emby.Server.Implementations/Images/PlaylistImageProvider.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Emby.Server.Implementations.Images;
+using MediaBrowser.Common.Configuration;
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Controller.Dto;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Controller.Entities.TV;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Playlists;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Querying;
+
+namespace Emby.Server.Implementations.Images
+{
+    public class PlaylistImageProvider : BaseDynamicImageProvider<Playlist>
+    {
+        public PlaylistImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
+        {
+        }
+
+        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
+        {
+            var playlist = (Playlist)item;
+
+            return playlist.GetManageableItems()
+                .Select(i =>
+                {
+                    var subItem = i.Item2;
+
+                    var episode = subItem as Episode;
+
+                    if (episode != null)
+                    {
+                        var series = episode.Series;
+                        if (series != null && series.HasImage(ImageType.Primary))
+                        {
+                            return series;
+                        }
+                    }
+
+                    if (subItem.HasImage(ImageType.Primary))
+                    {
+                        return subItem;
+                    }
+
+                    var parent = subItem.GetOwner() ?? subItem.GetParent();
+
+                    if (parent != null && parent.HasImage(ImageType.Primary))
+                    {
+                        if (parent is MusicAlbum)
+                        {
+                            return parent;
+                        }
+                    }
+
+                    return null;
+                })
+                .Where(i => i != null)
+                .GroupBy(x => x.Id)
+                .Select(x => x.First())
+                .ToList();
+        }
+    }
+}
diff --git a/Emby.Server.Implementations/Playlists/PlaylistImageProvider.cs b/Emby.Server.Implementations/Playlists/PlaylistImageProvider.cs
deleted file mode 100644
index b8944e06aa..0000000000
--- a/Emby.Server.Implementations/Playlists/PlaylistImageProvider.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-#pragma warning disable CS1591
-
-using System.Collections.Generic;
-using System.Linq;
-using Emby.Server.Implementations.Images;
-using MediaBrowser.Common.Configuration;
-using MediaBrowser.Controller.Drawing;
-using MediaBrowser.Controller.Dto;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.Audio;
-using MediaBrowser.Controller.Entities.Movies;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Playlists;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.IO;
-using MediaBrowser.Model.Querying;
-
-namespace Emby.Server.Implementations.Playlists
-{
-    public class PlaylistImageProvider : BaseDynamicImageProvider<Playlist>
-    {
-        public PlaylistImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
-        {
-        }
-
-        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
-        {
-            var playlist = (Playlist)item;
-
-            return playlist.GetManageableItems()
-                .Select(i =>
-                {
-                    var subItem = i.Item2;
-
-                    if (subItem is Episode episode)
-                    {
-                        var series = episode.Series;
-                        if (series != null && series.HasImage(ImageType.Primary))
-                        {
-                            return series;
-                        }
-                    }
-
-                    if (subItem.HasImage(ImageType.Primary))
-                    {
-                        return subItem;
-                    }
-
-                    var parent = subItem.GetOwner() ?? subItem.GetParent();
-
-                    if (parent != null && parent.HasImage(ImageType.Primary))
-                    {
-                        if (parent is MusicAlbum)
-                        {
-                            return parent;
-                        }
-                    }
-
-                    return null;
-                })
-                .Where(i => i != null)
-                .GroupBy(x => x.Id)
-                .Select(x => x.First())
-                .ToList();
-        }
-    }
-
-    public class MusicArtistImageProvider : BaseDynamicImageProvider<MusicArtist>
-    {
-        private readonly ILibraryManager _libraryManager;
-
-        public MusicArtistImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
-        {
-            _libraryManager = libraryManager;
-        }
-
-        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
-        {
-            return _libraryManager.GetItemList(new InternalItemsQuery
-            {
-                ArtistIds = new[] { item.Id },
-                IncludeItemTypes = new[] { typeof(MusicAlbum).Name },
-                OrderBy = new[] { (ItemSortBy.Random, SortOrder.Ascending) },
-                Limit = 4,
-                Recursive = true,
-                ImageTypes = new[] { ImageType.Primary },
-                DtoOptions = new DtoOptions(false)
-            });
-        }
-    }
-
-    public class MusicGenreImageProvider : BaseDynamicImageProvider<MusicGenre>
-    {
-        private readonly ILibraryManager _libraryManager;
-
-        public MusicGenreImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
-        {
-            _libraryManager = libraryManager;
-        }
-
-        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
-        {
-            return _libraryManager.GetItemList(new InternalItemsQuery
-            {
-                Genres = new[] { item.Name },
-                IncludeItemTypes = new[] { typeof(MusicAlbum).Name, typeof(MusicVideo).Name, typeof(Audio).Name },
-                OrderBy = new[] { (ItemSortBy.Random, SortOrder.Ascending) },
-                Limit = 4,
-                Recursive = true,
-                ImageTypes = new[] { ImageType.Primary },
-                DtoOptions = new DtoOptions(false)
-            });
-        }
-    }
-
-    public class GenreImageProvider : BaseDynamicImageProvider<Genre>
-    {
-        private readonly ILibraryManager _libraryManager;
-
-        public GenreImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
-        {
-            _libraryManager = libraryManager;
-        }
-
-        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
-        {
-            return _libraryManager.GetItemList(new InternalItemsQuery
-            {
-                Genres = new[] { item.Name },
-                IncludeItemTypes = new[] { typeof(Series).Name, typeof(Movie).Name },
-                OrderBy = new[] { (ItemSortBy.Random, SortOrder.Ascending) },
-                Limit = 4,
-                Recursive = true,
-                ImageTypes = new[] { ImageType.Primary },
-                DtoOptions = new DtoOptions(false)
-            });
-        }
-    }
-}