Index: scribus/CMakeLists_Sources.txt
===================================================================
--- scribus/CMakeLists_Sources.txt	(Revision 27090)
+++ scribus/CMakeLists_Sources.txt	(Arbeitskopie)
@@ -565,4 +565,6 @@
 	ui/delegates/sclistitemdelegate.cpp
 	ui/docks/dock_centralwidget.cpp
 	ui/docks/dock_panelbase.cpp
+	ui/factories/scribusproxystyle.cpp
+	ui/widgets/buttongroup.cpp
 	ui/widgets/color_button.cpp
Index: scribus/scribus.cpp
===================================================================
--- scribus/scribus.cpp	(Revision 27090)
+++ scribus/scribus.cpp	(Arbeitskopie)
@@ -239,6 +239,7 @@
 #include "ui/tabmanager.h"
 #include "ui/transformdialog.h"
 #include "ui/viewtoolbar.h"
+#include "ui/factories/scribusproxystyle.h"
 #include "undogui.h"
 #include "undomanager.h"
 #include "undostate.h"
@@ -6480,7 +6481,6 @@
 	LocaleManager::instance().setUserPreferredLocale(m_prefsManager.appPrefs.uiPrefs.userPreferredLocale);
 	ScQApp->setLocale();
 
-	bool forceStyleUpdate = false;
 	bool useDefaultScratchColor = false;
 	if (m_prefsManager.appPrefs.displayPrefs.scratchColor == QApplication::palette().color(QPalette::Active, QPalette::Window))
 		useDefaultScratchColor = true;
@@ -6489,37 +6489,19 @@
 	QString newUIStylePalette = m_prefsManager.appPrefs.uiPrefs.stylePalette;
 	if (oldPrefs.uiPrefs.stylePalette != newUIStylePalette)
 	{
-		forceStyleUpdate = true;
 
 		if (newUIStylePalette == "dark")
-		{
-			QApplication::styleHints()->setColorScheme(Qt::ColorScheme::Dark);
-#if (defined Q_OS_LINUX)
-			QPalette pal(QColor(49, 49, 49));
-			QApplication::setPalette(pal);
-#endif
-		}
+			ScribusProxyStyle::instance()->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::Dark);
 		else if (newUIStylePalette == "light")
-		{
-			QApplication::styleHints()->setColorScheme(Qt::ColorScheme::Light);
-#if (defined Q_OS_LINUX)
-			QPalette pal(QColor(239, 239, 239));
-			QApplication::setPalette(pal);
-#endif
-		}
+			ScribusProxyStyle::instance()->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::Light);
 		else
-		{
-			QApplication::styleHints()->unsetColorScheme();
-#if (defined Q_OS_LINUX)
-			QApplication::setPalette(this->style()->standardPalette());
-#endif
-		}
+			ScribusProxyStyle::instance()->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::System);
 	}
 #endif
 
 	bool forceIconUpdate = false;
 	QString newUIStyle = m_prefsManager.guiStyle();
-	if (oldPrefs.uiPrefs.style != newUIStyle || forceStyleUpdate == true)
+	if (oldPrefs.uiPrefs.style != newUIStyle)
 	{
 		forceIconUpdate = true;
 
@@ -6527,11 +6509,11 @@
 		if (!newUIStyle.isEmpty())
 			styleName = newUIStyle;
 
-		QStyle * newStyle = QStyleFactory::create(styleName);
-		if (newStyle)
-			QApplication::setStyle(newStyle);
-		else
-			m_prefsManager.appPrefs.uiPrefs.style = oldPrefs.uiPrefs.style;
+		ScribusProxyStyle::instance()->setBaseStyleName(styleName);
+		// if (scStyle)
+		// 	ScQApp->setStyle(scStyle);
+		// else
+		// 	m_prefsManager.appPrefs.uiPrefs.style = oldPrefs.uiPrefs.style;
 	}
 
 	if (useDefaultScratchColor)
Index: scribus/scribusapp.cpp
===================================================================
--- scribus/scribusapp.cpp	(Revision 27090)
+++ scribus/scribusapp.cpp	(Arbeitskopie)
@@ -707,7 +707,16 @@
 			}
 			return true;
 		}
+	case QEvent::ApplicationPaletteChange:
+		{
+			IconManager &im = IconManager::instance();
+			im.rebuildCache();
+			emit iconSetChanged();
+		}
+		break;
 	default:
