Index: CMakeLists_Sources.txt
===================================================================
--- CMakeLists_Sources.txt	(revision 27094)
+++ CMakeLists_Sources.txt	(working copy)
@@ -565,6 +565,8 @@
 	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
 	ui/widgets/combo_blendmode.cpp
 	ui/widgets/combo_linestyle.cpp
Index: scribus.cpp
===================================================================
--- scribus.cpp	(revision 27094)
+++ scribus.cpp	(working copy)
@@ -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: scribusapp.cpp
===================================================================
--- scribusapp.cpp	(revision 27094)
+++ scribusapp.cpp	(working copy)
@@ -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: scribuscore.cpp
===================================================================
--- scribuscore.cpp	(revision 27094)
+++ scribuscore.cpp	(working copy)
@@ -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: ui/alignselect.cpp
===================================================================
--- ui/alignselect.cpp	(revision 27094)
+++ ui/alignselect.cpp	(working copy)
@@ -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: ui/alignselect.h
===================================================================
--- ui/alignselect.h	(revision 27094)
+++ ui/alignselect.h	(working copy)
@@ -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: ui/alignverticalselect.cpp
===================================================================
--- ui/alignverticalselect.cpp	(revision 27094)
+++ ui/alignverticalselect.cpp	(working copy)
@@ -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: ui/alignverticalselect.h
===================================================================
--- ui/alignverticalselect.h	(revision 27094)
+++ ui/alignverticalselect.h	(working copy)
@@ -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: ui/directionselect.cpp
===================================================================
--- ui/directionselect.cpp	(revision 27094)
+++ ui/directionselect.cpp	(working copy)
@@ -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: ui/directionselect.h
===================================================================
--- ui/directionselect.h	(revision 27094)
+++ ui/directionselect.h	(working copy)
@@ -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: ui/flopwidget.cpp
===================================================================
--- ui/flopwidget.cpp	(revision 27094)
+++ ui/flopwidget.cpp	(working copy)
@@ -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: ui/flopwidget.h
===================================================================
--- ui/flopwidget.h	(revision 27094)
+++ ui/flopwidget.h	(working copy)
@@ -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: ui/newdocdialog.cpp
===================================================================
--- ui/newdocdialog.cpp	(revision 27094)
+++ ui/newdocdialog.cpp	(working copy)
@@ -143,12 +143,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: ui/newdocdialog.h
===================================================================
--- ui/newdocdialog.h	(revision 27094)
+++ ui/newdocdialog.h	(working copy)
@@ -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 +121,8 @@
 protected:
 	PrefsManager& prefsManager;
 	QStringList recentDocList;
-	QButtonGroup* pageOrientationButtons;
-	QButtonGroup* pageLayoutButtons;
+	ButtonGroup* pageOrientationButtons;
+	ButtonGroup* pageLayoutButtons;
 
 	double m_unitRatio { 1.0 };
 	int m_orientation { 0 };
Index: ui/newdocdialog.ui
===================================================================
--- ui/newdocdialog.ui	(revision 27094)
+++ ui/newdocdialog.ui	(working copy)
@@ -123,8 +123,8 @@
            <rect>
             <x>0</x>
             <y>0</y>
-            <width>267</width>
-            <height>564</height>
+            <width>320</width>
+            <height>588</height>
            </rect>
           </property>
           <layout class="QVBoxLayout" name="verticalLayout_7">
@@ -330,7 +330,7 @@
                    </property>
                    <layout class="QHBoxLayout" name="horizontalLayout_4">
                     <property name="spacing">
-                     <number>4</number>
+                     <number>0</number>
                     </property>
                     <property name="leftMargin">
                      <number>0</number>
@@ -358,7 +358,7 @@
                      </spacer>
                     </item>
                     <item>
-                     <widget class="QToolButton" name="buttonVertical">
+                     <widget class="ToolButton" name="buttonVertical">
                       <property name="text">
                        <string/>
                       </property>
@@ -374,7 +374,7 @@
                      </widget>
                     </item>
                     <item>
