diff --git a/app/Models/ClipModel.php b/app/Models/ClipModel.php
index fca84b0ce5c4dc3044ba9a7a5af2ee8b443db3a4..1d9172b7df465f0728c90054ddccf3613e0dc70d 100644
--- a/app/Models/ClipModel.php
+++ b/app/Models/ClipModel.php
@@ -109,33 +109,6 @@ class ClipModel extends Model
         return $found;
     }
 
-    /**
-     * Gets all video clips for an episode
-     *
-     * @return BaseClip[]
-     */
-    public function getVideoClips(int $podcastId, int $episodeId): array
-    {
-        $cacheName = "podcast#{$podcastId}_episode#{$episodeId}_video-clips";
-        if (! ($found = cache($cacheName))) {
-            $found = $this->where([
-                'episode_id' => $episodeId,
-                'podcast_id' => $podcastId,
-                'type' => 'video',
-            ])
-                ->orderBy('start_time')
-                ->findAll();
-
-            foreach ($found as $key => $videoClip) {
-                $found[$key] = new VideoClip($videoClip->toArray());
-            }
-
-            cache()
-                ->save($cacheName, $found, DECADE);
-        }
-        return $found;
-    }
-
     /**
      * Gets scheduled video clips for an episode
      *
@@ -157,6 +130,23 @@ class ClipModel extends Model
         return $found;
     }
 
+    public function deleteVideoClip(int $podcastId, int $episodeId, int $clipId): BaseResult | bool
+    {
+        $this->clearVideoClipCache($clipId);
+
+        return $this->delete([
+            'podcast_id' => $podcastId,
+            'episode_id' => $episodeId,
+            'id' => $clipId,
+        ]);
+    }
+
+    public function clearVideoClipCache(int $clipId): void
+    {
+        cache()
+            ->delete("video-clip#{$clipId}");
+    }
+
     public function getSoundbiteById(int $soundbiteId): ?Soundbite
     {
         $cacheName = "soundbite#{$soundbiteId}";
@@ -206,8 +196,7 @@ class ClipModel extends Model
 
     public function deleteSoundbite(int $podcastId, int $episodeId, int $clipId): BaseResult | bool
     {
-        cache()
-            ->delete("podcast#{$podcastId}_episode#{$episodeId}_soundbites");
+        $this->clearSoundbiteCache($podcastId, $episodeId, $clipId);
 
         return $this->delete([
             'podcast_id' => $podcastId,
@@ -216,6 +205,11 @@ class ClipModel extends Model
         ]);
     }
 
-    //     cache()
-    //         ->deleteMatching("page_podcast#{$clip->podcast_id}_episode#{$clip->episode_id}_*");
+    public function clearSoundbiteCache(int $podcastId, int $episodeId, int $clipId): void
+    {
+        cache()
+            ->delete("podcast#{$podcastId}_episode#{$episodeId}_soundbites");
+        cache()
+            ->delete("soundbite#{$clipId}");
+    }
 }
diff --git a/modules/Admin/Controllers/SoundbiteController.php b/modules/Admin/Controllers/SoundbiteController.php
index d9abe12726a0231018d33b35b88f7b34479bba0b..e14805caa819331dba71200c5c5126f964a5ec04 100644
--- a/modules/Admin/Controllers/SoundbiteController.php
+++ b/modules/Admin/Controllers/SoundbiteController.php
@@ -150,9 +150,12 @@ class SoundbiteController extends BaseController
 
         if ($soundbite->media === null) {
             // delete Clip directly
-            (new ClipModel())->delete($soundbite->id);
+            (new ClipModel())->deleteSoundbite($this->podcast->id, $this->episode->id, $soundbite->id);
         } else {
+            (new ClipModel())->clearSoundbiteCache($this->podcast->id, $this->episode->id, $soundbite->id);
+
             $mediaModel = new MediaModel();
+            // delete the soundbite file, the clip will be deleted on cascade
             if (! $mediaModel->deleteMedia($soundbite->media)) {
                 return redirect()
                     ->back()
diff --git a/modules/Admin/Controllers/VideoClipsController.php b/modules/Admin/Controllers/VideoClipsController.php
index 2552b5eac49a541a866c061ecf777df4c8d0a823..2a7b81a26854dfa72f0d2130ae64bf87affdcbbc 100644
--- a/modules/Admin/Controllers/VideoClipsController.php
+++ b/modules/Admin/Controllers/VideoClipsController.php
@@ -211,9 +211,12 @@ class VideoClipsController extends BaseController
 
         if ($videoClip->media === null) {
             // delete Clip directly
-            (new ClipModel())->delete($videoClip->id);
+            (new ClipModel())->deleteVideoClip($this->podcast->id, $this->episode->id, $videoClip->id);
         } else {
+            (new ClipModel())->clearVideoClipCache($videoClip->id);
+
             $mediaModel = new MediaModel();
+            // delete the videoClip file, the clip will be deleted on cascade
             if (! $mediaModel->deleteMedia($videoClip->media)) {
                 return redirect()
                     ->back()