diff --git a/scribus/ui/autoformbuttongroup.cpp b/scribus/ui/autoformbuttongroup.cpp
index 9cf90054d..03eaba138 100644
--- a/scribus/ui/autoformbuttongroup.cpp
+++ b/scribus/ui/autoformbuttongroup.cpp
@@ -759,9 +759,10 @@ QPixmap AutoformButtonGroup::getIconPixmap(int nr, int pixmapSize)
 //	painter->end();
 //	delete painter;
 
+
 	QPainter *painter = new QPainter(&Ico);
-	painter->setBrush( palette().color(QPalette::WindowText) );
-	painter->setPen( QPen(palette().color(QPalette::Midlight), 1.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin) );
+	painter->setBrush( ScQApp->palette().color(QPalette::WindowText) );
+	painter->setPen( QPen(ScQApp->palette().color(QPalette::Midlight), 1.0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin) );
 	painter->translate(2.0, 2.0);
 	painter->drawPath( Path.toQPainterPath(true) );
 	painter->end();
diff --git a/scribus/ui/linemarkerselector.cpp b/scribus/ui/linemarkerselector.cpp
index f0791531a..ea400de06 100644
--- a/scribus/ui/linemarkerselector.cpp
+++ b/scribus/ui/linemarkerselector.cpp
@@ -1,5 +1,6 @@
 #include "linemarkerselector.h"
 #include "ui/delegates/sclistitemdelegate.h"