-                     <widget class="QToolButton" name="buttonHorizontal">
+                     <widget class="ToolButton" name="buttonHorizontal">
                       <property name="text">
                        <string/>
                       </property>
@@ -430,6 +430,9 @@
                     <string>Layout</string>
                    </property>
                    <layout class="QHBoxLayout" name="horizontalLayout_9">
+                    <property name="spacing">
+                     <number>0</number>
+                    </property>
                     <property name="leftMargin">
                      <number>0</number>
                     </property>
@@ -443,39 +446,35 @@
                      <number>0</number>
                     </property>
                     <item>
-                     <layout class="QHBoxLayout" name="horizontalLayout_10">
-                      <item>
-                       <widget class="QToolButton" name="buttonSinglePage">
-                        <property name="text">
-                         <string/>
-                        </property>
-                        <property name="checkable">
-                         <bool>true</bool>
-                        </property>
-                       </widget>
-                      </item>
-                      <item>
-                       <widget class="QToolButton" name="buttonDoublePageLeft">
-                        <property name="text">
-                         <string/>
-                        </property>
-                        <property name="checkable">
-                         <bool>true</bool>
-                        </property>
-                       </widget>
-                      </item>
-                      <item>
-                       <widget class="QToolButton" name="buttonDoublePageRight">
-                        <property name="text">
-                         <string/>
-                        </property>
-                        <property name="checkable">
-                         <bool>true</bool>
-                        </property>
-                       </widget>
-                      </item>
-                     </layout>
+                     <widget class="ToolButton" name="buttonSinglePage">
+                      <property name="text">
+                       <string/>
+                      </property>
+                      <property name="checkable">
+                       <bool>true</bool>
+                      </property>
+                     </widget>
                     </item>
+                    <item>
+                     <widget class="ToolButton" name="buttonDoublePageLeft">
+                      <property name="text">
+                       <string/>
+                      </property>
+                      <property name="checkable">
+                       <bool>true</bool>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <widget class="ToolButton" name="buttonDoublePageRight">
+                      <property name="text">
+                       <string/>
+                      </property>
+                      <property name="checkable">
+                       <bool>true</bool>
+                      </property>
+                     </widget>
+                    </item>
                    </layout>
                   </widget>
                  </item>
@@ -822,9 +821,14 @@
    <container>1</container>
   </customwidget>
   <customwidget>
+   <class>ToolButton</class>
+   <extends>QToolButton</extends>
+   <header>ui/widgets/buttongroup.h</header>
+  </customwidget>
+  <customwidget>
    <class>ScrSpinBox</class>
    <extends>QDoubleSpinBox</extends>
-   <header>ui/scrspinbox.h</header>
+   <header location="global">ui/scrspinbox.h</header>
   </customwidget>
   <customwidget>
    <class>NewMarginWidget</class>
Index: ui/propertiespalette_fill.cpp
===================================================================
--- ui/propertiespalette_fill.cpp	(revision 27094)
+++ ui/propertiespalette_fill.cpp	(working copy)
@@ -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: ui/propertiespalette_fill.ui
===================================================================
--- ui/propertiespalette_fill.ui	(revision 27094)
+++ ui/propertiespalette_fill.ui	(working copy)
@@ -151,7 +151,7 @@
        </property>
        <layout class="QHBoxLayout" name="horizontalLayout_3">
         <property name="spacing">
-         <number>4</number>
+         <number>0</number>
         </property>
         <property name="leftMargin">
          <number>0</number>
@@ -166,7 +166,7 @@
          <number>0</number>
         </property>
         <item>
-         <widget class="QToolButton" name="evenOdd">
+         <widget class="ToolButton" name="evenOdd">
           <property name="text">
            <string/>
           </property>
@@ -179,7 +179,7 @@
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="nonZero">
+         <widget class="ToolButton" name="nonZero">
           <property name="text">
            <string/>
           </property>
@@ -197,7 +197,7 @@
      <item>
       <spacer name="horizontalSpacer">
        <property name="orientation">
