diff --git a/include/TrackContainerView.h b/include/TrackContainerView.h
index 82d6f993b..bfb1cd0c9 100644
--- a/include/TrackContainerView.h
+++ b/include/TrackContainerView.h
@@ -155,6 +155,7 @@ public slots:
 	void realignTracks();
 	lmms::gui::TrackView * createTrackView( lmms::Track * _t );
 	void deleteTrackView( lmms::gui::TrackView * _tv );
+	void deleteOtherTracksView( lmms::gui::TrackView * _tv );
 
 	void dropEvent( QDropEvent * _de ) override;
 	void dragEnterEvent( QDragEnterEvent * _dee ) override;
diff --git a/include/TrackOperationsWidget.h b/include/TrackOperationsWidget.h
index 4dbb5353c..f91c57ca2 100644
--- a/include/TrackOperationsWidget.h
+++ b/include/TrackOperationsWidget.h
@@ -47,11 +47,13 @@ protected:
 	void mousePressEvent( QMouseEvent * me ) override;
 	void paintEvent( QPaintEvent * pe ) override;
 	bool confirmRemoval();
+	bool confirmAllRemoval();
 
 
 private slots:
 	void cloneTrack();
 	void removeTrack();
+	void removeOtherTracks();
 	void updateMenu();
 	void selectTrackColor();
 	void randomizeTrackColor();
@@ -74,6 +76,7 @@ private:
 
 signals:
 	void trackRemovalScheduled( lmms::gui::TrackView * t );
+	void otherTracksRemovalScheduled( lmms::gui::TrackView * t );
 
 } ;
 
diff --git a/src/gui/editors/TrackContainerView.cpp b/src/gui/editors/TrackContainerView.cpp
index 60a468380..db9a06b27 100644
--- a/src/gui/editors/TrackContainerView.cpp
+++ b/src/gui/editors/TrackContainerView.cpp
@@ -299,7 +299,26 @@ void TrackContainerView::deleteTrackView( TrackView * _tv )
 	Engine::audioEngine()->doneChangeInModel();
 }
 
-
+void TrackContainerView::deleteOtherTracksView( TrackView * _tv )
+{	
+	//move preserved track to beginning
+	moveTrackView( _tv, 0 );	
+	//delete until only one remains
+	while( !m_trackViews.empty() )
+	{
+		if(m_trackViews.size() == 1){
+			break;
+		}
+		
+		TrackView * tv = m_trackViews.takeLast();
+		Track * t = tv->getTrack();
+		removeTrackView( tv );
+		delete tv;
+		Engine::audioEngine()->requestChangeInModel();
+		delete t;
+		Engine::audioEngine()->doneChangeInModel();
+	}
+}
 
 
 const TrackView * TrackContainerView::trackViewAt( const int _y ) const
diff --git a/src/gui/tracks/TrackOperationsWidget.cpp b/src/gui/tracks/TrackOperationsWidget.cpp
index 31edc4949..e79d1abe7 100644
--- a/src/gui/tracks/TrackOperationsWidget.cpp
+++ b/src/gui/tracks/TrackOperationsWidget.cpp
@@ -109,6 +109,10 @@ TrackOperationsWidget::TrackOperationsWidget( TrackView * parent ) :
 			m_trackView->trackContainerView(),
 				SLOT(deleteTrackView(lmms::gui::TrackView*)),
 							Qt::QueuedConnection );
+	connect( this, SIGNAL(otherTracksRemovalScheduled(lmms::gui::TrackView*)),
+			m_trackView->trackContainerView(),
+				SLOT(deleteOtherTracksView(lmms::gui::TrackView*)),
+							Qt::QueuedConnection );							
 
 	connect( m_trackView->getTrack()->getMutedModel(), SIGNAL(dataChanged()),
 			this, SLOT(update()));
@@ -218,6 +222,41 @@ bool TrackOperationsWidget::confirmRemoval()
 	return false;
 }
 
+/*! \brief Show a message box warning the user that this track is about to be closed */
+bool TrackOperationsWidget::confirmAllRemoval()
+{
+	bool needConfirm = ConfigManager::inst()->value("ui", "trackdeletionwarning", "1").toInt();
+	if (!needConfirm){ return true; }
+	
+	QString messageRemoveTrack = tr("After removing all other tracks, they cannot "
+					"be recovered. Are you sure you want to remove all tracks except for \"%1\"?")
+					.arg(m_trackView->getTrack()->name());
+	QString messageTitleRemoveTrack = tr("Confirm removal");
+	QString askAgainText = tr("Don't ask again");
+	auto askAgainCheckBox = new QCheckBox(askAgainText, nullptr);
+	connect(askAgainCheckBox, &QCheckBox::stateChanged, [](int state){
+		// Invert button state, if it's checked we *shouldn't* ask again
+		ConfigManager::inst()->setValue("ui", "trackdeletionwarning", state ? "0" : "1");
+	});
+
+	QMessageBox mb(this);
+	mb.setText(messageRemoveTrack);
+	mb.setWindowTitle(messageTitleRemoveTrack);
+	mb.setIcon(QMessageBox::Warning);
+	mb.addButton(QMessageBox::Cancel);
+	mb.addButton(QMessageBox::Ok);
+	mb.setCheckBox(askAgainCheckBox);
+	mb.setDefaultButton(QMessageBox::Cancel);
+
+	int answer = mb.exec();
+
+	if( answer == QMessageBox::Ok )
+	{
+		return true;
+	}
+	return false;
+}
+
 
 
 /*! \brief Clone this track
@@ -263,6 +302,17 @@ void TrackOperationsWidget::removeTrack()
 	}
 }
 
+/*! \brief Remove all other tracks from the track list
+ *
+ */
+void TrackOperationsWidget::removeOtherTracks()
+{
+	if (confirmAllRemoval())
+	{
+		emit otherTracksRemovalScheduled(m_trackView);
+	}
+}
+
 void TrackOperationsWidget::selectTrackColor()
 {
 	QColor new_color = ColorChooser( this ).withPalette( ColorChooser::Palette::Track )-> \
@@ -327,6 +377,10 @@ void TrackOperationsWidget::updateMenu()
 						tr( "Remove this track" ),
 						this, SLOT(removeTrack()));
 
+	toMenu->addAction( embed::getIconPixmap( "cancel", 16, 16 ),
+						tr( "Remove all other tracks" ),
+						this, SLOT(removeOtherTracks()));
+
 	if( ! m_trackView->trackContainerView()->fixedClips() )
 	{
 		toMenu->addAction( tr( "Clear this track" ), this, SLOT(clearTrack()));