-		return QApplication::event(event);
+			break;
 	}
+
+	return QApplication::event(event);
 }
Index: scribus/scribuscore.cpp
===================================================================
--- scribus/scribuscore.cpp	(Revision 27090)
+++ scribus/scribuscore.cpp	(Arbeitskopie)
@@ -45,6 +45,7 @@
 #include "scribus.h"
 #include "scribusapp.h"
 #include "ui/splash.h"
+#include "ui/factories/scribusproxystyle.h"
 #include "undomanager.h"
 #include "util_debug.h"
 #include "util_ghostscript.h"
@@ -179,45 +180,41 @@
 	// This is a very basic implemenation of the UI theme palette.
 	// If necessary implement platform specific theme configurations here.
 
+
+	// Configure GUI
+	const QString& prefsUiStyle = m_prefsManager.appPrefs.uiPrefs.style;
+	QString qtStyle = nullptr;
+	if (prefsUiStyle.length() > 0)
+	{
+		QStringList availableStyles = QStyleFactory::keys();
+		if (availableStyles.contains(prefsUiStyle))
+			qtStyle = prefsUiStyle;
+		else
+			m_prefsManager.appPrefs.uiPrefs.style.clear();
+	}
+
+	ScribusProxyStyle* scStyle = new ScribusProxyStyle(qtStyle);
+	scStyle->setParent(qApp);
+
 	// Apply different palette only if the system UI palette is different.
 #if (QT_VERSION >= QT_VERSION_CHECK(6, 8, 0))
 	if (m_prefsManager.appPrefs.uiPrefs.stylePalette == "dark" && QApplication::styleHints()->colorScheme() == Qt::ColorScheme::Light)
 	{
-		QApplication::styleHints()->setColorScheme(Qt::ColorScheme::Dark);
-
-	// https://bugreports.qt.io/browse/QTBUG-132929
-#if (defined Q_OS_LINUX)
-		QPalette pal(QColor(49, 49, 49));
-		QApplication::setPalette(pal);
-#endif
+		scStyle->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::Dark);
 		m_SplashScreen->setPixmap(m_iconManager.splashScreen());
 	}
 	else if (m_prefsManager.appPrefs.uiPrefs.stylePalette == "light" && QApplication::styleHints()->colorScheme() == Qt::ColorScheme::Dark)
 	{
-		QApplication::styleHints()->setColorScheme(Qt::ColorScheme::Light);
-
-	// https://bugreports.qt.io/browse/QTBUG-132929
-#if (defined Q_OS_LINUX)
-		QPalette pal(QColor(239, 239, 239));
-		QApplication::setPalette(pal);
-#endif
+		scStyle->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::Light);
 		m_SplashScreen->setPixmap(m_iconManager.splashScreen());
 	}
+	else
+		scStyle->setApplicationTheme(ScribusProxyStyle::ApplicationTheme::System);
 #endif
 
-	// Configure GUI
-	const QString& prefsUiStyle = m_prefsManager.appPrefs.uiPrefs.style;
-	if (prefsUiStyle.length() > 0)
-	{
-		QStyle* qtStyle = nullptr;
-		QStringList availableStyles = QStyleFactory::keys();
-		if (availableStyles.contains(prefsUiStyle))
-			qtStyle = QStyleFactory::create(prefsUiStyle);
-		if (qtStyle)
-			QApplication::setStyle(qtStyle);
-		else
-			m_prefsManager.appPrefs.uiPrefs.style.clear();
-	}
+	qApp->setStyle(scStyle);
+	qApp->installEventFilter(scStyle);
+
 	QFont apf = QApplication::font();
 	apf.setPointSize(m_prefsManager.appPrefs.uiPrefs.applicationFontSize);
 	QApplication::setFont(apf);