-        <enum>Qt::Horizontal</enum>
+        <enum>Qt::Orientation::Horizontal</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
@@ -228,6 +228,11 @@
    <extends>QComboBox</extends>
    <header>ui/widgets/combo_blendmode.h</header>
   </customwidget>
+  <customwidget>
+   <class>ToolButton</class>
+   <extends>QToolButton</extends>
+   <header>ui/widgets/buttongroup.h</header>
+  </customwidget>
  </customwidgets>
  <resources/>
  <connections/>
Index: ui/propertiespalette_line.cpp
===================================================================
--- ui/propertiespalette_line.cpp	(revision 27094)
+++ ui/propertiespalette_line.cpp	(working copy)
@@ -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: ui/propertiespalette_line.h
===================================================================
--- ui/propertiespalette_line.h	(revision 27094)
+++ ui/propertiespalette_line.h	(working copy)
@@ -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: ui/propertiespalette_linebase.ui
===================================================================
--- ui/propertiespalette_linebase.ui	(revision 27094)
+++ ui/propertiespalette_linebase.ui	(working copy)
@@ -433,7 +433,7 @@
        </property>
        <layout class="QHBoxLayout" name="horizontalLayout_2">
         <property name="spacing">
-         <number>4</number>
+         <number>0</number>
         </property>
         <property name="leftMargin">
          <number>0</number>
@@ -448,7 +448,7 @@
          <number>0</number>
         </property>
         <item>
-         <widget class="QToolButton" name="buttonCapFlat">
+         <widget class="ToolButton" name="buttonCapFlat">
           <property name="text">
            <string/>
           </property>
@@ -461,7 +461,7 @@
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="buttonCapSquare">
+         <widget class="ToolButton" name="buttonCapSquare">
           <property name="text">
            <string/>
           </property>
@@ -471,7 +471,7 @@
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="buttonCapRound">
+         <widget class="ToolButton" name="buttonCapRound">
           <property name="text">
            <string/>
           </property>
@@ -495,7 +495,7 @@
        </property>
        <layout class="QHBoxLayout" name="horizontalLayout_9">
         <property name="spacing">
-         <number>4</number>
+         <number>0</number>
         </property>
         <property name="leftMargin">
          <number>0</number>
@@ -510,7 +510,7 @@
          <number>0</number>
         </property>
         <item>
-         <widget class="QToolButton" name="buttonJoinMiter">
+         <widget class="ToolButton" name="buttonJoinMiter">
           <property name="text">
            <string/>
           </property>
@@ -520,7 +520,7 @@
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="buttonJoinRound">
+         <widget class="ToolButton" name="buttonJoinRound">
           <property name="text">
            <string/>
           </property>
@@ -530,7 +530,7 @@
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="buttonJoinBevel">
+         <widget class="ToolButton" name="buttonJoinBevel">
           <property name="text">
            <string/>
           </property>
@@ -567,9 +567,9 @@
    <container>1</container>
   </customwidget>
   <customwidget>
-   <class>ColorButton</class>
+   <class>ToolButton</class>
    <extends>QToolButton</extends>
-   <header>ui/widgets/color_button.h</header>
+   <header>ui/widgets/buttongroup.h</header>
   </customwidget>
   <customwidget>
    <class>ScrSpinBox</class>
@@ -577,6 +577,11 @@
    <header location="global">ui/scrspinbox.h</header>
   </customwidget>
   <customwidget>
+   <class>ColorButton</class>
+   <extends>QToolButton</extends>
+   <header>ui/widgets/color_button.h</header>
+  </customwidget>
+  <customwidget>
    <class>LineCombo</class>
    <extends>QComboBox</extends>
    <header>ui/linecombo.h</header>
Index: ui/propertiespalette_shape.cpp
===================================================================
--- ui/propertiespalette_shape.cpp	(revision 27094)
+++ ui/propertiespalette_shape.cpp	(working copy)
@@ -38,11 +38,18 @@
 	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)));
 
