diff --git a/SharedSources/MediaEditCell.xib b/SharedSources/MediaEditCell.xib
deleted file mode 100644
index 571785d73804acaba092f360cee9a675b8c475bd..0000000000000000000000000000000000000000
--- a/SharedSources/MediaEditCell.xib
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14868" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
-    <device id="retina4_7" orientation="portrait" appearance="light"/>
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14824"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
-        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <collectionReusableView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="U0b-qz-VRr" customClass="MediaEditCell" customModule="VLC" customModuleProvider="target">
-            <rect key="frame" x="0.0" y="0.0" width="375" height="86"/>
-            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-            <subviews>
-                <stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="QHO-Op-40P">
-                    <rect key="frame" x="12" y="12" width="351" height="62"/>
-                    <subviews>
-                        <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="checkboxEmpty" translatesAutoresizingMaskIntoConstraints="NO" id="RHG-II-xmF">
-                            <rect key="frame" x="0.0" y="21" width="20" height="20"/>
-                            <constraints>
-                                <constraint firstAttribute="width" constant="20" id="KHh-bO-FPO"/>
-                                <constraint firstAttribute="width" secondItem="RHG-II-xmF" secondAttribute="height" id="p2u-hc-SRe"/>
-                            </constraints>
-                        </imageView>
-                        <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="W4f-6Y-az7">
-                            <rect key="frame" x="40" y="0.0" width="62" height="62"/>
-                            <color key="backgroundColor" white="0.66666666669999997" alpha="1" colorSpace="calibratedWhite"/>
-                            <constraints>
-                                <constraint firstAttribute="width" secondItem="W4f-6Y-az7" secondAttribute="height" multiplier="1:1" id="0S0-Dm-pFV" userLabel="AudioAspect = 1:1"/>
-                                <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="52" id="N5E-7I-evU"/>
-                                <constraint firstAttribute="width" secondItem="W4f-6Y-az7" secondAttribute="height" multiplier="16:10" id="o2R-2I-WPK" userLabel="VideoAspectRatio"/>
-                            </constraints>
-                            <variation key="default">
-                                <mask key="constraints">
-                                    <exclude reference="o2R-2I-WPK"/>
-                                </mask>
-                            </variation>
-                        </imageView>
-                        <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="top" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="ZiN-xT-sWh">
-                            <rect key="frame" x="122" y="11.5" width="229" height="39"/>
-                            <subviews>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="22f-7o-NGo">
-                                    <rect key="frame" x="0.0" y="0.0" width="42" height="20.5"/>
-                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                                    <nil key="textColor"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                                <stackView opaque="NO" contentMode="scaleToFill" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="Gg7-zE-SB8">
-                                    <rect key="frame" x="0.0" y="25.5" width="68" height="13.5"/>
-                                    <subviews>
-                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eSL-7g-tbd" userLabel="duration">
-                                            <rect key="frame" x="0.0" y="0.0" width="30" height="13.5"/>
-                                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="11"/>
-                                            <nil key="textColor"/>
-                                            <nil key="highlightedColor"/>
-                                        </label>
-                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZKc-bz-v5I" userLabel="Size">
-                                            <rect key="frame" x="38" y="0.0" width="30" height="13.5"/>
-                                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="11"/>
-                                            <nil key="textColor"/>
-                                            <nil key="highlightedColor"/>
-                                        </label>
-                                    </subviews>
-                                </stackView>
-                            </subviews>
-                        </stackView>
-                        <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="list" translatesAutoresizingMaskIntoConstraints="NO" id="dR4-mi-lDQ">
-                            <rect key="frame" x="351" y="19" width="0.0" height="24"/>
-                            <color key="tintColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
-                        </imageView>
-                    </subviews>
-                </stackView>
-            </subviews>
-            <constraints>
-                <constraint firstItem="QHO-Op-40P" firstAttribute="top" secondItem="Lgw-oV-ncW" secondAttribute="top" constant="12" id="W5v-NW-IE1"/>
-                <constraint firstItem="QHO-Op-40P" firstAttribute="leading" secondItem="Lgw-oV-ncW" secondAttribute="leading" constant="12" id="caY-MD-M4Q"/>
-                <constraint firstItem="QHO-Op-40P" firstAttribute="bottom" secondItem="Lgw-oV-ncW" secondAttribute="bottom" constant="-12" id="wd3-UE-Kr9"/>
-                <constraint firstItem="Lgw-oV-ncW" firstAttribute="trailing" secondItem="QHO-Op-40P" secondAttribute="trailing" constant="12" id="y6V-5A-beP"/>
-            </constraints>
-            <viewLayoutGuide key="safeArea" id="Lgw-oV-ncW"/>
-            <connections>
-                <outlet property="AudioAspectRatio" destination="0S0-Dm-pFV" id="fup-hh-pq5"/>
-                <outlet property="VideoAspectRatio" destination="o2R-2I-WPK" id="hQw-An-wIt"/>
-                <outlet property="checkboxImageView" destination="RHG-II-xmF" id="F6Y-7m-fPb"/>
-                <outlet property="dragImage" destination="dR4-mi-lDQ" id="562-Hu-qy4"/>
-                <outlet property="sizeLabel" destination="ZKc-bz-v5I" id="wmF-9r-Gew"/>
-                <outlet property="thumbnailImageView" destination="W4f-6Y-az7" id="qx7-8D-QJK"/>
-                <outlet property="timeLabel" destination="eSL-7g-tbd" id="qOK-gw-8qT"/>
-                <outlet property="titleLabel" destination="22f-7o-NGo" id="tOe-hv-WU6"/>
-            </connections>
-            <point key="canvasLocation" x="113.5" y="-207.5"/>
-        </collectionReusableView>
-    </objects>
-    <resources>
-        <image name="checkboxEmpty" width="22" height="22"/>
-        <image name="list" width="24" height="24"/>
-    </resources>
-</document>
diff --git a/SharedSources/MediaLibraryModel/AlbumModel.swift b/SharedSources/MediaLibraryModel/AlbumModel.swift
index d355a3dfd1998795902737410f59890a07f15c6f..75ed3b29e1a50b301eb3a5b64a18241c3a42f303 100644
--- a/SharedSources/MediaLibraryModel/AlbumModel.swift
+++ b/SharedSources/MediaLibraryModel/AlbumModel.swift
@@ -45,13 +45,6 @@ extension AlbumModel {
     }
 }
 