Index: scribus/ui/alignselect.cpp
===================================================================
--- scribus/ui/alignselect.cpp	(Revision 27090)
+++ scribus/ui/alignselect.cpp	(Arbeitskopie)
@@ -16,26 +16,26 @@
 
 AlignSelect::AlignSelect(QWidget* parent) : FormWidget(parent)
 {
-	buttonGroup = new QButtonGroup(this);
+	buttonGroup = new ButtonGroup(this);
 
-	TextL = new QToolButton( this );
+	TextL = new ToolButton( this );
 	TextL->setCheckable( true );
 	TextL->setChecked( true );
 	buttonGroup->addButton(TextL, 0);
 
-	TextC = new QToolButton( this );
+	TextC = new ToolButton( this );
 	TextC->setCheckable( true );
 	buttonGroup->addButton(TextC, 1);
 
-	TextR = new QToolButton( this );
+	TextR = new ToolButton( this );
 	TextR->setCheckable( true );
 	buttonGroup->addButton(TextR, 2);
 
-	TextB = new QToolButton( this );
+	TextB = new ToolButton( this );
 	TextB->setCheckable( true );
 	buttonGroup->addButton(TextB, 3);
 
-	TextF = new QToolButton( this );
+	TextF = new ToolButton( this );
 	TextF->setCheckable( true );
 	buttonGroup->addButton(TextF, 4);
 
@@ -45,6 +45,9 @@
 	addWidget(TextB);
 	addWidget(TextF);
 
+	// Modifiy layout spacing. Layout is created by addWidget()
+	layout()->setSpacing(0);
+
 	iconSetChange();
 	languageChange();
 
Index: scribus/ui/alignselect.h
===================================================================
--- scribus/ui/alignselect.h	(Revision 27090)
+++ scribus/ui/alignselect.h	(Arbeitskopie)
@@ -14,6 +14,7 @@
 class QEvent;
 
 #include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
 #include "ui/widgets/form_widget.h"
 
 class SCRIBUS_API AlignSelect : public FormWidget
@@ -30,12 +31,12 @@
 	int selectedId() const;
 
 	int selected { 0 };
-	QButtonGroup* buttonGroup { nullptr };
-	QToolButton* TextL { nullptr };
-	QToolButton* TextR { nullptr };
-	QToolButton* TextC { nullptr };
-	QToolButton* TextB { nullptr };
-	QToolButton* TextF { nullptr };
+	ButtonGroup* buttonGroup { nullptr };
+	ToolButton* TextL { nullptr };
+	ToolButton* TextR { nullptr };
+	ToolButton* TextC { nullptr };
+	ToolButton* TextB { nullptr };
+	ToolButton* TextF { nullptr };
 
 public slots:
 	void iconSetChange();
Index: scribus/ui/alignverticalselect.cpp
===================================================================
--- scribus/ui/alignverticalselect.cpp	(Revision 27090)
+++ scribus/ui/alignverticalselect.cpp	(Arbeitskopie)
@@ -16,19 +16,19 @@
 
 AlignVerticalSelect::AlignVerticalSelect(QWidget* parent) : FormWidget(parent)
 {
-	buttonGroup = new QButtonGroup(this);
+	buttonGroup = new ButtonGroup(this);
 	buttonGroup->setExclusive(true);
 
-	TextT = new QToolButton( this );
+	TextT = new ToolButton( this );
 	TextT->setCheckable( true );
 	TextT->setChecked( true );
 	buttonGroup->addButton(TextT, 0);
 
-	TextC = new QToolButton( this );
+	TextC = new ToolButton( this );
 	TextC->setCheckable( true );
 	buttonGroup->addButton(TextC, 1);
 
-	TextB = new QToolButton( this );
+	TextB = new ToolButton( this );
 	TextB->setCheckable( true );
 	buttonGroup->addButton(TextB, 2);
 
@@ -36,6 +36,9 @@
 	addWidget(TextC);
 	addWidget(TextB);
 
+	// Modifiy layout spacing. Layout is created by addWidget()
+	layout()->setSpacing(0);
+
 	iconSetChange();
 	languageChange();
 
Index: scribus/ui/alignverticalselect.h
===================================================================
--- scribus/ui/alignverticalselect.h	(Revision 27090)
+++ scribus/ui/alignverticalselect.h	(Arbeitskopie)
@@ -14,6 +14,7 @@
 class QEvent;
 
 #include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
 #include "ui/widgets/form_widget.h"
 
 class SCRIBUS_API AlignVerticalSelect : public FormWidget
@@ -28,10 +29,10 @@
 	void setStyle(int s);
 	int getStyle() const;
 
-	QButtonGroup* buttonGroup { nullptr };
-	QToolButton* TextT { nullptr };
-	QToolButton* TextC { nullptr };
-	QToolButton* TextB { nullptr };
+	ButtonGroup* buttonGroup { nullptr };
+	ToolButton* TextT { nullptr };
+	ToolButton* TextC { nullptr };
+	ToolButton* TextB { nullptr };
 
 public slots:
 	void iconSetChange();
Index: scribus/ui/directionselect.cpp
===================================================================
--- scribus/ui/directionselect.cpp	(Revision 27090)
+++ scribus/ui/directionselect.cpp	(Arbeitskopie)
@@ -15,24 +15,32 @@
 
 DirectionSelect::DirectionSelect(QWidget* parent) : FormWidget(parent)
 {
-	buttonGroup = new QButtonGroup(this);
+	buttonGroup = new ButtonGroup(this);
 
-	LTR = new QToolButton( this );
+	QHBoxLayout* lay = new QHBoxLayout();
+	lay->setContentsMargins(0, 0, 0, 0);
+	lay->setSpacing(0);
+	lay->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding));
+	setLayout(lay);
+
+	LTR = new ToolButton( this );
 	LTR->setCheckable( true );
 	LTR->setChecked( true );
 	addWidget( LTR );
 	buttonGroup->addButton(LTR, 0);
 
-	RTL = new QToolButton( this );
+	RTL = new ToolButton( this );
 	RTL->setCheckable( true );
 	addWidget( RTL );
 	buttonGroup->addButton(RTL, 1);
 
-	resize(minimumSizeHint());
+	lay->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding));
 
 	iconSetChange();
 	languageChange();
 