-	connect(textFlowBtnGroup, SIGNAL(idClicked(int)), this, SLOT(handleTextFlow()));
+	connect(bgFlow, SIGNAL(idClicked(int)), this, SLOT(handleTextFlow()));
 	connect(editShape, SIGNAL(clicked()) , this, SLOT(handleShapeEdit()));
 	connect(roundRect, SIGNAL(valueChanged(double)) , this, SLOT(handleCornerRadius()));
 	connect(customShape, SIGNAL(FormSel(int,int,qreal*)), this, SLOT(handleNewShape(int,int,qreal*)));
Index: ui/propertiespalette_shapebase.ui
===================================================================
--- ui/propertiespalette_shapebase.ui	(revision 27094)
+++ ui/propertiespalette_shapebase.ui	(working copy)
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>238</width>
-    <height>107</height>
+    <height>117</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
@@ -54,10 +54,10 @@
      <item>
       <spacer name="horizontalSpacer">
        <property name="orientation">
-        <enum>Qt::Horizontal</enum>
+        <enum>Qt::Orientation::Horizontal</enum>
        </property>
        <property name="sizeType">
-        <enum>QSizePolicy::Fixed</enum>
+        <enum>QSizePolicy::Policy::Fixed</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
@@ -93,7 +93,7 @@
      <item>
       <spacer name="horizontalSpacer_2">
        <property name="orientation">
-        <enum>Qt::Horizontal</enum>
+        <enum>Qt::Orientation::Horizontal</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
@@ -122,7 +122,7 @@
        </property>
        <layout class="QHBoxLayout" name="horizontalLayout">
         <property name="spacing">
-         <number>4</number>
+         <number>0</number>
         </property>
         <property name="leftMargin">
          <number>0</number>
@@ -137,7 +137,7 @@
          <number>0</number>
         </property>
         <item>
-         <widget class="QToolButton" name="textFlowDisabled">
+         <widget class="ToolButton" name="textFlowDisabled">
           <property name="toolTip">
            <string>Text flow around frame disabled</string>
           </property>
@@ -148,17 +148,14 @@
            <bool>true</bool>
           </property>
           <property name="toolButtonStyle">
-           <enum>Qt::ToolButtonIconOnly</enum>
+           <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
           </property>
-          <attribute name="buttonGroup">
-           <string notr="true">textFlowBtnGroup</string>
-          </attribute>
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="textFlowUsesFrameShape">
+         <widget class="ToolButton" name="textFlowUsesBoundingBox">
           <property name="toolTip">
-           <string>Text flow around frame shape</string>
+           <string>Text flow around bounding box</string>
           </property>
           <property name="checkable">
            <bool>true</bool>
@@ -167,17 +164,14 @@
            <bool>true</bool>
           </property>
           <property name="toolButtonStyle">
-           <enum>Qt::ToolButtonIconOnly</enum>
+           <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
           </property>
-          <attribute name="buttonGroup">
-           <string notr="true">textFlowBtnGroup</string>
-          </attribute>
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="textFlowUsesBoundingBox">
+         <widget class="ToolButton" name="textFlowUsesFrameShape">
           <property name="toolTip">
-           <string>Text flow around bounding box</string>
+           <string>Text flow around frame shape</string>
           </property>
           <property name="checkable">
            <bool>true</bool>
@@ -186,15 +180,12 @@
            <bool>true</bool>
           </property>
           <property name="toolButtonStyle">
-           <enum>Qt::ToolButtonIconOnly</enum>
+           <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
           </property>
-          <attribute name="buttonGroup">
-           <string notr="true">textFlowBtnGroup</string>
-          </attribute>
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="textFlowUsesContourLine">
+         <widget class="ToolButton" name="textFlowUsesContourLine">
           <property name="toolTip">
            <string>Text flow around contour line</string>
           </property>
@@ -205,15 +196,12 @@
            <bool>true</bool>
           </property>
           <property name="toolButtonStyle">
-           <enum>Qt::ToolButtonIconOnly</enum>
+           <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
           </property>
-          <attribute name="buttonGroup">
-           <string notr="true">textFlowBtnGroup</string>
-          </attribute>
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="textFlowUsesImageClipping">
+         <widget class="ToolButton" name="textFlowUsesImageClipping">
           <property name="toolTip">
            <string>Text flow around image clip path</string>
           </property>