-// MARK: - Edit
-extension AlbumModel: EditableMLModel {
-    func editCellType() -> BaseCollectionViewCell.Type {
-        return MediaEditCell.self
-    }
-}
-
 // MARK: - Search
 extension VLCMLAlbum: SearchableMLModel {
     func contains(_ searchString: String) -> Bool {
diff --git a/SharedSources/MediaLibraryModel/ArtistModel.swift b/SharedSources/MediaLibraryModel/ArtistModel.swift
index 695132ffd55514484c3f1af9fd3391b97e5f32a9..e985d03af32f5af887805760793d02345896fb6f 100644
--- a/SharedSources/MediaLibraryModel/ArtistModel.swift
+++ b/SharedSources/MediaLibraryModel/ArtistModel.swift
@@ -45,13 +45,6 @@ extension ArtistModel {
     }
 }
 
-// MARK: - Edit
-extension ArtistModel: EditableMLModel {
-    func editCellType() -> BaseCollectionViewCell.Type {
-        return MediaEditCell.self
-    }
-}
-
 // MARK: - Search
 extension VLCMLArtist: SearchableMLModel {
     func contains(_ searchString: String) -> Bool {
diff --git a/SharedSources/MediaLibraryModel/CollectionModel.swift b/SharedSources/MediaLibraryModel/CollectionModel.swift
index 5bbbaf0996a067989004e69b24e0c23668bee487..438a24fedbaaa1be0f0032c40ca0f26975932245 100644
--- a/SharedSources/MediaLibraryModel/CollectionModel.swift
+++ b/SharedSources/MediaLibraryModel/CollectionModel.swift
@@ -73,13 +73,6 @@ class CollectionModel: MLBaseModel {
     }
 }
 
-// MARK: - Edit
-extension CollectionModel: EditableMLModel {
-    func editCellType() -> BaseCollectionViewCell.Type {
-        return MediaEditCell.self
-    }
-}
-
 // MARK: - MediaLibraryObserver
 extension CollectionModel: MediaLibraryObserver {
     func medialibrary(_ medialibrary: MediaLibraryService,
diff --git a/SharedSources/MediaLibraryModel/GenreModel.swift b/SharedSources/MediaLibraryModel/GenreModel.swift
index 2618947f535754ddad3736b0c27f90cd4ddc0798..c2350e7fa9069a1ed7d0f3afcce2ff93e23c8c29 100644
--- a/SharedSources/MediaLibraryModel/GenreModel.swift
+++ b/SharedSources/MediaLibraryModel/GenreModel.swift
@@ -76,12 +76,6 @@ extension GenreModel {
         updateView?()
     }
 }
-// MARK: - Edit
-extension GenreModel: EditableMLModel {
-    func editCellType() -> BaseCollectionViewCell.Type {
-        return MediaEditCell.self
-    }
-}
 
 // MARK: - Search
 extension VLCMLGenre: SearchableMLModel {
diff --git a/SharedSources/MediaLibraryModel/MediaLibraryBaseModel.swift b/SharedSources/MediaLibraryModel/MediaLibraryBaseModel.swift
index cb353fcd76548b74fe99910d574eb8f79498092f..7b3024c392cab3c81c62c72e4ea1ca3a26e759c5 100644
--- a/SharedSources/MediaLibraryModel/MediaLibraryBaseModel.swift
+++ b/SharedSources/MediaLibraryModel/MediaLibraryBaseModel.swift
@@ -64,10 +64,6 @@ extension MLBaseModel {
     }
 }
 
-protocol EditableMLModel {
-    func editCellType() -> BaseCollectionViewCell.Type
-}
-
 protocol SearchableMLModel {
     func contains(_ searchString: String) -> Bool
 }
diff --git a/SharedSources/MediaLibraryModel/PlaylistModel.swift b/SharedSources/MediaLibraryModel/PlaylistModel.swift
index ecddd64af40a7dabaca3744f72087407e3841533..a06378837bd6b4b81d2d6f8f3efae60256dd8293 100644
--- a/SharedSources/MediaLibraryModel/PlaylistModel.swift
+++ b/SharedSources/MediaLibraryModel/PlaylistModel.swift
@@ -68,13 +68,6 @@ extension PlaylistModel {
     }
 }
 
-// MARK: - Edit
-extension PlaylistModel: EditableMLModel {
-    func editCellType() -> BaseCollectionViewCell.Type {
-        return MediaEditCell.self
-    }
-}
-
 // MARK: - Search
 extension VLCMLPlaylist: SearchableMLModel {
     func contains(_ searchString: String) -> Bool {
diff --git a/SharedSources/MediaLibraryModel/TrackModel.swift b/SharedSources/MediaLibraryModel/TrackModel.swift
index 13da53b2c272e47f0593a5f56ccd28b5dbd0d1b3..4d875923494a6cb9fdf026b2096e16d532d06c25 100644
--- a/SharedSources/MediaLibraryModel/TrackModel.swift
+++ b/SharedSources/MediaLibraryModel/TrackModel.swift
@@ -45,13 +45,6 @@ extension TrackModel {
     }
 }
 
-// MARK: - Edit
-
-extension TrackModel: EditableMLModel {
-    func editCellType() -> BaseCollectionViewCell.Type {
-        return MediaEditCell.self
-    }
-}
 // MARK: - MediaLibraryObserver
 
 extension TrackModel: MediaLibraryObserver {
diff --git a/SharedSources/MediaLibraryModel/VideoGroupViewModel.swift b/SharedSources/MediaLibraryModel/VideoGroupViewModel.swift
index 3f78b22a189603ed718ed06c150c812e57580c9a..9a53cc620b0a191f2e427097e1b9ece5de881e14 100644
--- a/SharedSources/MediaLibraryModel/VideoGroupViewModel.swift
+++ b/SharedSources/MediaLibraryModel/VideoGroupViewModel.swift
@@ -77,14 +77,6 @@ private extension VideoGroupViewModel {
     }
 }
 
-// MARK: - Edit
-
-extension VideoGroupViewModel: EditableMLModel {
-    func editCellType() -> BaseCollectionViewCell.Type {
-        return MediaEditCell.self
-    }
-}
-
 // MARK: - VLCMLVideoGroup - Search
 
 extension VLCMLVideoGroup: SearchableMLModel {
diff --git a/SharedSources/MediaLibraryModel/VideoModel.swift b/SharedSources/MediaLibraryModel/VideoModel.swift
index cae789334fa9c1ffbd2e37d08f0dbdc3dd35de9d..7574e7c80927c2af9bd105f23a144d666fcb05a3 100644
--- a/SharedSources/MediaLibraryModel/VideoModel.swift
+++ b/SharedSources/MediaLibraryModel/VideoModel.swift
@@ -31,14 +31,6 @@ class VideoModel: MediaModel {
     }
 }
 
-// MARK: - Edit
-
-extension VideoModel: EditableMLModel {
-    func editCellType() -> BaseCollectionViewCell.Type {
-        return MediaEditCell.self
-    }
-}
-
 // MARK: - Sort
 
 extension VideoModel {
diff --git a/Sources/EditController.swift b/Sources/EditController.swift
index e12b2946dbd0c019fcaf68a3e2b02019fa0319ad..5e7624b1d421930f455871d229e462fcd079ef4c 100644
--- a/Sources/EditController.swift
+++ b/Sources/EditController.swift
@@ -10,7 +10,7 @@
  *****************************************************************************/
 
 protocol EditControllerDelegate: class {
-    func editController(editController: EditController, cellforItemAt indexPath: IndexPath) -> MediaEditCell?
+    func editController(editController: EditController, cellforItemAt indexPath: IndexPath) -> BaseCollectionViewCell?
     func editController(editController: EditController, present viewController: UIViewController)
 }
 
@@ -309,10 +309,17 @@ extension EditController: EditToolbarDelegate {
 extension EditController: UICollectionViewDelegate {
     func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
         selectedCellIndexPaths.insert(indexPath)
+        // Isolate selectionViewOverlay changes inside EditController
+        if let cell = collectionView.cellForItem(at: indexPath) as? BaseCollectionViewCell {
+            cell.selectionViewOverlay?.isHidden = false
+        }
     }
 
     func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
         selectedCellIndexPaths.remove(indexPath)
+        if let cell = collectionView.cellForItem(at: indexPath) as? BaseCollectionViewCell {
+            cell.selectionViewOverlay?.isHidden = true
+        }
     }
 }
 
@@ -324,17 +331,20 @@ extension EditController: UICollectionViewDataSource {
     }
 
     func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
-        guard let editCell = (model as? EditableMLModel)?.editCellType() else {
-            assertionFailure("The category either doesn't implement EditableMLModel or doesn't have a editcellType defined")
-            return UICollectionViewCell()
-        }
-        if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: editCell.defaultReuseIdentifier,
-                                                         for: indexPath) as? MediaEditCell {
+        if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: model.cellType.defaultReuseIdentifier,
+                                                         for: indexPath) as? BaseCollectionViewCell {
             cell.media = model.anyfiles[indexPath.row]
             cell.isSelected = selectedCellIndexPaths.contains(indexPath)
             cell.isAccessibilityElement = true
-            if let collectionModel = model as? CollectionModel, collectionModel.mediaCollection is VLCMLPlaylist {
-                cell.dragImage.isHidden = false
+            cell.checkImageView?.isHidden = false
+
+            if let cell = cell as? MediaCollectionViewCell,
+                let collectionModel = model as? CollectionModel, collectionModel.mediaCollection is VLCMLPlaylist {
+                cell.dragIndicatorImageView.isHidden = false
+            }
+
+            if cell.isSelected {
+                cell.selectionViewOverlay?.isHidden = false
             }
             return cell
         } else {
@@ -362,15 +372,36 @@ extension EditController: UICollectionViewDataSource {
 // MARK: - UICollectionViewDelegateFlowLayout
 
 extension EditController: UICollectionViewDelegateFlowLayout {
-    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
-        let contentInset = collectionView.contentInset
-        // FIXME: 5 should be cell padding, but not usable maybe static?
-        let insetToRemove = contentInset.left + contentInset.right + (5 * 2)
-        var width = collectionView.frame.width
+    func collectionView(_ collectionView: UICollectionView,
+                        layout collectionViewLayout: UICollectionViewLayout,
+                        sizeForItemAt indexPath: IndexPath) -> CGSize {
+        var toWidth = collectionView.frame.size.width
         if #available(iOS 11.0, *) {
-            width = collectionView.safeAreaLayoutGuide.layoutFrame.width
+            toWidth = collectionView.safeAreaLayoutGuide.layoutFrame.width
         }
-        return MediaEditCell.cellSizeForWidth(width - insetToRemove)
+
+        return model.cellType.cellSizeForWidth(toWidth)
+    }
+
+    func collectionView(_ collectionView: UICollectionView,
+                        layout collectionViewLayout: UICollectionViewLayout,
+                        insetForSectionAt section: Int) -> UIEdgeInsets {
+        return UIEdgeInsets(top: model.cellType.edgePadding,
+                            left: model.cellType.edgePadding,
+                            bottom: model.cellType.edgePadding,
+                            right: model.cellType.edgePadding)
+    }
+
+    func collectionView(_ collectionView: UICollectionView,
+                        layout collectionViewLayout: UICollectionViewLayout,
+                        minimumLineSpacingForSectionAt section: Int) -> CGFloat {
+        return model.cellType.edgePadding
+    }
+
+    func collectionView(_ collectionView: UICollectionView,
+                        layout collectionViewLayout: UICollectionViewLayout,
+                        minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
+        return model.cellType.interItemPadding
     }
 }
 
diff --git a/Sources/MediaCategories/MediaCategoryViewController.swift b/Sources/MediaCategories/MediaCategoryViewController.swift
index d107b4eeb3813e8dd18b1d337b766d8ee01bdda8..4239ae702907ee15ea533fc5f4c35b5865874520 100644
--- a/Sources/MediaCategories/MediaCategoryViewController.swift
+++ b/Sources/MediaCategories/MediaCategoryViewController.swift
@@ -92,13 +92,6 @@ class MediaCategoryViewController: UICollectionViewController, UISearchBarDelega
         return emptyView
     }()
 
-    let editCollectionViewLayout: UICollectionViewFlowLayout = {
-        let editCollectionViewLayout = UICollectionViewFlowLayout()
-        editCollectionViewLayout.minimumLineSpacing = 1
-        editCollectionViewLayout.minimumInteritemSpacing = 0
-        return editCollectionViewLayout
-    }()
-
     @available(*, unavailable)
     init() {
         fatalError()
@@ -301,16 +294,8 @@ class MediaCategoryViewController: UICollectionViewController, UISearchBarDelega
 
         PlaybackService.sharedInstance().setPlayerHidden(editing)
 
-        let layoutToBe = editing ? editCollectionViewLayout : UICollectionViewFlowLayout()
-        collectionView?.setCollectionViewLayout(layoutToBe, animated: false, completion: {
-            [unowned self] finished in
-            guard finished else {
-                assertionFailure("VLCMediaSubcategoryViewController: Edit layout transition failed.")
-                return
-            }
-            self.searchBarConstraint?.constant = -self.searchBarSize
-            self.reloadData()
-        })
+        searchBarConstraint?.constant = -self.searchBarSize
+        reloadData()
     }
 
     private func displayEditToolbar() {
@@ -583,8 +568,8 @@ extension MediaCategoryViewController: ActionSheetSortSectionHeaderDelegate {
 // MARK: - EditControllerDelegate
 
 extension MediaCategoryViewController: EditControllerDelegate {
-    func editController(editController: EditController, cellforItemAt indexPath: IndexPath) -> MediaEditCell? {
-        return collectionView.cellForItem(at: indexPath) as? MediaEditCell
+    func editController(editController: EditController, cellforItemAt indexPath: IndexPath) -> BaseCollectionViewCell? {
+        return collectionView.cellForItem(at: indexPath) as? BaseCollectionViewCell
     }
 
     func editController(editController: EditController,
@@ -598,10 +583,6 @@ private extension MediaCategoryViewController {
     func setupCollectionView() {
         let cellNib = UINib(nibName: model.cellType.nibName, bundle: nil)
         collectionView?.register(cellNib, forCellWithReuseIdentifier: model.cellType.defaultReuseIdentifier)
-        if let editCell = (model as? EditableMLModel)?.editCellType() {
-            let editCellNib = UINib(nibName: editCell.nibName, bundle: nil)
-            collectionView?.register(editCellNib, forCellWithReuseIdentifier: editCell.defaultReuseIdentifier)
-        }
         collectionView.allowsMultipleSelection = true
         collectionView?.backgroundColor = PresentationTheme.current.colors.background
         collectionView?.alwaysBounceVertical = true
diff --git a/Sources/MediaCategoryCells/BaseCollectionViewCell.swift b/Sources/MediaCategoryCells/BaseCollectionViewCell.swift
index bd8b324e7069415c9ef467dddd57e44bb7f4a4ee..1059a9dfcf22d650299bcd3f81dabbf17fba2fc3 100644
--- a/Sources/MediaCategoryCells/BaseCollectionViewCell.swift
+++ b/Sources/MediaCategoryCells/BaseCollectionViewCell.swift
@@ -24,6 +24,9 @@ class BaseCollectionViewCell: UICollectionViewCell {
 
     var media: VLCMLObject?
 
+    private(set) var checkImageView: UIImageView?
+    private(set) var selectionViewOverlay: UIView?
+
     class func numberOfColumns(for width: CGFloat) -> CGFloat {
         return CGFloat.zero
     }
diff --git a/Sources/MediaCategoryCells/MediaCollectionViewCell.swift b/Sources/MediaCategoryCells/MediaCollectionViewCell.swift
index b319355774426afd3c325c0536f3de50d0c956c0..1f4e7fde15d0d9d6644fd1b083bca4f0de6c372c 100644
--- a/Sources/MediaCategoryCells/MediaCollectionViewCell.swift
+++ b/Sources/MediaCategoryCells/MediaCollectionViewCell.swift
@@ -20,6 +20,10 @@ class MediaCollectionViewCell: BaseCollectionViewCell {
     @IBOutlet private weak var newLabel: UILabel!
     @IBOutlet private weak var thumbnailWidth: NSLayoutConstraint!
 
+    @IBOutlet weak var checkboxImageView: UIImageView!
+    @IBOutlet weak var selectionOverlay: UIView!
+    @IBOutlet weak var dragIndicatorImageView: UIImageView!
+
     override var media: VLCMLObject? {
         didSet {
             if let media = media as? VLCMLMedia {
@@ -42,6 +46,21 @@ class MediaCollectionViewCell: BaseCollectionViewCell {
         }
     }
 
+    override var checkImageView: UIImageView? {
+        return checkboxImageView
+    }
+
+    override var selectionViewOverlay: UIView? {
+        return selectionOverlay
+    }
+
+    override var isSelected: Bool {
+        didSet {
+            checkboxImageView.image = isSelected ? UIImage(named: "checkboxSelected")
+                : UIImage(named: "checkboxEmpty")
+        }
+    }
+
     override func awakeFromNib() {
         super.awakeFromNib()
         if #available(iOS 11.0, *) {
@@ -59,6 +78,7 @@ class MediaCollectionViewCell: BaseCollectionViewCell {
         backgroundColor = PresentationTheme.current.colors.background
         titleLabel?.textColor = PresentationTheme.current.colors.cellTextColor
         descriptionLabel?.textColor = PresentationTheme.current.colors.cellDetailTextColor
+        dragIndicatorImageView.tintColor = PresentationTheme.current.colors.cellDetailTextColor
     }
 
     func update(audiotrack: VLCMLMedia) {
@@ -151,5 +171,8 @@ class MediaCollectionViewCell: BaseCollectionViewCell {
         descriptionLabel.text = ""
         thumbnailView.image = nil
         newLabel.isHidden = true
+        checkboxImageView.isHidden = true
+        selectionOverlay.isHidden = true
+        dragIndicatorImageView.isHidden = true
     }
 }
diff --git a/Sources/MediaCategoryCells/MediaCollectionViewCell.xib b/Sources/MediaCategoryCells/MediaCollectionViewCell.xib
index efeff20f89e319d37465b067ccd51ff7c043a3fa..e41795fd532ac30700a61dcaf549cc88b2672d21 100644
--- a/Sources/MediaCategoryCells/MediaCollectionViewCell.xib
+++ b/Sources/MediaCategoryCells/MediaCollectionViewCell.xib
@@ -1,11 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
-    <device id="retina4_7" orientation="portrait">
-        <adaptation id="fullscreen"/>
-    </device>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14868" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14824"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -56,15 +54,36 @@
                                             </label>
                                         </subviews>
                                     </stackView>
+                                    <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="list" translatesAutoresizingMaskIntoConstraints="NO" id="f9J-sb-sdM">
+                                        <rect key="frame" x="480" y="28" width="24" height="24"/>
+                                        <color key="tintColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="24" id="Cdn-hR-SHJ"/>
+                                            <constraint firstAttribute="height" constant="24" id="EaV-Ae-GP2"/>
+                                        </constraints>
+                                    </imageView>
                                 </subviews>
                             </stackView>
+                            <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vQV-tE-gv0">
+                                <rect key="frame" x="0.0" y="0.0" width="480" height="80"/>
+                                <color key="backgroundColor" red="0.94509803920000002" green="0.49019607840000001" blue="0.0" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
+                            </view>
+                            <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="checkboxEmpty" translatesAutoresizingMaskIntoConstraints="NO" id="Uhx-qs-Aow">
+                                <rect key="frame" x="16" y="28" width="24" height="24"/>
+                            </imageView>
                         </subviews>
                         <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                         <constraints>
+                            <constraint firstItem="vQV-tE-gv0" firstAttribute="width" secondItem="bhw-Aa-3Q7" secondAttribute="width" id="Dqf-E3-sXZ"/>
+                            <constraint firstItem="Uhx-qs-Aow" firstAttribute="centerY" secondItem="DpW-xo-rll" secondAttribute="centerY" id="Nii-BJ-jmJ"/>
+                            <constraint firstItem="Uhx-qs-Aow" firstAttribute="centerX" secondItem="DpW-xo-rll" secondAttribute="centerX" id="Pid-97-YyF"/>
                             <constraint firstItem="jwA-4O-tgL" firstAttribute="leading" secondItem="bhw-Aa-3Q7" secondAttribute="leading" id="YQR-FC-YG0"/>
                             <constraint firstAttribute="bottom" secondItem="jwA-4O-tgL" secondAttribute="bottom" id="cPv-gK-orc"/>
                             <constraint firstItem="jwA-4O-tgL" firstAttribute="top" secondItem="bhw-Aa-3Q7" secondAttribute="top" id="gXu-Td-kve"/>
+                            <constraint firstItem="vQV-tE-gv0" firstAttribute="height" secondItem="bhw-Aa-3Q7" secondAttribute="height" id="m5l-X4-Pqt"/>
                             <constraint firstAttribute="trailing" secondItem="jwA-4O-tgL" secondAttribute="trailing" id="mtd-yR-U0o"/>
+                            <constraint firstItem="vQV-tE-gv0" firstAttribute="centerY" secondItem="bhw-Aa-3Q7" secondAttribute="centerY" id="pcz-sz-DBh"/>
+                            <constraint firstItem="vQV-tE-gv0" firstAttribute="centerX" secondItem="bhw-Aa-3Q7" secondAttribute="centerX" id="xBV-Z6-LrT"/>
                         </constraints>
                     </view>
                 </subviews>
@@ -78,8 +97,11 @@
             <viewLayoutGuide key="safeArea" id="L0K-f1-QjV"/>
             <size key="customSize" width="480" height="213"/>
             <connections>
+                <outlet property="checkboxImageView" destination="Uhx-qs-Aow" id="VCh-49-ONi"/>
                 <outlet property="descriptionLabel" destination="5N8-js-t0W" id="8YA-5P-R6q"/>
+                <outlet property="dragIndicatorImageView" destination="f9J-sb-sdM" id="t3G-VX-68j"/>
                 <outlet property="newLabel" destination="Klo-Bq-5nI" id="8jr-y0-SoR"/>
+                <outlet property="selectionOverlay" destination="vQV-tE-gv0" id="xIe-R7-AjG"/>
                 <outlet property="thumbnailView" destination="DpW-xo-rll" id="U2i-pe-qCM"/>
                 <outlet property="thumbnailWidth" destination="vgz-Bg-lit" id="ZZf-xz-EIV"/>
                 <outlet property="titleLabel" destination="Zkn-vN-SN4" id="H77-N8-sRM"/>
@@ -87,4 +109,8 @@
             <point key="canvasLocation" x="110" y="-53.5"/>
         </collectionViewCell>
     </objects>
+    <resources>
+        <image name="checkboxEmpty" width="24" height="24"/>
+        <image name="list" width="24" height="24"/>
+    </resources>
 </document>
diff --git a/Sources/MediaCategoryCells/MovieCollectionViewCell.swift b/Sources/MediaCategoryCells/MovieCollectionViewCell.swift
index 2f3de7480e2539a0da2236a5e48ec58c939f007f..37e91fa54494f738c325f667b510c620ef4bd1d6 100644
--- a/Sources/MediaCategoryCells/MovieCollectionViewCell.swift
+++ b/Sources/MediaCategoryCells/MovieCollectionViewCell.swift
@@ -13,6 +13,7 @@
 import Foundation
 
 class MovieCollectionViewCell: BaseCollectionViewCell {
+    @IBOutlet weak var checkboxImageView: UIImageView!
 
     @IBOutlet weak var thumbnailView: UIImageView!
     @IBOutlet weak var titleLabel: UILabel!
@@ -21,6 +22,9 @@ class MovieCollectionViewCell: BaseCollectionViewCell {
     @IBOutlet weak var progressView: UIProgressView!
     @IBOutlet weak var collectionOverlay: UIView!
     @IBOutlet weak var numberOfTracks: UILabel!
+
+    @IBOutlet weak var selectionOverlay: UIView!
+
     override class var edgePadding: CGFloat {
         return 12.5
     }
@@ -28,6 +32,21 @@ class MovieCollectionViewCell: BaseCollectionViewCell {
         return 7.5
     }
 
+    override var isSelected: Bool {
+        didSet {
+            checkboxImageView.image = isSelected ? UIImage(named: "checkboxSelected")
+                : UIImage(named: "checkboxEmpty")
+        }
+    }
+
+    override var checkImageView: UIImageView? {
+        return checkboxImageView
+    }
+
+    override var selectionViewOverlay: UIView? {
+        return selectionOverlay
+    }
+
     override var media: VLCMLObject? {
         didSet {
             if let movie = media as? VLCMLMedia {
@@ -134,5 +153,7 @@ class MovieCollectionViewCell: BaseCollectionViewCell {
         newLabel.isHidden = true
         collectionOverlay.isHidden = true
         numberOfTracks.text = ""
+        checkboxImageView.isHidden = true
+        selectionOverlay.isHidden = true
     }
 }
diff --git a/Sources/MediaCategoryCells/MovieCollectionViewCell.xib b/Sources/MediaCategoryCells/MovieCollectionViewCell.xib
index 2b80a2f5bf6cfc27e988417a4826ab8f4954fc25..634098aa55ec07c336003c9cb4141b69b754ac8b 100644
--- a/Sources/MediaCategoryCells/MovieCollectionViewCell.xib
+++ b/Sources/MediaCategoryCells/MovieCollectionViewCell.xib
@@ -78,36 +78,58 @@
                         </constraints>
                         <viewLayoutGuide key="safeArea" id="HVo-IJ-YFl"/>
                     </view>
+                    <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UTe-u3-NWI">
+                        <rect key="frame" x="0.0" y="0.0" width="309" height="193"/>
+                        <color key="backgroundColor" red="0.94509803920000002" green="0.49019607840000001" blue="0.0" alpha="0.39982421875000002" colorSpace="custom" customColorSpace="sRGB"/>
+                    </view>
+                    <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="checkboxEmpty" translatesAutoresizingMaskIntoConstraints="NO" id="hBS-N5-2jA">
+                        <rect key="frame" x="275" y="159" width="24" height="24"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="24" id="XDD-Ik-eSa"/>
+                            <constraint firstAttribute="width" constant="24" id="hmt-6D-9QW"/>
+                        </constraints>
+                    </imageView>
                 </subviews>
             </view>
             <constraints>
                 <constraint firstItem="iWM-y0-SUe" firstAttribute="bottom" relation="lessThanOrEqual" secondItem="YyZ-zI-cD7" secondAttribute="bottom" id="3VI-xW-KQ4"/>
                 <constraint firstItem="iWM-y0-SUe" firstAttribute="leading" secondItem="YyZ-zI-cD7" secondAttribute="leading" id="43e-Na-uN0"/>
+                <constraint firstItem="UTe-u3-NWI" firstAttribute="leading" secondItem="jmi-G0-XOo" secondAttribute="leading" id="8WQ-jt-pW6"/>
                 <constraint firstItem="WKB-IM-zLb" firstAttribute="centerY" secondItem="jmi-G0-XOo" secondAttribute="centerY" id="9h3-zd-Ied"/>
                 <constraint firstItem="WKB-IM-zLb" firstAttribute="width" secondItem="jmi-G0-XOo" secondAttribute="width" multiplier="0.5" id="AyM-ua-RM1"/>
                 <constraint firstItem="4zQ-Mf-dw7" firstAttribute="leading" secondItem="BvH-0B-sVS" secondAttribute="leading" id="Ijd-61-ouV"/>
                 <constraint firstItem="WKB-IM-zLb" firstAttribute="leading" secondItem="jmi-G0-XOo" secondAttribute="centerX" id="Klj-oS-Zn0"/>
+                <constraint firstItem="hBS-N5-2jA" firstAttribute="bottom" secondItem="UTe-u3-NWI" secondAttribute="bottom" constant="-10" id="OvE-CT-KCf"/>
                 <constraint firstAttribute="trailing" secondItem="iWM-y0-SUe" secondAttribute="trailing" id="PrI-Yq-B9j"/>
                 <constraint firstItem="iWM-y0-SUe" firstAttribute="leading" secondItem="X8l-k0-1oc" secondAttribute="leading" id="Rq2-SS-aA2"/>
+                <constraint firstItem="UTe-u3-NWI" firstAttribute="trailing" secondItem="jmi-G0-XOo" secondAttribute="trailing" id="SJY-g5-oV0"/>
                 <constraint firstItem="X8l-k0-1oc" firstAttribute="leading" secondItem="jmi-G0-XOo" secondAttribute="leading" id="WvI-Ra-xlu"/>
                 <constraint firstItem="iWM-y0-SUe" firstAttribute="top" secondItem="YyZ-zI-cD7" secondAttribute="top" id="Y4b-8y-MOG"/>
                 <constraint firstItem="X8l-k0-1oc" firstAttribute="trailing" secondItem="jmi-G0-XOo" secondAttribute="trailing" id="d8L-w5-ba5"/>
                 <constraint firstItem="X8l-k0-1oc" firstAttribute="bottom" secondItem="jmi-G0-XOo" secondAttribute="bottom" id="dWh-bB-nfd"/>
+                <constraint firstItem="UTe-u3-NWI" firstAttribute="bottom" secondItem="jmi-G0-XOo" secondAttribute="bottom" id="dp1-hW-Twu"/>
+                <constraint firstItem="hBS-N5-2jA" firstAttribute="trailing" secondItem="UTe-u3-NWI" secondAttribute="trailing" constant="-10" id="gNo-ax-rg5"/>
+                <constraint firstItem="UTe-u3-NWI" firstAttribute="top" secondItem="jmi-G0-XOo" secondAttribute="top" id="jBL-cf-d2I"/>
                 <constraint firstItem="WKB-IM-zLb" firstAttribute="height" secondItem="jmi-G0-XOo" secondAttribute="height" id="rlj-bJ-yVp"/>
                 <constraint firstItem="jmi-G0-XOo" firstAttribute="width" secondItem="YyZ-zI-cD7" secondAttribute="width" id="t8h-GJ-GvI"/>
             </constraints>
             <viewLayoutGuide key="safeArea" id="BvH-0B-sVS"/>
             <size key="customSize" width="309" height="230"/>
             <connections>
+                <outlet property="checkboxImageView" destination="hBS-N5-2jA" id="pCm-ST-YdN"/>
                 <outlet property="collectionOverlay" destination="WKB-IM-zLb" id="uPK-1i-9Jc"/>
                 <outlet property="descriptionLabel" destination="oac-dS-Qcd" id="1iJ-b6-gC6"/>
                 <outlet property="newLabel" destination="Aby-eq-q1j" id="4rD-oo-gdq"/>
                 <outlet property="numberOfTracks" destination="DBg-2t-TeB" id="0QT-uN-5fZ"/>
                 <outlet property="progressView" destination="X8l-k0-1oc" id="mf9-zf-3ya"/>
+                <outlet property="selectionOverlay" destination="UTe-u3-NWI" id="h7a-Ck-88y"/>
                 <outlet property="thumbnailView" destination="jmi-G0-XOo" id="gMW-XK-9MV"/>
                 <outlet property="titleLabel" destination="4zQ-Mf-dw7" id="iGP-8x-anz"/>
             </connections>
             <point key="canvasLocation" x="-99.5" y="136"/>
         </collectionViewCell>
     </objects>
+    <resources>
+        <image name="checkboxEmpty" width="24" height="24"/>
+    </resources>
 </document>
diff --git a/Sources/MediaEditCell.swift b/Sources/MediaEditCell.swift
deleted file mode 100644
index f599386a633baa0298d550c33661aed2d99d122f..0000000000000000000000000000000000000000
--- a/Sources/MediaEditCell.swift
+++ /dev/null
@@ -1,178 +0,0 @@
-/*****************************************************************************
- * VLCMediaViewEditCell.swift
- *
- * Copyright © 2018 VLC authors and VideoLAN
- * Copyright © 2018 Videolabs
- *
- * Authors: Soomin Lee <bubu@mikan.io>
- *          Carola Nitz <nitz.carola@googlemail.com>
- *
- * Refer to the COPYING file of the official project for license.
- *****************************************************************************/
-
-class MediaEditCell: BaseCollectionViewCell {
-
-    static let height: CGFloat = 88
-
-    @IBOutlet weak var checkboxImageView: UIImageView!
-    @IBOutlet weak var thumbnailImageView: UIImageView!
-    @IBOutlet weak var titleLabel: UILabel!
-    @IBOutlet weak var timeLabel: UILabel!
-    @IBOutlet weak var sizeLabel: UILabel!
-    @IBOutlet weak var dragImage: UIImageView!
-    @IBOutlet weak var VideoAspectRatio: NSLayoutConstraint!
-    @IBOutlet weak var AudioAspectRatio: NSLayoutConstraint!
-
-    override var media: VLCMLObject? {
-        didSet {
-            if let media = media as? VLCMLMedia {
-                if media.type() == .audio {
-                    updateForAudio(audio: media)
-                } else {
-                    updateForMovie(movie: media)
-                }
-            } else if let artist = media as? VLCMLArtist {
-                updateForArtist(artist: artist)
-            } else if let album = media as? VLCMLAlbum {
-                updateForAlbum(album: album)
-            } else if let genre = media as? VLCMLGenre {
-                updateForGenre(genre: genre)
-            } else if let playlist = media as? VLCMLPlaylist {
-                updateForPlaylist(playlist: playlist)
-            } else if let videoGroup = media as? VLCMLVideoGroup {
-                update(videoGroup: videoGroup)
-            } else {
-                assertionFailure("MediaEditCell: media: Needs to be of a supported Type.")
-            }
-        }
-    }
-
-    override func awakeFromNib() {
-        super.awakeFromNib()
-        if #available(iOS 11.0, *) {
-            thumbnailImageView.accessibilityIgnoresInvertColors = true
-        }
-        thumbnailImageView.clipsToBounds = true
-        NotificationCenter.default.addObserver(self, selector: #selector(themeDidChange), name: .VLCThemeDidChangeNotification, object: nil)
-        themeDidChange()
-    }
-
-    @objc fileprivate func themeDidChange() {
-        backgroundColor = PresentationTheme.current.colors.background
-        titleLabel.textColor = PresentationTheme.current.colors.cellTextColor
-        timeLabel.textColor = PresentationTheme.current.colors.cellDetailTextColor
-        sizeLabel.textColor = PresentationTheme.current.colors.cellTextColor
-        dragImage.tintColor = PresentationTheme.current.colors.cellDetailTextColor
-    }
-
-    func updateForMovie(movie: VLCMLMedia) {
-        thumbnailImageView.layer.cornerRadius = 3
-        AudioAspectRatio.isActive = false
-        VideoAspectRatio.isActive = true
-        titleLabel.text = movie.title
-        accessibilityLabel = movie.accessibilityText(editing: true)
-        timeLabel.text = movie.mediaDuration()
-        sizeLabel.text = movie.formatSize()
-        thumbnailImageView.image = movie.thumbnailImage()
-    }
-
-    func updateForAudio(audio: VLCMLMedia) {
-        titleLabel.text = audio.title
-        accessibilityLabel = audio.accessibilityText(editing: true)
-        timeLabel.text = audio.mediaDuration()
-        sizeLabel.text = audio.formatSize()
-        thumbnailImageView.image = audio.thumbnailImage()
-        thumbnailImageView.layer.masksToBounds = true
-        thumbnailImageView.layer.cornerRadius = thumbnailImageView.frame.size.height / 2
-    }
-
-    func updateForArtist(artist: VLCMLArtist) {
-        titleLabel.text = artist.artistName()
-        accessibilityLabel = artist.accessibilityText()
-        timeLabel.text = artist.numberOfTracksString()
-        thumbnailImageView.layer.masksToBounds = true
-        thumbnailImageView.layer.cornerRadius = thumbnailImageView.frame.size.height / 2
-        thumbnailImageView.image = artist.thumbnail()
-    }
-
-    func updateForAlbum(album: VLCMLAlbum) {
-        titleLabel.text = album.albumName()
-        accessibilityLabel = album.accessibilityText(editing: true)
-        timeLabel.text = album.albumArtistName()
-        sizeLabel.text = album.numberOfTracksString()
-        thumbnailImageView.image = album.thumbnail()
-    }
-
-    func updateForGenre(genre: VLCMLGenre) {
-        titleLabel.text = genre.name
-        accessibilityLabel = genre.accessibilityText()
-        timeLabel.text = genre.numberOfTracksString()
-        thumbnailImageView.layer.masksToBounds = true
-        thumbnailImageView.layer.cornerRadius = thumbnailImageView.frame.size.height / 2
-        thumbnailImageView.image = genre.thumbnail()
-    }
-
-    func updateForPlaylist(playlist: VLCMLPlaylist) {
-        thumbnailImageView.layer.cornerRadius = 3
-        AudioAspectRatio.isActive = false
-        VideoAspectRatio.isActive = true
-        titleLabel.text = playlist.name
-        accessibilityLabel = playlist.accessibilityText()
-        timeLabel.text = playlist.numberOfTracksString()
-        thumbnailImageView.image = playlist.thumbnail()
-    }
-
-    func update(videoGroup: VLCMLVideoGroup) {
-        thumbnailImageView.layer.cornerRadius = 3
-        AudioAspectRatio.isActive = false
-        VideoAspectRatio.isActive = true
-        titleLabel.text = videoGroup.name()
-        accessibilityLabel = videoGroup.accessibilityText()
-        timeLabel.text = videoGroup.numberOfTracksString()
-        thumbnailImageView.image = videoGroup.thumbnail()
-    }
-
-    override var isSelected: Bool {
-        didSet {
-            checkboxImageView.image = isSelected ? UIImage(named: "checkboxSelected")
-                : UIImage(named: "checkboxEmpty")
-        }
-    }
-
-    override class func numberOfColumns(for width: CGFloat) -> CGFloat {
-        if width <= DeviceWidth.iPhonePortrait.rawValue {
-            return 1
-        } else if width <= DeviceWidth.iPhoneLandscape.rawValue {
-            return 2
-        } else {
-            return 3
-        }
-    }
-
-    override class func cellSizeForWidth(_ width: CGFloat) -> CGSize {
-        let numberOfCells: CGFloat = numberOfColumns(for: width)
-
-        // We have the number of cells and we always have numberofCells + 1 interItemPadding spaces.
-        //
-        // edgePadding-interItemPadding-[Cell]-interItemPadding-[Cell]-interItemPadding-edgePadding
-        //
-
-        let overallWidth = width - (2 * edgePadding)
-        let overallCellWidthWithoutPadding = overallWidth - (numberOfCells + 1) * interItemPadding
-        let cellWidth = floor(overallCellWidthWithoutPadding / numberOfCells)
-
-        return CGSize(width: cellWidth, height: height)
-    }
-    override func prepareForReuse() {
-        super.prepareForReuse()
-        titleLabel.text = ""
-        timeLabel.text = ""
-        sizeLabel.text = ""
-        accessibilityLabel = ""
-        thumbnailImageView.image = nil
-        isSelected = false
-        thumbnailImageView.layer.cornerRadius = 0
-        AudioAspectRatio.isActive = true
-        VideoAspectRatio.isActive = false
-    }
-}
diff --git a/VLC.xcodeproj/project.pbxproj b/VLC.xcodeproj/project.pbxproj
index 736f686775e32fc042b17d22bbd42c23d7155fce..e6e84aa6ff0da508b6e6a78425bed28cfe46277c 100644
--- a/VLC.xcodeproj/project.pbxproj
+++ b/VLC.xcodeproj/project.pbxproj
@@ -62,7 +62,6 @@
 		419A2C681F37A4B70069D224 /* VLCStringsForLocalization.m in Sources */ = {isa = PBXBuildFile; fileRef = 419A2C651F37A4B70069D224 /* VLCStringsForLocalization.m */; };
 		419D7F051F54176900AF69A2 /* VLCTimeNavigationTitleView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 419D7F041F54176900AF69A2 /* VLCTimeNavigationTitleView.xib */; };
 		41A780E52241EBCD0034BA74 /* CollectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4120863922323E87006A6630 /* CollectionModel.swift */; };
-		41B4DA3E21400E8E000BA27D /* MediaEditCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41B4DA3D21400E8E000BA27D /* MediaEditCell.xib */; };
 		41B93C011A53833B00102E8B /* VLCProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 41B93C001A53833B00102E8B /* VLCProgressView.m */; };
 		41B93C051A53835300102E8B /* VLCCloudServiceCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 41B93C031A53835300102E8B /* VLCCloudServiceCell.m */; };
 		41B93C081A53853B00102E8B /* VLCCloudServiceCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41B93C071A53853B00102E8B /* VLCCloudServiceCell.xib */; };
@@ -245,7 +244,6 @@
 		81334053F6D89AB90E14A1C3 /* libPods-VLC-iOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 91CCB170FBC97B6B93B99E0A /* libPods-VLC-iOSTests.a */; };
 		8D144D6322298E8E00984C46 /* AudioMiniPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D144D6222298E8E00984C46 /* AudioMiniPlayer.swift */; };
 		8D15A1ED22A9603300CFA758 /* ActionSheetSortSectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D15A1EC22A9603300CFA758 /* ActionSheetSortSectionHeader.swift */; };
-		8D222DC220F779F1009C0D34 /* MediaEditCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D222DC120F779F1009C0D34 /* MediaEditCell.swift */; };
 		8D2AD4D822786F4000393833 /* AddToPlaylistViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D2AD4D722786F4000393833 /* AddToPlaylistViewController.swift */; };
 		8D2AD4DA227AEE8E00393833 /* AddToPlaylistView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D2AD4D9227AEE8E00393833 /* AddToPlaylistView.xib */; };
 		8D3B4C0E2226E49A00B9F652 /* AudioMiniPlayer.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D3B4C0D2226E49A00B9F652 /* AudioMiniPlayer.xib */; };
@@ -536,7 +534,6 @@
 		419D7F041F54176900AF69A2 /* VLCTimeNavigationTitleView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = VLCTimeNavigationTitleView.xib; path = Resources/VLCTimeNavigationTitleView.xib; sourceTree = SOURCE_ROOT; };
 		41B0BC861F73ED7D0063BA26 /* VLC-iOSUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "VLC-iOSUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		41B0BC8A1F73ED7D0063BA26 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		41B4DA3D21400E8E000BA27D /* MediaEditCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = MediaEditCell.xib; path = SharedSources/MediaEditCell.xib; sourceTree = "<group>"; };
 		41B93BFF1A53833B00102E8B /* VLCProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCProgressView.h; path = Sources/VLCProgressView.h; sourceTree = SOURCE_ROOT; };
 		41B93C001A53833B00102E8B /* VLCProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCProgressView.m; path = Sources/VLCProgressView.m; sourceTree = SOURCE_ROOT; };
 		41B93C021A53835300102E8B /* VLCCloudServiceCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCCloudServiceCell.h; path = Sources/VLCCloudServiceCell.h; sourceTree = SOURCE_ROOT; };
@@ -825,7 +822,6 @@
 		7FC9CCF39DD8843873A42D34 /* Pods-VLC-iOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VLC-iOSTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-VLC-iOSTests/Pods-VLC-iOSTests.release.xcconfig"; sourceTree = "<group>"; };
 		8D144D6222298E8E00984C46 /* AudioMiniPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioMiniPlayer.swift; sourceTree = "<group>"; };
 		8D15A1EC22A9603300CFA758 /* ActionSheetSortSectionHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionSheetSortSectionHeader.swift; sourceTree = "<group>"; };
-		8D222DC120F779F1009C0D34 /* MediaEditCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MediaEditCell.swift; path = Sources/MediaEditCell.swift; sourceTree = "<group>"; };
 		8D2AD4D722786F4000393833 /* AddToPlaylistViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AddToPlaylistViewController.swift; path = Sources/AddToPlaylistViewController.swift; sourceTree = "<group>"; };
 		8D2AD4D9227AEE8E00393833 /* AddToPlaylistView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AddToPlaylistView.xib; sourceTree = "<group>"; };
 		8D3B4C0D2226E49A00B9F652 /* AudioMiniPlayer.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AudioMiniPlayer.xib; sourceTree = "<group>"; };
@@ -1314,10 +1310,8 @@
 				8DD651B0208F62B70052EE68 /* ActionSheet */,
 				4144156920ECD2620078EC37 /* VLCSectionTableHeaderView.swift */,
 				4144156B20ECE6330078EC37 /* FileServerView.swift */,
-				8D222DC120F779F1009C0D34 /* MediaEditCell.swift */,
 				8DF9669C2113317100D0FCD6 /* EditToolbar.swift */,
 				8DF966B021188BDB00D0FCD6 /* EditController.swift */,
-				41B4DA3D21400E8E000BA27D /* MediaEditCell.xib */,
 				8D2AD4D722786F4000393833 /* AddToPlaylistViewController.swift */,
 				E03DECA522BEE27E00F44A05 /* MediaNavigationBar.swift */,
 			);
@@ -2628,7 +2622,6 @@
 				7DDFF4251BDFD23300913BD1 /* VLCCone512x512.png in Resources */,
 				7DF04F4F1961F2B8004A5429 /* web-open-fixed.png in Resources */,
 				7DBBF19A183AB4300009A339 /* VLCCloudStorageTableViewCell~ipad.xib in Resources */,
-				41B4DA3E21400E8E000BA27D /* MediaEditCell.xib in Resources */,
 				7D9870641A3E03D5009CF27D /* papasscode_background.png in Resources */,
 				411453B9219C48DA002D94E1 /* Launch Screen.storyboard in Resources */,
 				4181087A2142894A0046A931 /* PlayingExternallyView.xib in Resources */,
@@ -2964,7 +2957,6 @@
 				413EC98B201B4F2C00BF412F /* PresentationTheme.swift in Sources */,
 				DD1CB0321BB9E005006EDDE6 /* VLCMovieViewControlPanelView.m in Sources */,
 				DDF908D01CF4CCAA00108B70 /* VLCNetworkLoginViewButtonCell.m in Sources */,
-				8D222DC220F779F1009C0D34 /* MediaEditCell.swift in Sources */,
 				DD3EFF3D1BDEBCE500B68579 /* VLCLocalNetworkServiceBrowserHTTP.m in Sources */,
 				DDEAECBE1BDEBF6700756C83 /* VLCNetworkServerLoginInformation.m in Sources */,
 				418DFE9F211C93C6005D3652 /* CustomDialogRendererHandler.swift in Sources */,