+	resize(minimumSizeHint());
+
 	connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
 	connect(buttonGroup, SIGNAL(idClicked(int)), this, SLOT(setTypeStyle(int)));
 }
Index: scribus/ui/directionselect.h
===================================================================
--- scribus/ui/directionselect.h	(Revision 27090)
+++ scribus/ui/directionselect.h	(Arbeitskopie)
@@ -16,6 +16,7 @@
 class QEvent;
 
 #include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
 #include "ui/widgets/form_widget.h"
 
 class SCRIBUS_API DirectionSelect : public FormWidget
@@ -30,9 +31,9 @@
 		int getStyle();
 		int selectedId();
 
-		QButtonGroup* buttonGroup { nullptr };
-		QToolButton* RTL { nullptr };
-		QToolButton* LTR { nullptr };
+		ButtonGroup* buttonGroup { nullptr };
+		ToolButton* RTL { nullptr };
+		ToolButton* LTR { nullptr };
 
 	public slots:
 		void iconSetChange();
Index: scribus/ui/flopwidget.cpp
===================================================================
--- scribus/ui/flopwidget.cpp	(Revision 27090)
+++ scribus/ui/flopwidget.cpp	(Arbeitskopie)
@@ -11,22 +11,22 @@
 #include "scribusapp.h"
 
 FlopWidget::FlopWidget(QWidget* parent) : FormWidget(parent)
