diff --git a/src/engine/channels/enginedeck.cpp b/src/engine/channels/enginedeck.cpp
index 25e02a674c7c..9ea88d5f48d4 100644
--- a/src/engine/channels/enginedeck.cpp
+++ b/src/engine/channels/enginedeck.cpp
@@ -10,6 +10,7 @@
 #include "engine/enginevumeter.h"
 #include "moc_enginedeck.cpp"
 #include "track/track.h"
+#include "util/assert.h"
 #include "util/sample.h"
 
 #ifdef __STEM__
@@ -206,6 +207,18 @@ void EngineDeck::cloneStemState(const EngineDeck* deckToClone) {
     VERIFY_OR_DEBUG_ASSERT(deckToClone) {
         return;
     }
+    // Sampler and preview decks don't have stem controls
+    if ((m_stemGain.empty() && m_stemMute.empty()) ||
+            (deckToClone->m_stemGain.empty() &&
+                    deckToClone->m_stemMute.empty())) {
+        return;
+    }
+    VERIFY_OR_DEBUG_ASSERT(m_stemGain.size() == kMaxSupportedStems &&
+            m_stemMute.size() == kMaxSupportedStems &&
+            deckToClone->m_stemGain.size() == kMaxSupportedStems &&
+            deckToClone->m_stemMute.size() == kMaxSupportedStems) {
+        return;
+    }
     for (int stemIdx = 0; stemIdx < kMaxSupportedStems; stemIdx++) {
         m_stemGain[stemIdx]->set(deckToClone->m_stemGain[stemIdx]->get());
         m_stemMute[stemIdx]->set(deckToClone->m_stemMute[stemIdx]->get());