@@ -224,11 +212,8 @@
            <bool>true</bool>
           </property>
           <property name="toolButtonStyle">
-           <enum>Qt::ToolButtonIconOnly</enum>
+           <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
           </property>
-          <attribute name="buttonGroup">
-           <string notr="true">textFlowBtnGroup</string>
-          </attribute>
          </widget>
         </item>
        </layout>
@@ -237,7 +222,7 @@
      <item>
       <spacer name="horizontalSpacer_4">
        <property name="orientation">
-        <enum>Qt::Horizontal</enum>
+        <enum>Qt::Orientation::Horizontal</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
@@ -250,9 +235,29 @@
     </layout>
    </item>
    <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="NewMarginWidget" name="textFlowMargins" native="true"/>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_3">
+       <property name="orientation">
+        <enum>Qt::Orientation::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>0</width>
+         <height>0</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
     <spacer name="verticalSpacer">
      <property name="orientation">
-      <enum>Qt::Vertical</enum>
+      <enum>Qt::Orientation::Vertical</enum>
      </property>
      <property name="sizeHint" stdset="0">
       <size>
@@ -272,11 +277,22 @@
    <container>1</container>
   </customwidget>
   <customwidget>
+   <class>ToolButton</class>
+   <extends>QToolButton</extends>
+   <header>ui/widgets/buttongroup.h</header>
+  </customwidget>
+  <customwidget>
    <class>ScrSpinBox</class>
    <extends>QDoubleSpinBox</extends>
-   <header>ui/scrspinbox.h</header>
+   <header location="global">ui/scrspinbox.h</header>
   </customwidget>
   <customwidget>
+   <class>NewMarginWidget</class>
+   <extends>QWidget</extends>
+   <header>ui/newmarginwidget.h</header>
+   <container>1</container>
+  </customwidget>
+  <customwidget>
    <class>Autoforms</class>
    <extends>QToolButton</extends>
    <header>ui/autoform.h</header>
@@ -284,7 +300,4 @@
  </customwidgets>
  <resources/>
  <connections/>
- <buttongroups>
-  <buttongroup name="textFlowBtnGroup"/>
- </buttongroups>
 </ui>
Index: ui/propertywidget_alignment.ui
===================================================================
--- ui/propertywidget_alignment.ui	(revision 27094)
+++ ui/propertywidget_alignment.ui	(working copy)
@@ -30,7 +30,7 @@
     <number>8</number>
    </property>
    <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_5">
+    <layout class="QHBoxLayout" name="horizontalLayout_5" stretch="0,0,0,1">
      <property name="spacing">
       <number>16</number>
      </property>
Index: ui/propertywidget_fontfeatures.cpp
===================================================================
--- ui/propertywidget_fontfeatures.cpp	(revision 27094)
+++ ui/propertywidget_fontfeatures.cpp	(working copy)
@@ -16,10 +16,9 @@
 #include "scribusapp.h"
 #include "scribusdoc.h"
 #include "selection.h"
-
 #include "fonts/fontfeatures.h"
+#include "ui/widgets/buttongroup.h"
 
-
 PropertyWidget_FontFeatures::PropertyWidget_FontFeatures(QWidget* parent) : QFrame(parent)
 {
 	setupUi(this);
@@ -833,7 +832,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 +844,20 @@
 	groupCapitals->addButton(UnicaseRadio);
 	groupCapitals->addButton(TitlingRadio);
 
-	QButtonGroup * groupFractions = new QButtonGroup();
-	groupFractions->setExclusive(true);
-	groupFractions->addButton(DefaultFractionsRadio);
-	groupFractions->addButton(DiagonalRadio);
-	groupFractions->addButton(StackedRadio);
+	ButtonGroup * groupPosition = new ButtonGroup();
+	groupPosition->setExclusive(true);
+	groupPosition->addButton(DefaultPosRadio);
+	groupPosition->addButton(SubscriptRadio);
+	groupPosition->addButton(SuperscriptRadio);
+	groupPosition->addButton(OrdinalCheck);
 
-	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,32 +870,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);
 
 	StyleSet01->setChecked(false);