-{	
+{
 
-	flopRealHeight = new QToolButton();
+	flopRealHeight = new ToolButton();
 	flopRealHeight->setCheckable(true);
 	flopRealHeight->setChecked(true);	
-	flopFontAscent = new QToolButton();
+	flopFontAscent = new ToolButton();
 	flopFontAscent->setCheckable(true);
-	flopLineSpacing = new QToolButton();
+	flopLineSpacing = new ToolButton();
 	flopLineSpacing->setCheckable(true);
-	flopBaselineGrid = new QToolButton();
+	flopBaselineGrid = new ToolButton();
 	flopBaselineGrid->setCheckable(true);
 
-	flopGroup = new QButtonGroup();
+	flopGroup = new ButtonGroup();
 	flopGroup->setExclusive(true);
+	flopGroup->addButton(flopFontAscent,  FontAscentID);
 	flopGroup->addButton(flopRealHeight,  RealHeightID);
-	flopGroup->addButton(flopFontAscent,  FontAscentID);
 	flopGroup->addButton(flopLineSpacing, LineSpacingID);
 	flopGroup->addButton(flopBaselineGrid, BaselineGridID);
 
@@ -35,6 +35,9 @@
 	addWidget(flopLineSpacing);
 	addWidget(flopBaselineGrid);
 
+	// Modifiy layout spacing. Layout is created by addWidget()
+	layout()->setSpacing(0);
+
 	iconSetChange();
 	languageChange();
 
Index: scribus/ui/flopwidget.h
===================================================================
--- scribus/ui/flopwidget.h	(Revision 27090)
+++ scribus/ui/flopwidget.h	(Arbeitskopie)
@@ -9,7 +9,9 @@
 
 
 #include <QButtonGroup>
+#include <QHBoxLayout>
 #include <QToolButton>
+#include "ui/widgets/buttongroup.h"
 #include "ui/widgets/form_widget.h"
 
 class ScribusDoc;
@@ -31,11 +33,11 @@
 	FlopWidget(QWidget* parent);
 	~FlopWidget() {};
 
-	QButtonGroup *flopGroup;
-	QToolButton *flopRealHeight = {nullptr};
-	QToolButton *flopFontAscent = {nullptr};
-	QToolButton *flopLineSpacing = {nullptr};
-	QToolButton *flopBaselineGrid = {nullptr};
+	ButtonGroup *flopGroup;
+	ToolButton *flopRealHeight = {nullptr};
+	ToolButton *flopFontAscent = {nullptr};
+	ToolButton *flopLineSpacing = {nullptr};
+	ToolButton *flopBaselineGrid = {nullptr};
 
 protected:
Index: scribus/ui/newdocdialog.cpp
===================================================================
--- scribus/ui/newdocdialog.cpp	(Revision 27090)
+++ scribus/ui/newdocdialog.cpp	(Arbeitskopie)
@@ -143,12 +142,12 @@
 	comboSortSizes->addItem( tr("Size Desc"), PageSizeList::DimensionDesc);
 	comboSortSizes->setCurrentIndex(0);
 
-	pageOrientationButtons = new QButtonGroup();
+	pageOrientationButtons = new ButtonGroup();
 	pageOrientationButtons->addButton(buttonVertical, 0);
 	pageOrientationButtons->addButton(buttonHorizontal, 1);
 	pageOrientationButtons->button(orientation)->setChecked(true);
 
-	pageLayoutButtons = new QButtonGroup();
+	pageLayoutButtons = new ButtonGroup();
 	pageLayoutButtons->addButton(buttonSinglePage, 0);
 	pageLayoutButtons->addButton(buttonDoublePageLeft, 1);
 	pageLayoutButtons->addButton(buttonDoublePageRight, 2); 
Index: scribus/ui/newdocdialog.h
===================================================================
--- scribus/ui/newdocdialog.h	(Revision 27090)
+++ scribus/ui/newdocdialog.h	(Arbeitskopie)
@@ -34,6 +34,7 @@
 #include "scribusstructs.h"
 #include "ui/customfdialog.h"
 #include "ui/nftwidget.h"
+#include "ui/widgets/buttongroup.h"
 
 #include "ui_newdocdialog.h"
 
@@ -120,8 +120,8 @@
 protected:
 	PrefsManager& prefsManager;
 	QStringList recentDocList;
-	QButtonGroup* pageOrientationButtons;
-	QButtonGroup* pageLayoutButtons;
+	ButtonGroup* pageOrientationButtons;
+	ButtonGroup* pageLayoutButtons;
 
 	double m_unitRatio { 1.0 };
 	int m_orientation { 0 };
Index: scribus/ui/propertiespalette_fill.cpp
===================================================================
--- scribus/ui/propertiespalette_fill.cpp	(Revision 27090)
+++ scribus/ui/propertiespalette_fill.cpp	(Arbeitskopie)
@@ -8,6 +8,7 @@
 #include "selection.h"
 #include "undomanager.h"
 #include "ui/colorpicker/colorpicker.h"
+#include "ui/widgets/buttongroup.h"
 
 PropertiesPalette_Fill::PropertiesPalette_Fill(QWidget *parent) :
 	QWidget(parent)
@@ -23,6 +24,10 @@
 
 	undoManager = UndoManager::instance();
 
+	ButtonGroup * fillRuleGroup = new ButtonGroup();
+	fillRuleGroup->addButton(evenOdd);
+	fillRuleGroup->addButton(nonZero);
+
 	iconSetChange();
 	languageChange();
 
Index: scribus/ui/propertiespalette_line.cpp
===================================================================
--- scribus/ui/propertiespalette_line.cpp	(Revision 27090)
+++ scribus/ui/propertiespalette_line.cpp	(Arbeitskopie)
@@ -39,15 +39,15 @@
 	setupUi(this);
 	setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum));
 