+#include "scribusapp.h"
 
 /* ********************************************************************************* *
  *
@@ -24,6 +25,8 @@ LineMarkerSelector::LineMarkerSelector(QWidget *parent) :
 		emit scaleChanged(scale());
 	});
 
+	connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(redrawIcons()));
+
 }
 
 /* ********************************************************************************* *
@@ -37,6 +40,7 @@ void LineMarkerSelector::rebuildList(const QList<ArrowDesc> *arrowStyles)
 	// ArrowStyles defined in: void PrefsManager::initArrowStyles()
 	int index = marker() == -1 ? 0 : marker();
 
+	m_arrowStyles = arrowStyles;
 	listMarker->clear();
 
 	qreal m_devicePixelRatio = qApp->devicePixelRatio();
@@ -68,6 +72,14 @@ void LineMarkerSelector::addItem(QPixmap pixmap, const QString &label, int id)
 	listMarker->addItem(item);
 }
 
+void LineMarkerSelector::redrawIcons()
+{
+	if (m_arrowStyles->empty())
+		return;
+
+	rebuildList(m_arrowStyles);
+}
+
 /* ********************************************************************************* *
  *
  * Properties
@@ -131,7 +143,7 @@ void LineMarkerSelector::setScaleSuffix(const QString suffix)
 
 QPixmap LineMarkerSelector::renderPixmap(FPointArray path, int width, int height, int scale)
 {
-	const QPalette& pal = this->palette();
+	const QPalette& pal = ScQApp->palette();
 	QColor textColor = pal.color(QPalette::Active, QPalette::Text);
 
 	int offsetX = 0, offsetY = 0, lineStart = 0, lineEnd = 0;
diff --git a/scribus/ui/linemarkerselector.h b/scribus/ui/linemarkerselector.h
index 3bceae21c..415f55a67 100644
--- a/scribus/ui/linemarkerselector.h
+++ b/scribus/ui/linemarkerselector.h
@@ -29,11 +29,15 @@ public:
 private:
 	ArrowDirection m_arrowDirection { ArrowDirection::StartArrow };
 	int arrow = 23;
+	const QList<ArrowDesc> *m_arrowStyles;
 
 	QPixmap renderPixmap(FPointArray path, int width, int height, int scale);
 
 	void addItem(QPixmap pixmap, const QString &label, int id);
 
+private slots:
+	void redrawIcons();
+
 signals:
 	void scaleChanged(double);
 	void markerChanged(int);
diff --git a/scribus/ui/viewtoolbar.cpp b/scribus/ui/viewtoolbar.cpp
index 5434e2fcd..3bd63bc3e 100644
--- a/scribus/ui/viewtoolbar.cpp
+++ b/scribus/ui/viewtoolbar.cpp
@@ -110,6 +110,7 @@ void ViewToolBar::languageChange()
 	visualMenu->addAction(im.loadIcon("color-vision-colorblind", iconSize()), CommonStrings::trVisionFullColorBlind);
 	visualMenu->setToolTip( tr("Select the visual appearance of the display. You can choose between normal and several color blindness forms."));
 	visualMenu->setStatusTip( tr("Select display visual appearance"));
+	visualMenu->setCurrentIndex(visualMenu->currentIndex());
 
 	QSignalBlocker sigImageRes(previewQualitySwitcher);
 	previewQualitySwitcher->clear();
@@ -118,5 +119,6 @@ void ViewToolBar::languageChange()
 	previewQualitySwitcher->addAction(im.loadIcon("image-resolution-low", iconSize()), tr("Low"));
 	previewQualitySwitcher->setToolTip( tr("Select the image preview quality"));
 	previewQualitySwitcher->setStatusTip( tr("Select image preview quality"));
+	previewQualitySwitcher->setCurrentIndex(previewQualitySwitcher->currentIndex());
 
 }
diff --git a/scribus/ui/widgets/dropdown_button.cpp b/scribus/ui/widgets/dropdown_button.cpp
index 4d1a8e5fe..de4fecdb8 100644
--- a/scribus/ui/widgets/dropdown_button.cpp
+++ b/scribus/ui/widgets/dropdown_button.cpp
@@ -1,17 +1,24 @@
 #include <QMenu>
 #include "dropdown_button.h"
+#include "scribusapp.h"
 
 DropdownButton::DropdownButton(QWidget *parent) : QToolButton(parent)
 {
 	setPopupMode(QToolButton::InstantPopup);
+	connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
 }
 
 void DropdownButton::setCurrentIndex(int index)
 {
 	m_index = index;
 
-	if (menu())
-		indexChanged(menu()->actions().at(qBound(0, index, menu()->actions().size())));
+	if (!menu())
+		return;
+
+	if (menu()->actions().empty())
+		return;
+
+	indexChanged(menu()->actions().at(qBound(0, index, menu()->actions().size())));
 }
 
 void DropdownButton::setMenu(QMenu *menu)
@@ -49,3 +56,10 @@ void DropdownButton::indexChanged(QAction *action)
 		emit activated(m_index);
 	}
 }
+
+void DropdownButton::iconSetChange()
+{
+	this->blockSignals(true);
+	setCurrentIndex(m_index);
+	this->blockSignals(false);
+}
diff --git a/scribus/ui/widgets/dropdown_button.h b/scribus/ui/widgets/dropdown_button.h
index f4cad2b11..6e60efdc4 100644
--- a/scribus/ui/widgets/dropdown_button.h
+++ b/scribus/ui/widgets/dropdown_button.h
@@ -21,6 +21,7 @@ private:
 
 private slots:
 	void indexChanged(QAction *action);
+	void iconSetChange();
 
 signals:
 	void currentIndexChanged(int index);
diff --git a/scribus/ui/widgets/pagelayout.cpp b/scribus/ui/widgets/pagelayout.cpp
index 24aafeab6..a653d11b4 100644
--- a/scribus/ui/widgets/pagelayout.cpp
+++ b/scribus/ui/widgets/pagelayout.cpp
@@ -18,6 +18,7 @@ for which a new license (GPL+exception) is in place.
 #include "iconmanager.h"
 #include "scribusapp.h"
 #include "ui/widgets/form_widget.h"
+#include "ui/widgets/dropdown_button.h"
 
 PageLayouts::PageLayouts(QWidget* parent)  : QWidget( parent )
 {
@@ -37,11 +38,8 @@ PageLayouts::PageLayouts(QWidget* parent)  : QWidget( parent )
 	QFont layFont(this->font());
 	layFont.setPointSize(8);
 
-	menuScheme = new QMenu();
-
-	buttonScheme = new QToolButton(this);
+	buttonScheme = new DropdownButton(this);
 	buttonScheme->setPopupMode(QToolButton::InstantPopup);
-	buttonScheme->setMenu(menuScheme);
 
 	labelScheme = new FormWidget();
 	labelScheme->setFont(layFont);
@@ -49,11 +47,8 @@ PageLayouts::PageLayouts(QWidget* parent)  : QWidget( parent )
 	labelScheme->setLabelVisibility(!m_hideLabels);
 	layoutGroupLayout->addWidget( labelScheme );
 
-	menuFirstPage = new QMenu();
-
-	buttonFirstPage = new QToolButton(this);
+	buttonFirstPage = new DropdownButton(this);
 	buttonFirstPage->setPopupMode(QToolButton::InstantPopup);
-	buttonFirstPage->setMenu(menuFirstPage);
 
 	labelPages = new FormWidget();
 	labelPages->setFont(layFont);
@@ -64,8 +59,9 @@ PageLayouts::PageLayouts(QWidget* parent)  : QWidget( parent )
 	languageChange();
 
 	connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool)));
-	connect(menuScheme, &QMenu::triggered, this, &PageLayouts::changeScheme);
-	connect(menuFirstPage, &QMenu::triggered, this, &PageLayouts::changeFirstPage);
+	connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(languageChange()));
+	connect(buttonScheme, &DropdownButton::activated, this, &PageLayouts::changeScheme, Qt::UniqueConnection);
+	connect(buttonFirstPage, &DropdownButton::activated, this, &PageLayouts::changeFirstPage, Qt::UniqueConnection);
 }
 
 void PageLayouts::updateSchemeSelector(QList<PageSet> pageSets, int pagePositioning)
@@ -79,22 +75,22 @@ void PageLayouts::updateSchemeSelector(QList<PageSet> pageSets, int pagePosition
 
 void PageLayouts::setFirstPage(int nr)
 {
-	if (menuFirstPage->actions().isEmpty())
+	if (buttonFirstPage->actions().isEmpty())
 		return;
 
-	m_firstPage = qBound(0, nr, static_cast<int>(menuFirstPage->actions().count()));
-	buttonFirstPage->setIcon(menuFirstPage->actions().at(m_firstPage)->icon());
+	m_firstPage = qBound(0, nr, static_cast<int>(buttonFirstPage->actions().count()));
+	buttonFirstPage->setCurrentIndex(m_firstPage);
 }
 
 void PageLayouts::setScheme(int nr)
 {
-	if (menuScheme->actions().isEmpty())
+	if (buttonScheme->actions().isEmpty())
 		return;
 
-	m_scheme = qBound(0, nr, static_cast<int>(menuScheme->actions().count()));
-	buttonScheme->setIcon(menuScheme->actions().at(m_scheme)->icon());
+	m_scheme = qBound(0, nr, static_cast<int>(buttonScheme->actions().count()));
 
 	reloadFirstPage(m_scheme);
+	buttonScheme->setCurrentIndex(m_scheme);
 
 }
 
@@ -106,9 +102,7 @@ void PageLayouts::setHideLabelsPermanently(bool hide)
 
 void PageLayouts::reloadScheme()
 {
-	disconnect(menuScheme, &QMenu::triggered, this, &PageLayouts::changeScheme);
-
-	menuScheme->clear();
+	buttonScheme->clear();
 
 	for (int pg = 0; pg < m_pageSets.count(); ++pg)
 	{
@@ -118,25 +112,21 @@ void PageLayouts::reloadScheme()
 
 		QString psname = CommonStrings::translatePageSetString(m_pageSets[pg].Name);
 		if (pg == 0)
-			menuScheme->addAction(IconManager::instance().loadIcon("page-simple"), psname)->setData(QVariant(pg));
+			buttonScheme->addAction(IconManager::instance().loadIcon("page-simple"), psname)->setData(QVariant(pg));
 		else if (pg == 1)
-			menuScheme->addAction(IconManager::instance().loadIcon("page-doublesided"), psname)->setData(QVariant(pg));
+			buttonScheme->addAction(IconManager::instance().loadIcon("page-doublesided"), psname)->setData(QVariant(pg));
 		else if (pg == 2)
-			menuScheme->addAction(IconManager::instance().loadIcon("page-3fold"), psname)->setData(QVariant(pg));
+			buttonScheme->addAction(IconManager::instance().loadIcon("page-3fold"), psname)->setData(QVariant(pg));
 		else if (pg == 3)
-			menuScheme->addAction(IconManager::instance().loadIcon("page-4fold"), psname)->setData(QVariant(pg));
+			buttonScheme->addAction(IconManager::instance().loadIcon("page-4fold"), psname)->setData(QVariant(pg));
 		else
-			menuScheme->addAction(IconManager::instance().loadIcon("page-simple"), psname)->setData(QVariant(pg));
+			buttonScheme->addAction(IconManager::instance().loadIcon("page-simple"), psname)->setData(QVariant(pg));
 	}
-
-	connect(menuScheme, &QMenu::triggered, this, &PageLayouts::changeScheme);
 }
 
 void PageLayouts::reloadFirstPage(int scheme)
 {
-	disconnect(menuFirstPage, &QMenu::triggered, this, &PageLayouts::changeFirstPage);
-
-	menuFirstPage->clear();
+	buttonFirstPage->clear();
 
 	// We have to add the other cases if want to support them again
 	// CommonStrings::pageLocLeft
@@ -150,14 +140,13 @@ void PageLayouts::reloadFirstPage(int scheme)
 		QString psname = m_pageSets[scheme].pageNames[pg];
 
 		if (psname == CommonStrings::pageLocLeft)
-			menuFirstPage->addAction(IconManager::instance().loadIcon("page-first-left"), psname)->setData(QVariant(pg));
+			buttonFirstPage->addAction(IconManager::instance().loadIcon("page-first-left"), psname)->setData(QVariant(pg));
 		else if (psname == CommonStrings::pageLocRight)
-			menuFirstPage->addAction(IconManager::instance().loadIcon("page-first-right"), psname)->setData(QVariant(pg));
+			buttonFirstPage->addAction(IconManager::instance().loadIcon("page-first-right"), psname)->setData(QVariant(pg));
 		else
-			menuFirstPage->addAction(IconManager::instance().loadIcon("page-first-left"), psname)->setData(QVariant(pg));
+			buttonFirstPage->addAction(IconManager::instance().loadIcon("page-first-left"), psname)->setData(QVariant(pg));
 	}
 
-	connect(menuFirstPage, &QMenu::triggered, this, &PageLayouts::changeFirstPage);
 }
 
 void PageLayouts::toggleLabelVisibility(bool visibility)
@@ -179,22 +168,35 @@ void PageLayouts::languageChange()
 	labelScheme->setText( tr( "Scheme" ) );
 	labelPages->setText( tr( "First Page" ) );
 
+	QSignalBlocker sigButtonScheme(buttonScheme);
+	buttonScheme->setCurrentIndex(buttonScheme->currentIndex());
 	buttonScheme->setToolTip( tr( "Number of pages to show side-by-side on the canvas. Often used for allowing items to be placed across page spreads." ) );
+
+	QSignalBlocker sigFirstPage(buttonFirstPage);
+	buttonFirstPage->setCurrentIndex(buttonFirstPage->currentIndex());
 	buttonFirstPage->setToolTip( tr( "Location on the canvas where the first page of the document is placed" ) );
 }
 
-void PageLayouts::changeScheme(QAction *action)
+void PageLayouts::changeScheme(int index)
 {
-	buttonScheme->setIcon(action->icon());
+	QAction * action = buttonScheme->menu()->actions().at(qBound(0, index, buttonScheme->menu()->actions().size()));
+
+	if (!action)
+		return;
+
 	int ic = action->data().toInt();
 	reloadFirstPage(ic);
 	labelPages->setVisible( ic > 0 );
 	emit schemeChanged(ic);
 }
 
-void PageLayouts::changeFirstPage(QAction *action)
+void PageLayouts::changeFirstPage(int index)
 {
-	buttonFirstPage->setIcon(action->icon());
+	QAction * action = buttonFirstPage->menu()->actions().at(qBound(0, index, buttonFirstPage->menu()->actions().size()));
+
+	if (!action)
+		return;
+
 	m_firstPage = action->data().toInt();
 	emit firstPageChanged(m_firstPage);
 }
diff --git a/scribus/ui/widgets/pagelayout.h b/scribus/ui/widgets/pagelayout.h
index d404ba4d8..473789ba9 100644
--- a/scribus/ui/widgets/pagelayout.h
+++ b/scribus/ui/widgets/pagelayout.h
@@ -16,6 +16,7 @@ class QHBoxLayout;
 class QLabel;
 class QMenu;
 class QToolButton;
+class DropdownButton;
 
 #include "scribusapi.h"
 #include "scribusstructs.h"
@@ -57,10 +58,8 @@ private:
 
 	FormWidget* labelScheme { nullptr };
 	FormWidget* labelPages { nullptr };
-	QToolButton* buttonScheme { nullptr };
-	QToolButton* buttonFirstPage { nullptr };
-	QMenu* menuScheme { nullptr };
-	QMenu* menuFirstPage { nullptr };
+	DropdownButton* buttonScheme { nullptr };
+	DropdownButton* buttonFirstPage { nullptr };
 	QHBoxLayout* layoutGroupLayout { nullptr };
 
 	void reloadScheme();
@@ -68,8 +67,8 @@ private:
 
 protected slots:
 	void languageChange();
-	void changeScheme(QAction* action);
-	void changeFirstPage(QAction* action);
+	void changeScheme(int index);
+	void changeFirstPage(int index);
 
 };
 