Index: ui/propertywidget_fontfeaturesbase.ui
===================================================================
--- ui/propertywidget_fontfeaturesbase.ui	(revision 27094)
+++ ui/propertywidget_fontfeaturesbase.ui	(working copy)
@@ -44,10 +44,10 @@
      <item row="11" column="1">
       <layout class="QHBoxLayout" name="horizontalLayout_6">
        <property name="spacing">
-        <number>4</number>
+        <number>0</number>
        </property>
        <item>
-        <widget class="QToolButton" name="DefaultWidthRadio">
+        <widget class="ToolButton" name="DefaultWidthRadio">
          <property name="toolTip">
           <string>Default numbers width</string>
          </property>
@@ -66,7 +66,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="ProportionalRadio">
+        <widget class="ToolButton" name="ProportionalRadio">
          <property name="toolTip">
           <string>Proportional Figures (pnum)</string>
          </property>
@@ -82,7 +82,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="TabularRadio">
+        <widget class="ToolButton" name="TabularRadio">
          <property name="toolTip">
           <string>Tabular Figures (tnum)</string>
          </property>
@@ -135,10 +135,10 @@
      <item row="8" column="1">
       <layout class="QHBoxLayout" name="horizontalLayout_9">
        <property name="spacing">
-        <number>4</number>
+        <number>0</number>
        </property>
        <item>
-        <widget class="QToolButton" name="DefaultPosRadio">
+        <widget class="ToolButton" name="DefaultPosRadio">
          <property name="toolTip">
           <string>Normal position</string>
          </property>
@@ -157,7 +157,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="SubscriptRadio">
+        <widget class="ToolButton" name="SubscriptRadio">
          <property name="toolTip">
           <string>Subscript (subs)</string>
          </property>
@@ -173,7 +173,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="SuperscriptRadio">
+        <widget class="ToolButton" name="SuperscriptRadio">
          <property name="toolTip">
           <string>Superscript (sups)</string>
          </property>
@@ -189,7 +189,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="OrdinalCheck">
+        <widget class="ToolButton" name="OrdinalCheck">
          <property name="toolTip">
           <string>Ordinals (ordn)</string>
          </property>
@@ -406,10 +406,10 @@
      <item row="7" column="1">
       <layout class="QHBoxLayout" name="horizontalLayout_4">
        <property name="spacing">
-        <number>4</number>
+        <number>0</number>
        </property>
        <item>
-        <widget class="QToolButton" name="NormalCapRadio">
+        <widget class="ToolButton" name="NormalCapRadio">
          <property name="toolTip">
           <string>Normal capitals</string>
          </property>
@@ -428,7 +428,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="SmallRadio">
+        <widget class="ToolButton" name="SmallRadio">
          <property name="toolTip">
           <string>Small capitals (smcp)</string>
          </property>
@@ -444,7 +444,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="SmallFromCRadio">
+        <widget class="ToolButton" name="SmallFromCRadio">
          <property name="toolTip">
           <string>Small capitals from capitals (c2sc)</string>
          </property>
@@ -460,7 +460,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="AllSmallCapsRadio">
+        <widget class="ToolButton" name="AllSmallCapsRadio">
          <property name="toolTip">
           <string>All Small Caps (c2sc + smcp)</string>
          </property>
@@ -476,7 +476,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="PetiteRadio">
+        <widget class="ToolButton" name="PetiteRadio">
          <property name="toolTip">
           <string>Petite capitals (pcap)</string>
          </property>
@@ -492,7 +492,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="PetiteCapRadio">
+        <widget class="ToolButton" name="PetiteCapRadio">
          <property name="toolTip">
           <string>Petite capitals from capitals (c2pc)</string>
          </property>
@@ -508,7 +508,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="AllPetiteCapsRadio">
+        <widget class="ToolButton" name="AllPetiteCapsRadio">
          <property name="toolTip">
           <string>All Petite Caps (c2pc + pcap)</string>
          </property>