-	buttonsCaps = new QButtonGroup();
+	buttonsCaps = new ButtonGroup();
 	buttonsCaps->addButton(buttonCapFlat, 0);
 	buttonsCaps->addButton(buttonCapSquare, 1);
 	buttonsCaps->addButton(buttonCapRound, 2);
 
-	buttonsJoins = new QButtonGroup();
+	buttonsJoins = new ButtonGroup();
 	buttonsJoins->addButton(buttonJoinMiter, 0);
+	buttonsJoins->addButton(buttonJoinRound, 2);
 	buttonsJoins->addButton(buttonJoinBevel, 1);
-	buttonsJoins->addButton(buttonJoinRound, 2);
 
 	lineType->addItem( tr("Custom"));
 
Index: scribus/ui/propertiespalette_line.h
===================================================================
--- scribus/ui/propertiespalette_line.h	(Revision 27090)
+++ scribus/ui/propertiespalette_line.h	(Arbeitskopie)
@@ -12,6 +12,7 @@
 #include <QListWidgetItem>
 #include "scribusapi.h"
 #include "scguardedptr.h"
+#include "ui/widgets/buttongroup.h"
 #include "units.h"
 
 class ArrowChooser;
@@ -43,8 +44,8 @@
 	PageItem *m_item {nullptr};
 	ScribusMainWindow* m_ScMW {nullptr};
 	ScGuardedPtr<ScribusDoc> m_doc;
-	QButtonGroup *buttonsCaps;
-	QButtonGroup *buttonsJoins;
+	ButtonGroup *buttonsCaps;
+	ButtonGroup *buttonsJoins;
 	LineMarkerSelector *lineMarkerSelectorStart;
 	LineMarkerSelector *lineMarkerSelectorEnd;
 
Index: scribus/ui/propertiespalette_shape.cpp
===================================================================
--- scribus/ui/propertiespalette_shape.cpp	(Revision 27090)
+++ scribus/ui/propertiespalette_shape.cpp	(Arbeitskopie)
@@ -25,6 +25,7 @@
 #include "scribusview.h"
 #include "selection.h"
 #include "units.h"
+#include "ui/widgets/buttongroup.h"
 
 PropertiesPalette_Shape::PropertiesPalette_Shape( QWidget* parent)
 	: QWidget(parent)
@@ -38,6 +39,13 @@
 	iconSetChange();
 	languageChange();
 
+	ButtonGroup * bgFlow = new ButtonGroup();
+	bgFlow->addButton(textFlowDisabled);
+	bgFlow->addButton(textFlowUsesBoundingBox);
+	bgFlow->addButton(textFlowUsesContourLine);
+	bgFlow->addButton(textFlowUsesFrameShape);
+	bgFlow->addButton(textFlowUsesImageClipping);
+
 	connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
 	connect(ScQApp, SIGNAL(localeChanged()), this, SLOT(localeChange()));
 	connect(ScQApp, SIGNAL(labelVisibilityChanged(bool)), this, SLOT(toggleLabelVisibility(bool)));
Index: scribus/ui/propertywidget_fontfeatures.cpp
===================================================================
--- scribus/ui/propertywidget_fontfeatures.cpp	(Revision 27090)
+++ scribus/ui/propertywidget_fontfeatures.cpp	(Arbeitskopie)
@@ -16,6 +16,7 @@
 #include "scribusapp.h"
 #include "scribusdoc.h"
 #include "selection.h"
+#include "ui/widgets/buttongroup.h"
 
 #include "fonts/fontfeatures.h"
 
@@ -833,7 +834,7 @@
 	OrdinalCheck->installEventFilter(this);
 	SlashedZeroCheck->installEventFilter(this);
 
-	QButtonGroup * groupCapitals = new QButtonGroup();
+	ButtonGroup * groupCapitals = new ButtonGroup();
 	groupCapitals->setExclusive(true);
 	groupCapitals->addButton(NormalCapRadio);
 	groupCapitals->addButton(SmallRadio);
@@ -845,19 +846,26 @@
 	groupCapitals->addButton(UnicaseRadio);
 	groupCapitals->addButton(TitlingRadio);
 
-	QButtonGroup * groupFractions = new QButtonGroup();
+	ButtonGroup * groupPosition = new ButtonGroup();
+	groupPosition->setExclusive(true);
+	groupPosition->addButton(DefaultPosRadio);
+	groupPosition->addButton(SubscriptRadio);
+	groupPosition->addButton(SuperscriptRadio);
+	groupPosition->addButton(OrdinalCheck);
+
+	ButtonGroup * groupFractions = new ButtonGroup();
 	groupFractions->setExclusive(true);
 	groupFractions->addButton(DefaultFractionsRadio);
 	groupFractions->addButton(DiagonalRadio);
 	groupFractions->addButton(StackedRadio);
 
-	QButtonGroup * groupNumeralStyle = new QButtonGroup();
+	ButtonGroup * groupNumeralStyle = new ButtonGroup();
 	groupNumeralStyle->setExclusive(true);
 	groupNumeralStyle->addButton(DefaultStyleRadio);
 	groupNumeralStyle->addButton(LiningRadio);
 	groupNumeralStyle->addButton(OldStyleRadio);
 
-	QButtonGroup * groupNumeralWidth = new QButtonGroup();
+	ButtonGroup * groupNumeralWidth = new ButtonGroup();
 	groupNumeralWidth->setExclusive(true);
 	groupNumeralWidth->addButton(DefaultWidthRadio);
 	groupNumeralWidth->addButton(ProportionalRadio);
@@ -870,31 +878,10 @@
 	HistoricalCheck->setChecked(false);
 	
 	NormalCapRadio->setChecked(true);
-	// SmallRadio->setChecked(false);
-	// SmallFromCRadio->setChecked(false);
-	// AllSmallCapsRadio->setChecked(false);
-	// PetiteRadio->setChecked(false);
-	// PetiteCapRadio->setChecked(false);
-	// AllPetiteCapsRadio->setChecked(false);
-	// UnicaseRadio->setChecked(false);
-	// TitlingRadio->setChecked(false);
-
 	DefaultStyleRadio->setChecked(true);
-	// LiningRadio->setChecked(false);
-	// OldStyleRadio->setChecked(false);
-
 	DefaultWidthRadio->setChecked(true);
-	// ProportionalRadio->setChecked(false);
-	// TabularRadio->setChecked(false);
-	
 	DefaultFractionsRadio->setChecked(true);
-	// DiagonalRadio->setChecked(false);
-	// StackedRadio->setChecked(false);
-
 	DefaultPosRadio->setChecked(true);
-	// SubscriptRadio->setChecked(false);
-	// SuperscriptRadio->setChecked(false);
-	// OrdinalCheck->setChecked(false);
 
 	SlashedZeroCheck->setChecked(false);
 
Index: scribus/ui/smalignselect.cpp
===================================================================
--- scribus/ui/smalignselect.cpp	(Revision 27090)
+++ scribus/ui/smalignselect.cpp	(Arbeitskopie)
@@ -4,6 +4,7 @@
 a copyright and/or license notice that predates the release of Scribus 1.3.2
 for which a new license (GPL+exception) is in place.
 */
+#include <QLayoutItem>
 #include <QToolTip>
 #include "smalignselect.h"
 #include "iconmanager.h"