@@ -524,7 +524,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="UnicaseRadio">
+        <widget class="ToolButton" name="UnicaseRadio">
          <property name="toolTip">
           <string>Unicase (unic)</string>
          </property>
@@ -540,7 +540,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="TitlingRadio">
+        <widget class="ToolButton" name="TitlingRadio">
          <property name="toolTip">
           <string>Titling (titl)</string>
          </property>
@@ -622,10 +622,10 @@
      <item row="12" column="1">
       <layout class="QHBoxLayout" name="horizontalLayout_8">
        <property name="spacing">
-        <number>4</number>
+        <number>0</number>
        </property>
        <item>
-        <widget class="QToolButton" name="DefaultFractionsRadio">
+        <widget class="ToolButton" name="DefaultFractionsRadio">
          <property name="toolTip">
           <string>No fractions</string>
          </property>
@@ -644,7 +644,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="DiagonalRadio">
+        <widget class="ToolButton" name="DiagonalRadio">
          <property name="toolTip">
           <string>Fractions (frac)</string>
          </property>
@@ -660,7 +660,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="StackedRadio">
+        <widget class="ToolButton" name="StackedRadio">
          <property name="toolTip">
           <string>Alternative Fractions (afrc)</string>
          </property>
@@ -745,10 +745,10 @@
      <item row="10" column="1">
       <layout class="QHBoxLayout" name="horizontalLayout_5">
        <property name="spacing">
-        <number>4</number>
+        <number>0</number>
        </property>
        <item>
-        <widget class="QToolButton" name="DefaultStyleRadio">
+        <widget class="ToolButton" name="DefaultStyleRadio">
          <property name="toolTip">
           <string>Default numbers style</string>
          </property>
@@ -767,7 +767,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="LiningRadio">
+        <widget class="ToolButton" name="LiningRadio">
          <property name="toolTip">
           <string>Lining Figures (lnum)</string>
          </property>
@@ -783,7 +783,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="OldStyleRadio">
+        <widget class="ToolButton" name="OldStyleRadio">
          <property name="toolTip">
           <string>Oldstyle Figures (onum)</string>
          </property>
@@ -1127,6 +1127,11 @@
    <extends>QToolButton</extends>
    <header>ui/widgets/switch.h</header>
   </customwidget>
+  <customwidget>
+   <class>ToolButton</class>
+   <extends>QToolButton</extends>
+   <header>ui/widgets/buttongroup.h</header>
+  </customwidget>
  </customwidgets>
  <tabstops>
   <tabstop>CommonCheck</tabstop>
Index: ui/smalignselect.cpp
===================================================================
--- ui/smalignselect.cpp	(revision 27094)
+++ ui/smalignselect.cpp	(working copy)
@@ -4,6 +4,8 @@
 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 +14,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: ui/styleselect.cpp
===================================================================
--- ui/styleselect.cpp	(revision 27094)
+++ ui/styleselect.cpp	(working copy)
@@ -6,6 +6,7 @@
 */
 
 #include <QEvent>
+#include <QtWidgets/qbuttongroup.h>
 
 #include "iconmanager.h"
 #include "scribusapp.h"
@@ -130,7 +131,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,6 +145,9 @@
 	underlineButton->setMenu(UnderlinePop);
 	underlineButton->setPopupMode(QToolButton::DelayedPopup);
 	ssLayout->addWidget( underlineButton );
+
+	ssLayout->addSpacing(4);
+
 	underlineWordButton = new QToolButton( this );
 	underlineWordButton->setText( "" );
 	underlineWordButton->setCheckable( true );
@@ -162,30 +166,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 +212,8 @@
 	outlineButton->setPopupMode(QToolButton::DelayedPopup);
 	ssLayout->addWidget( outlineButton );
 
+	ssLayout->addSpacing(4);
+
 	ShadowVal = new ShadowValues( nullptr );
 	ShadowPop = new QMenu();
 	ShadowValAct = new QWidgetAction(this);
Index: ui/styleselect.h
===================================================================
--- ui/styleselect.h	(revision 27094)
+++ ui/styleselect.h	(working copy)
@@ -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 };