@@ -12,6 +13,9 @@
 SMAlignSelect::SMAlignSelect(QWidget *parent)
 	: AlignSelect(parent)
 {
+	QSpacerItem * spacer = new QSpacerItem(4, 0, QSizePolicy::Fixed);
+	layout()->addItem(spacer);
+
 	parentButton = new QToolButton(this);
 	parentButton->setText( "");
 	parentButton->setToolTip( tr("Use parent style's alignment instead of overriding it"));
Index: scribus/ui/styleselect.cpp
===================================================================
--- scribus/ui/styleselect.cpp	(Revision 27090)
+++ scribus/ui/styleselect.cpp	(Arbeitskopie)
@@ -130,7 +130,7 @@
 StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
 {
 	ssLayout = new QHBoxLayout(this);
-	ssLayout->setSpacing(4);
+	ssLayout->setSpacing(0);
 	ssLayout->setContentsMargins(0, 0, 0, 0);
 
 	UnderlineVal = new UnderlineValues( nullptr );
@@ -144,12 +144,18 @@
 	underlineButton->setMenu(UnderlinePop);
 	underlineButton->setPopupMode(QToolButton::DelayedPopup);
 	ssLayout->addWidget( underlineButton );
+
+	ssLayout->addSpacing(4);
+
 	underlineWordButton = new QToolButton( this );
 	underlineWordButton->setText( "" );
 	underlineWordButton->setCheckable( true );
 	underlineWordButton->setMenu(UnderlinePop);
 	underlineWordButton->setPopupMode(QToolButton::DelayedPopup);
-	ssLayout->addWidget( underlineWordButton );	
+	ssLayout->addWidget( underlineWordButton );
+
+	ssLayout->addSpacing(4);
+
 	StrikeVal = new StrikeValues( nullptr );
 	StrikePop = new QMenu();
 	StrikeValAct = new QWidgetAction(this);
@@ -162,30 +168,40 @@
 	strikeoutButton->setPopupMode(QToolButton::DelayedPopup);
 	ssLayout->addWidget( strikeoutButton );
 
-	ssLayout->addSpacing(12);
+	ssLayout->addSpacing(16);
 
-	subscriptButton = new QToolButton( this );
+	subscriptButton = new ToolButton( this );
 	subscriptButton->setText( "" );
 	subscriptButton->setCheckable( true );
 	ssLayout->addWidget( subscriptButton );
-	superscriptButton = new QToolButton( this );
+	superscriptButton = new ToolButton( this );
 	superscriptButton->setText( "" );
 	superscriptButton->setCheckable( true );
 	ssLayout->addWidget( superscriptButton );
 
-	ssLayout->addSpacing(12);
+	ButtonGroup *bgSub = new ButtonGroup();
+	bgSub->setExclusive(false);
+	bgSub->addButton(subscriptButton);
+	bgSub->addButton(superscriptButton);
 
-	allcapsButton = new QToolButton( this );
+	ssLayout->addSpacing(16);
+
+	allcapsButton = new ToolButton( this );
 	allcapsButton->setText("");
 	allcapsButton->setCheckable( true );
 	ssLayout->addWidget( allcapsButton );
-	smallcapsButton = new QToolButton( this );
+	smallcapsButton = new ToolButton( this );
 	smallcapsButton->setText("");
 	smallcapsButton->setCheckable( true );
 	ssLayout->addWidget( smallcapsButton );
 
-	ssLayout->addSpacing(12);
+	ButtonGroup *bgCaps = new ButtonGroup();
+	bgCaps->setExclusive(false);
+	bgCaps->addButton(allcapsButton);
+	bgCaps->addButton(smallcapsButton);
 
+	ssLayout->addSpacing(16);
+
 	OutlineVal = new OutlineValues( nullptr );
 	OutlinePop = new QMenu();
 	OutlineValAct = new QWidgetAction(this);
@@ -198,6 +214,8 @@
 	outlineButton->setPopupMode(QToolButton::DelayedPopup);
 	ssLayout->addWidget( outlineButton );
 
+	ssLayout->addSpacing(4);
+
 	ShadowVal = new ShadowValues( nullptr );
 	ShadowPop = new QMenu();
 	ShadowValAct = new QWidgetAction(this);
Index: scribus/ui/styleselect.h
===================================================================
--- scribus/ui/styleselect.h	(Revision 27090)
+++ scribus/ui/styleselect.h	(Arbeitskopie)
@@ -21,6 +21,7 @@
 
 #include "scrspinbox.h"
 #include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
 
 class SCRIBUS_API StrikeValues : public QFrame
 {
@@ -130,10 +131,10 @@
 	QHBoxLayout* ssLayout { nullptr };
 	QToolButton* underlineButton { nullptr };
 	QToolButton* underlineWordButton { nullptr };
-	QToolButton* subscriptButton { nullptr };
-	QToolButton* superscriptButton { nullptr };
-	QToolButton* smallcapsButton { nullptr };
-	QToolButton* allcapsButton { nullptr };
+	ToolButton* subscriptButton { nullptr };
+	ToolButton* superscriptButton { nullptr };
+	ToolButton* smallcapsButton { nullptr };
+	ToolButton* allcapsButton { nullptr };
 	QToolButton* strikeoutButton { nullptr };
 	QToolButton* outlineButton { nullptr };
 	QToolButton* shadowButton { nullptr };
