diff --git a/.gitignore b/.gitignore
index 567609b12..1caa550c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,4 @@
 build/
+.qtcreator/CMakeLists.txt.user
+scribus.appdata.xml
+scribus.desktop
diff --git a/scribus/CMakeLists_Sources.txt b/scribus/CMakeLists_Sources.txt
index afb5817be..efb477594 100644
--- a/scribus/CMakeLists_Sources.txt
+++ b/scribus/CMakeLists_Sources.txt
@@ -566,6 +566,7 @@ set(SCRIBUS_SOURCES
 	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/color_slider.cpp
 	ui/widgets/combo_blendmode.cpp
diff --git a/scribus/ui/aligndistribute.cpp b/scribus/ui/aligndistribute.cpp
index 8ae23e937..060848c04 100644
--- a/scribus/ui/aligndistribute.cpp
+++ b/scribus/ui/aligndistribute.cpp
@@ -75,17 +75,18 @@ AlignDistributePalette::AlignDistributePalette(QWidget* parent) : DockPanelBase(
 	//set up scrspinboxes
 	ad->distributeDistSpinBox->setValues(-10000.0, 10000.0, 2, 0.0);
 
-	groupReference = new QButtonGroup();
+	groupReference = new ScButtonGroup();
 
 	groupReference->addButton(ad->buttonReferenceFirst, 0);
+	groupReference->addButton(ad->buttonReferenceSelection, 5);
 	groupReference->addButton(ad->buttonReferenceLast, 1);
 	groupReference->addButton(ad->buttonReferencePage, 2);
 	groupReference->addButton(ad->buttonReferenceMargins, 3);
 	groupReference->addButton(ad->buttonReferenceGuide, 4);
-	groupReference->addButton(ad->buttonReferenceSelection, 5);
+
 	ad->buttonReferenceFirst->setChecked(true);
 
-	groupMode = new QButtonGroup();
+	groupMode = new ScButtonGroup();
 	groupMode->addButton(ad->buttonModeMove, 0);
 	groupMode->addButton(ad->buttonModeResize, 1);
 	ad->buttonModeMove->setChecked(true);
diff --git a/scribus/ui/aligndistribute.h b/scribus/ui/aligndistribute.h
index 799eebaee..c4934f28f 100644
--- a/scribus/ui/aligndistribute.h
+++ b/scribus/ui/aligndistribute.h
@@ -32,10 +32,11 @@ for which a new license (GPL+exception) is in place.
 
 class QEvent;
 
+#include "docks/dock_panelbase.h"
 #include "scribusapi.h"
 #include "scribusdoc.h"
 #include "ui/scdockpalette.h"
-#include "docks/dock_panelbase.h"
+#include "ui/widgets/buttongroup.h"
 
 class QComboBox;
 class QLabel;
@@ -81,8 +82,8 @@ public slots:
 protected:
 	ScribusView *currView { nullptr };
 	AlignDistribute * ad {nullptr};
-	QButtonGroup* groupReference;
-	QButtonGroup* groupMode;
+	ScButtonGroup* groupReference;
+	ScButtonGroup* groupMode;
 
 	void changeEvent(QEvent *e) override;
 	
diff --git a/scribus/ui/aligndistribute.ui b/scribus/ui/aligndistribute.ui
index 0f59ef964..523e2f735 100644
--- a/scribus/ui/aligndistribute.ui
+++ b/scribus/ui/aligndistribute.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>322</width>
-    <height>426</height>
+    <height>429</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -63,7 +63,7 @@
            </property>
            <layout class="QHBoxLayout" name="horizontalLayout">
             <property name="spacing">
-             <number>4</number>
+             <number>0</number>
             </property>
             <property name="leftMargin">
              <number>0</number>
@@ -78,7 +78,7 @@
              <number>0</number>
             </property>
             <item>
-             <widget class="QToolButton" name="buttonReferenceFirst">
+             <widget class="ScToolButton" name="buttonReferenceFirst">
               <property name="text">
                <string/>
               </property>
@@ -88,7 +88,7 @@
              </widget>
             </item>
             <item>
-             <widget class="QToolButton" name="buttonReferenceSelection">
+             <widget class="ScToolButton" name="buttonReferenceSelection">
               <property name="text">
                <string/>
               </property>
@@ -98,7 +98,7 @@
              </widget>
             </item>
             <item>
-             <widget class="QToolButton" name="buttonReferenceLast">
+             <widget class="ScToolButton" name="buttonReferenceLast">
               <property name="text">
                <string/>
               </property>
@@ -108,7 +108,7 @@
              </widget>
             </item>
             <item>
-             <widget class="QToolButton" name="buttonReferencePage">
+             <widget class="ScToolButton" name="buttonReferencePage">
               <property name="text">
                <string/>
               </property>
@@ -118,7 +118,7 @@
              </widget>
             </item>
             <item>
-             <widget class="QToolButton" name="buttonReferenceMargins">
+             <widget class="ScToolButton" name="buttonReferenceMargins">
               <property name="text">
                <string/>
               </property>
@@ -147,7 +147,7 @@
            </property>
            <layout class="QHBoxLayout" name="horizontalLayout_12">
             <property name="spacing">
-             <number>4</number>
+             <number>0</number>
             </property>
             <property name="leftMargin">
              <number>0</number>
@@ -162,7 +162,7 @@
              <number>0</number>
             </property>
             <item>
-             <widget class="QToolButton" name="buttonModeMove">
+             <widget class="ScToolButton" name="buttonModeMove">
               <property name="text">
                <string/>
               </property>
@@ -172,7 +172,7 @@
              </widget>
             </item>
             <item>
-             <widget class="QToolButton" name="buttonModeResize">
+             <widget class="ScToolButton" name="buttonModeResize">
               <property name="text">
                <string/>
               </property>
@@ -1137,10 +1137,15 @@
    <addpagemethod>setWidget</addpagemethod>
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>ScToolButton</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>PulsingToolButton</class>
diff --git a/scribus/ui/alignselect.cpp b/scribus/ui/alignselect.cpp
index 725617ac4..7e98650c2 100644
--- a/scribus/ui/alignselect.cpp
+++ b/scribus/ui/alignselect.cpp
@@ -16,26 +16,26 @@ for which a new license (GPL+exception) is in place.
 
 AlignSelect::AlignSelect(QWidget* parent) : FormWidget(parent)
 {
-	buttonGroup = new QButtonGroup(this);
+	buttonGroup = new ScButtonGroup(this);
 
-	TextL = new QToolButton( this );
+	TextL = new ScToolButton( this );
 	TextL->setCheckable( true );
 	TextL->setChecked( true );
 	buttonGroup->addButton(TextL, 0);
 
-	TextC = new QToolButton( this );
+	TextC = new ScToolButton( this );
 	TextC->setCheckable( true );
 	buttonGroup->addButton(TextC, 1);
 
-	TextR = new QToolButton( this );
+	TextR = new ScToolButton( this );
 	TextR->setCheckable( true );
 	buttonGroup->addButton(TextR, 2);
 
-	TextB = new QToolButton( this );
+	TextB = new ScToolButton( this );
 	TextB->setCheckable( true );
 	buttonGroup->addButton(TextB, 3);
 
-	TextF = new QToolButton( this );
+	TextF = new ScToolButton( this );
 	TextF->setCheckable( true );
 	buttonGroup->addButton(TextF, 4);
 
@@ -45,6 +45,9 @@ AlignSelect::AlignSelect(QWidget* parent) : FormWidget(parent)
 	addWidget(TextB);
 	addWidget(TextF);
 
+	// Modifiy layout spacing. Layout is created by addWidget()
+	layout()->setSpacing(0);
+
 	iconSetChange();
 	languageChange();
 
diff --git a/scribus/ui/alignselect.h b/scribus/ui/alignselect.h
index 9bd60ff9c..16399fe22 100644
--- a/scribus/ui/alignselect.h
+++ b/scribus/ui/alignselect.h
@@ -14,6 +14,7 @@ for which a new license (GPL+exception) is in place.
 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 @@ public:
 	int selectedId() const;
 
 	int selected { 0 };
-	QButtonGroup* buttonGroup { nullptr };
-	QToolButton* TextL { nullptr };
-	QToolButton* TextR { nullptr };
-	QToolButton* TextC { nullptr };
-	QToolButton* TextB { nullptr };
-	QToolButton* TextF { nullptr };
+	ScButtonGroup* buttonGroup { nullptr };
+	ScToolButton* TextL { nullptr };
+	ScToolButton* TextR { nullptr };
+	ScToolButton* TextC { nullptr };
+	ScToolButton* TextB { nullptr };
+	ScToolButton* TextF { nullptr };
 
 public slots:
 	void iconSetChange();
diff --git a/scribus/ui/alignverticalselect.cpp b/scribus/ui/alignverticalselect.cpp
index 13a623496..c9e34efc5 100644
--- a/scribus/ui/alignverticalselect.cpp
+++ b/scribus/ui/alignverticalselect.cpp
@@ -16,19 +16,19 @@ for which a new license (GPL+exception) is in place.
 
 AlignVerticalSelect::AlignVerticalSelect(QWidget* parent) : FormWidget(parent)
 {
-	buttonGroup = new QButtonGroup(this);
+	buttonGroup = new ScButtonGroup(this);
 	buttonGroup->setExclusive(true);
 
-	TextT = new QToolButton( this );
+	TextT = new ScToolButton( this );
 	TextT->setCheckable( true );
 	TextT->setChecked( true );
 	buttonGroup->addButton(TextT, 0);
 
-	TextC = new QToolButton( this );
+	TextC = new ScToolButton( this );
 	TextC->setCheckable( true );
 	buttonGroup->addButton(TextC, 1);
 
-	TextB = new QToolButton( this );
+	TextB = new ScToolButton( this );
 	TextB->setCheckable( true );
 	buttonGroup->addButton(TextB, 2);
 
@@ -36,6 +36,9 @@ AlignVerticalSelect::AlignVerticalSelect(QWidget* parent) : FormWidget(parent)
 	addWidget(TextC);
 	addWidget(TextB);
 
+	// Modifiy layout spacing. Layout is created by addWidget()
+	layout()->setSpacing(0);
+
 	iconSetChange();
 	languageChange();
 
diff --git a/scribus/ui/alignverticalselect.h b/scribus/ui/alignverticalselect.h
index 4a5d6b0b0..04fa43765 100644
--- a/scribus/ui/alignverticalselect.h
+++ b/scribus/ui/alignverticalselect.h
@@ -14,6 +14,7 @@ for which a new license (GPL+exception) is in place.
 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 @@ public:
 	void setStyle(int s);
 	int getStyle() const;
 
-	QButtonGroup* buttonGroup { nullptr };
-	QToolButton* TextT { nullptr };
-	QToolButton* TextC { nullptr };
-	QToolButton* TextB { nullptr };
+	ScButtonGroup* buttonGroup { nullptr };
+	ScToolButton* TextT { nullptr };
+	ScToolButton* TextC { nullptr };
+	ScToolButton* TextB { nullptr };
 
 public slots:
 	void iconSetChange();
diff --git a/scribus/ui/colorpicker/colorpicker_enum.h b/scribus/ui/colorpicker/colorpicker_enum.h
index ca6427b6b..5888a6c0a 100644
--- a/scribus/ui/colorpicker/colorpicker_enum.h
+++ b/scribus/ui/colorpicker/colorpicker_enum.h
@@ -100,7 +100,6 @@ struct CPGradientVectorData
 	double C4Y = 0.0;
 	double C5X = 0.0;
 	double C5Y = 0.0;
-
 };
 
 struct CPColorData
diff --git a/scribus/ui/directionselect.cpp b/scribus/ui/directionselect.cpp
index 24556ec8f..6b38de7c3 100644
--- a/scribus/ui/directionselect.cpp
+++ b/scribus/ui/directionselect.cpp
@@ -15,24 +15,32 @@ for which a new license (GPL+exception) is in place.
 
 DirectionSelect::DirectionSelect(QWidget* parent) : FormWidget(parent)
 {
-	buttonGroup = new QButtonGroup(this);
+	buttonGroup = new ScButtonGroup(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 ScToolButton( this );
 	LTR->setCheckable( true );
 	LTR->setChecked( true );
 	addWidget( LTR );
 	buttonGroup->addButton(LTR, 0);
 
-	RTL = new QToolButton( this );
+	RTL = new ScToolButton( 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)));
 }
diff --git a/scribus/ui/directionselect.h b/scribus/ui/directionselect.h
index 3d69cd683..624b21d8f 100644
--- a/scribus/ui/directionselect.h
+++ b/scribus/ui/directionselect.h
@@ -16,6 +16,7 @@ for which a new license (GPL+exception) is in place.
 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 @@ class SCRIBUS_API DirectionSelect : public FormWidget
 		int getStyle();
 		int selectedId();
 
-		QButtonGroup* buttonGroup { nullptr };
-		QToolButton* RTL { nullptr };
-		QToolButton* LTR { nullptr };
+		ScButtonGroup* buttonGroup { nullptr };
+		ScToolButton* RTL { nullptr };
+		ScToolButton* LTR { nullptr };
 
 	public slots:
 		void iconSetChange();
diff --git a/scribus/ui/factories/scribusproxystyle.cpp b/scribus/ui/factories/scribusproxystyle.cpp
index 94ce7dbde..66e7e00ee 100644
--- a/scribus/ui/factories/scribusproxystyle.cpp
+++ b/scribus/ui/factories/scribusproxystyle.cpp
@@ -18,6 +18,7 @@
 
 #include "prefsmanager.h"
 #include "scribus.h"
+#include "ui/widgets/buttongroup.h"
 #include "ui/widgets/color_slider.h"
 #include "util_gui.h"
 
@@ -66,12 +67,86 @@ ScribusProxyStyle* ScribusProxyStyle::instance()
 	return static_cast<ScribusProxyStyle*>(qApp->style());
 }
 
+void ScribusProxyStyle::drawControl(ControlElement ce, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
+{
+	switch (ce)
+	{
+	case QStyle::ControlElement::CE_ToolButtonLabel:
+	{
+		QStyleOptionToolButton soButton = *qstyleoption_cast<const QStyleOptionToolButton *>(option);
+		const ScToolButton *wdg = qobject_cast<const ScToolButton *>(widget);
+
+		if (wdg)
+		{
+			QRect rect = soButton.rect;
+			int t = widget->rect().top() + 4;
+			int b = widget->rect().bottom() - 4;
+			int r = widget->rect().right();
+
+			switch (wdg->position())
+			{
+			case ScToolButton::Right:
+				soButton.rect.adjust(0, 0, rect.width() / 2, 0);
+				break;
+			case ScToolButton::Left:
+				soButton.rect.adjust(-rect.width() / 2, 0, 0, 0);
+				painter->setPen(option->palette.color(QPalette::Mid));
+				painter->drawLine(r, t, r, b);
+				break;
+			case ScToolButton::Center:
+				soButton.rect.adjust(-rect.width() / 2, 0, rect.width() / 2, 0);
+				painter->setPen(option->palette.color(QPalette::Mid));
+				painter->drawLine(r, t, r, b);
+				break;
+			default:
+				// do nothing
+				break;
+			}
+
+			return QProxyStyle::drawControl(ce, &soButton, painter, widget);
+		}
+	}
+		break;
+	default:
+		break;
+	}
+
+	return QProxyStyle::drawControl(ce, option, painter, widget);
+}
+
 QRect ScribusProxyStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *option, SubControl sc, const QWidget *widget) const
 {
 	QRect rect = QProxyStyle::subControlRect(cc, option, sc, widget);
 
 	switch (cc)
 	{
+	case QStyle::ComplexControl::CC_ToolButton:
+	{
+		const QStyleOptionToolButton *soButton = qstyleoption_cast<const QStyleOptionToolButton *>(option);
+		const ScToolButton *wdg = qobject_cast<const ScToolButton *>(widget);
+
+		if (soButton && wdg)
+		{
+			switch (wdg->position())
+			{
+			case ScToolButton::Left:
+				rect.adjust(0, 0, rect.width(), 0);
+				break;
+			case ScToolButton::Center:
+				rect.adjust(-rect.width() / 2, 0, rect.width() / 2, 0);
+				break;
+			case ScToolButton::Right:
+				rect.adjust(-rect.width(), 0, 0, 0);
+				break;
+			default:
+				// do nothing
+				break;
+			}
+
+			return visualRect(soButton->direction, soButton->rect, rect);
+		}
+	}
+	break;
 	case QStyle::ComplexControl::CC_Slider:
 	{
 		const QStyleOptionSlider *soSlider = qstyleoption_cast<const QStyleOptionSlider *>(option);
@@ -225,6 +300,7 @@ void ScribusProxyStyle::drawComplexControl(ComplexControl cc, const QStyleOption
 	}
 
 	QProxyStyle::drawComplexControl(cc, opt, painter, widget);
+
 }
 
 bool ScribusProxyStyle::eventFilter(QObject *object, QEvent *event)
diff --git a/scribus/ui/factories/scribusproxystyle.h b/scribus/ui/factories/scribusproxystyle.h
index 308d8594b..2c7d122bf 100644
--- a/scribus/ui/factories/scribusproxystyle.h
+++ b/scribus/ui/factories/scribusproxystyle.h
@@ -21,6 +21,7 @@ public:
 	static ScribusProxyStyle* instance();
 
 	QRect subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget = nullptr) const override;
+	void drawControl(QStyle::ControlElement el, const QStyleOption *opt, QPainter *painter, const QWidget *widget = nullptr) const override;
 	void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *painter, const QWidget *widget) const override;
 
 protected:
diff --git a/scribus/ui/flopwidget.cpp b/scribus/ui/flopwidget.cpp
index 0b3a537b9..41340fe06 100644
--- a/scribus/ui/flopwidget.cpp
+++ b/scribus/ui/flopwidget.cpp
@@ -11,22 +11,22 @@ for which a new license (GPL+exception) is in place.
 #include "scribusapp.h"
 
 FlopWidget::FlopWidget(QWidget* parent) : FormWidget(parent)
-{	
+{
 
-	flopRealHeight = new QToolButton();
+	flopRealHeight = new ScToolButton();
 	flopRealHeight->setCheckable(true);
 	flopRealHeight->setChecked(true);	
-	flopFontAscent = new QToolButton();
+	flopFontAscent = new ScToolButton();
 	flopFontAscent->setCheckable(true);
-	flopLineSpacing = new QToolButton();
+	flopLineSpacing = new ScToolButton();
 	flopLineSpacing->setCheckable(true);
-	flopBaselineGrid = new QToolButton();
+	flopBaselineGrid = new ScToolButton();
 	flopBaselineGrid->setCheckable(true);
 
-	flopGroup = new QButtonGroup();
+	flopGroup = new ScButtonGroup();
 	flopGroup->setExclusive(true);
-	flopGroup->addButton(flopRealHeight,  RealHeightID);
 	flopGroup->addButton(flopFontAscent,  FontAscentID);
+	flopGroup->addButton(flopRealHeight,  RealHeightID);
 	flopGroup->addButton(flopLineSpacing, LineSpacingID);
 	flopGroup->addButton(flopBaselineGrid, BaselineGridID);
 
@@ -35,6 +35,9 @@ FlopWidget::FlopWidget(QWidget* parent) : FormWidget(parent)
 	addWidget(flopLineSpacing);
 	addWidget(flopBaselineGrid);
 
+	// Modifiy layout spacing. Layout is created by addWidget()
+	layout()->setSpacing(0);
+
 	iconSetChange();
 	languageChange();
 
diff --git a/scribus/ui/flopwidget.h b/scribus/ui/flopwidget.h
index cdb682da5..0e4dbff85 100644
--- a/scribus/ui/flopwidget.h
+++ b/scribus/ui/flopwidget.h
@@ -9,7 +9,9 @@ for which a new license (GPL+exception) is in place.
 
 
 #include <QButtonGroup>
+#include <QHBoxLayout>
 #include <QToolButton>
+#include "ui/widgets/buttongroup.h"
 #include "ui/widgets/form_widget.h"
 
 class ScribusDoc;
@@ -31,11 +33,11 @@ public:
 	FlopWidget(QWidget* parent);
 	~FlopWidget() {};
 
-	QButtonGroup *flopGroup;
-	QToolButton *flopRealHeight = {nullptr};
-	QToolButton *flopFontAscent = {nullptr};
-	QToolButton *flopLineSpacing = {nullptr};
-	QToolButton *flopBaselineGrid = {nullptr};
+	ScButtonGroup *flopGroup;
+	ScToolButton *flopRealHeight = {nullptr};
+	ScToolButton *flopFontAscent = {nullptr};
+	ScToolButton *flopLineSpacing = {nullptr};
+	ScToolButton *flopBaselineGrid = {nullptr};
 
 protected:
 
diff --git a/scribus/ui/newdocdialog.cpp b/scribus/ui/newdocdialog.cpp
index 4a5c52eb9..8e1c6ab62 100644
--- a/scribus/ui/newdocdialog.cpp
+++ b/scribus/ui/newdocdialog.cpp
@@ -143,12 +143,12 @@ void NewDocDialog::createNewDocPage()
 	comboSortSizes->addItem( tr("Size Desc"), PageSizeList::DimensionDesc);
 	comboSortSizes->setCurrentIndex(0);
 
-	pageOrientationButtons = new QButtonGroup();
+	pageOrientationButtons = new ScButtonGroup();
 	pageOrientationButtons->addButton(buttonVertical, 0);
 	pageOrientationButtons->addButton(buttonHorizontal, 1);
 	pageOrientationButtons->button(orientation)->setChecked(true);
 
-	pageLayoutButtons = new QButtonGroup();
+	pageLayoutButtons = new ScButtonGroup();
 	pageLayoutButtons->addButton(buttonSinglePage, 0);
 	pageLayoutButtons->addButton(buttonDoublePageLeft, 1);
 	pageLayoutButtons->addButton(buttonDoublePageRight, 2);
diff --git a/scribus/ui/newdocdialog.h b/scribus/ui/newdocdialog.h
index a65550f3d..eacc7075a 100644
--- a/scribus/ui/newdocdialog.h
+++ b/scribus/ui/newdocdialog.h
@@ -34,6 +34,7 @@ class QSpinBox;
 #include "scribusstructs.h"
 #include "ui/customfdialog.h"
 #include "ui/nftwidget.h"
+#include "ui/widgets/buttongroup.h"
 
 #include "ui_newdocdialog.h"
 
@@ -120,8 +121,8 @@ private slots:
 protected:
 	PrefsManager& prefsManager;
 	QStringList recentDocList;
-	QButtonGroup* pageOrientationButtons;
-	QButtonGroup* pageLayoutButtons;
+	ScButtonGroup* pageOrientationButtons;
+	ScButtonGroup* pageLayoutButtons;
 
 	double m_unitRatio { 1.0 };
 	int m_orientation { 0 };
diff --git a/scribus/ui/newdocdialog.ui b/scribus/ui/newdocdialog.ui
index 53c60dcff..a8b235536 100644
--- a/scribus/ui/newdocdialog.ui
+++ b/scribus/ui/newdocdialog.ui
@@ -123,8 +123,8 @@
            <rect>
             <x>0</x>
             <y>0</y>
-            <width>267</width>
-            <height>564</height>
+            <width>319</width>
+            <height>582</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="ScToolButton" name="buttonVertical">
                       <property name="text">
                        <string/>
                       </property>
@@ -374,7 +374,7 @@
                      </widget>
                     </item>
                     <item>
-                     <widget class="QToolButton" name="buttonHorizontal">
+                     <widget class="ScToolButton" 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,38 +446,34 @@
                      <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="ScToolButton" name="buttonSinglePage">
+                      <property name="text">
+                       <string/>
+                      </property>
+                      <property name="checkable">
+                       <bool>true</bool>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <widget class="ScToolButton" name="buttonDoublePageLeft">
+                      <property name="text">
+                       <string/>
+                      </property>
+                      <property name="checkable">
+                       <bool>true</bool>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <widget class="ScToolButton" name="buttonDoublePageRight">
+                      <property name="text">
+                       <string/>
+                      </property>
+                      <property name="checkable">
+                       <bool>true</bool>
+                      </property>
+                     </widget>
                     </item>
                    </layout>
                   </widget>
@@ -821,10 +820,15 @@
    <addpagemethod>setWidget</addpagemethod>
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>ScToolButton</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>
diff --git a/scribus/ui/propertiespalette_fill.cpp b/scribus/ui/propertiespalette_fill.cpp
index 6ccfe74fc..fc734d281 100644
--- a/scribus/ui/propertiespalette_fill.cpp
+++ b/scribus/ui/propertiespalette_fill.cpp
@@ -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 @@ PropertiesPalette_Fill::PropertiesPalette_Fill(QWidget *parent) :
 
 	undoManager = UndoManager::instance();
 
+	ScButtonGroup * fillRuleGroup = new ScButtonGroup();
+	fillRuleGroup->addButton(evenOdd);
+	fillRuleGroup->addButton(nonZero);
+
 	iconSetChange();
 	languageChange();
 
diff --git a/scribus/ui/propertiespalette_fill.ui b/scribus/ui/propertiespalette_fill.ui
index d3836a2d5..5dd9cd327 100644
--- a/scribus/ui/propertiespalette_fill.ui
+++ b/scribus/ui/propertiespalette_fill.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>335</width>
+    <width>348</width>
     <height>68</height>
    </rect>
   </property>
@@ -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="ScToolButton" name="evenOdd">
           <property name="text">
            <string/>
           </property>
@@ -179,7 +179,7 @@
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="nonZero">
+         <widget class="ScToolButton" 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>
@@ -218,6 +218,11 @@
    <header>ui/widgets/form_widget.h</header>
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>ScToolButton</class>
+   <extends>QToolButton</extends>
+   <header>ui/widgets/buttongroup.h</header>
+  </customwidget>
   <customwidget>
    <class>ColorButton</class>
    <extends>QToolButton</extends>
diff --git a/scribus/ui/propertiespalette_line.cpp b/scribus/ui/propertiespalette_line.cpp
index f551aab15..ab40fd1ec 100644
--- a/scribus/ui/propertiespalette_line.cpp
+++ b/scribus/ui/propertiespalette_line.cpp
@@ -39,15 +39,15 @@ PropertiesPalette_Line::PropertiesPalette_Line( QWidget* parent) : QWidget(paren
 	setupUi(this);
 	setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum));
 
-	buttonsCaps = new QButtonGroup();
+	buttonsCaps = new ScButtonGroup();
 	buttonsCaps->addButton(buttonCapFlat, 0);
 	buttonsCaps->addButton(buttonCapSquare, 1);
 	buttonsCaps->addButton(buttonCapRound, 2);
 
-	buttonsJoins = new QButtonGroup();
+	buttonsJoins = new ScButtonGroup();
 	buttonsJoins->addButton(buttonJoinMiter, 0);
-	buttonsJoins->addButton(buttonJoinBevel, 1);
 	buttonsJoins->addButton(buttonJoinRound, 2);
+	buttonsJoins->addButton(buttonJoinBevel, 1);
 
 	lineType->addItem( tr("Custom"));
 
diff --git a/scribus/ui/propertiespalette_line.h b/scribus/ui/propertiespalette_line.h
index d22b310da..01b9530af 100644
--- a/scribus/ui/propertiespalette_line.h
+++ b/scribus/ui/propertiespalette_line.h
@@ -12,6 +12,7 @@ for which a new license (GPL+exception) is in place.
 #include <QListWidgetItem>
 #include "scribusapi.h"
 #include "scguardedptr.h"
+#include "ui/widgets/buttongroup.h"
 #include "units.h"
 
 class ArrowChooser;
@@ -43,8 +44,8 @@ protected:
 	PageItem *m_item {nullptr};
 	ScribusMainWindow* m_ScMW {nullptr};
 	ScGuardedPtr<ScribusDoc> m_doc;
-	QButtonGroup *buttonsCaps;
-	QButtonGroup *buttonsJoins;
+	ScButtonGroup *buttonsCaps;
+	ScButtonGroup *buttonsJoins;
 	LineMarkerSelector *lineMarkerSelectorStart;
 	LineMarkerSelector *lineMarkerSelectorEnd;
 
diff --git a/scribus/ui/propertiespalette_linebase.ui b/scribus/ui/propertiespalette_linebase.ui
index 084d424bb..1f15c6640 100644
--- a/scribus/ui/propertiespalette_linebase.ui
+++ b/scribus/ui/propertiespalette_linebase.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>315</width>
+    <width>327</width>
     <height>235</height>
    </rect>
   </property>
@@ -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="ScToolButton" name="buttonCapFlat">
           <property name="text">
            <string/>
           </property>
@@ -461,7 +461,7 @@
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="buttonCapSquare">
+         <widget class="ScToolButton" name="buttonCapSquare">
           <property name="text">
            <string/>
           </property>
@@ -471,7 +471,7 @@
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="buttonCapRound">
+         <widget class="ScToolButton" 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="ScToolButton" name="buttonJoinMiter">
           <property name="text">
            <string/>
           </property>
@@ -520,7 +520,7 @@
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="buttonJoinRound">
+         <widget class="ScToolButton" name="buttonJoinRound">
           <property name="text">
            <string/>
           </property>
@@ -530,7 +530,7 @@
          </widget>
         </item>
         <item>
-         <widget class="QToolButton" name="buttonJoinBevel">
+         <widget class="ScToolButton" name="buttonJoinBevel">
           <property name="text">
            <string/>
           </property>
@@ -567,15 +567,25 @@
    <container>1</container>
   </customwidget>
   <customwidget>
-   <class>ColorButton</class>
+   <class>ScToolButton</class>
    <extends>QToolButton</extends>
-   <header>ui/widgets/color_button.h</header>
+   <header>ui/widgets/buttongroup.h</header>
   </customwidget>
   <customwidget>
    <class>ScrSpinBox</class>
    <extends>QDoubleSpinBox</extends>
    <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>ComboBlendMode</class>
+   <extends>QComboBox</extends>
+   <header>ui/widgets/combo_blendmode.h</header>
+  </customwidget>
   <customwidget>
    <class>LineCombo</class>
    <extends>QComboBox</extends>
@@ -587,11 +597,6 @@
    <header>ui/dasheditor.h</header>
    <container>1</container>
   </customwidget>
-  <customwidget>
-   <class>ComboBlendMode</class>
-   <extends>QComboBox</extends>
-   <header>ui/widgets/combo_blendmode.h</header>
-  </customwidget>
   <customwidget>
    <class>ComboLineStyle</class>
    <extends>QComboBox</extends>
diff --git a/scribus/ui/propertiespalette_shape.cpp b/scribus/ui/propertiespalette_shape.cpp
index e34647e9c..7f21b1a35 100644
--- a/scribus/ui/propertiespalette_shape.cpp
+++ b/scribus/ui/propertiespalette_shape.cpp
@@ -38,11 +38,18 @@ PropertiesPalette_Shape::PropertiesPalette_Shape( QWidget* parent)
 	iconSetChange();
 	languageChange();
 
+	ScButtonGroup * bgFlow = new ScButtonGroup();
+	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*)));
diff --git a/scribus/ui/propertiespalette_shapebase.ui b/scribus/ui/propertiespalette_shapebase.ui
index 48125e54a..8ccd18b6a 100644
--- a/scribus/ui/propertiespalette_shapebase.ui
+++ b/scribus/ui/propertiespalette_shapebase.ui
@@ -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="ScToolButton" 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="ScToolButton" 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="ScToolButton" 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="ScToolButton" 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="ScToolButton" 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>
@@ -252,7 +237,7 @@
    <item>
     <spacer name="verticalSpacer">
      <property name="orientation">
-      <enum>Qt::Vertical</enum>
+      <enum>Qt::Orientation::Vertical</enum>
      </property>
      <property name="sizeHint" stdset="0">
       <size>
@@ -271,10 +256,15 @@
    <header>ui/widgets/form_widget.h</header>
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>ScToolButton</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>Autoforms</class>
@@ -284,7 +274,4 @@
  </customwidgets>
  <resources/>
  <connections/>
- <buttongroups>
-  <buttongroup name="textFlowBtnGroup"/>
- </buttongroups>
 </ui>
diff --git a/scribus/ui/propertywidget_alignment.ui b/scribus/ui/propertywidget_alignment.ui
index 2f3543edc..e208b1d61 100644
--- a/scribus/ui/propertywidget_alignment.ui
+++ b/scribus/ui/propertywidget_alignment.ui
@@ -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>
diff --git a/scribus/ui/propertywidget_fontfeatures.cpp b/scribus/ui/propertywidget_fontfeatures.cpp
index 3e2dbd002..9ee39972a 100644
--- a/scribus/ui/propertywidget_fontfeatures.cpp
+++ b/scribus/ui/propertywidget_fontfeatures.cpp
@@ -18,6 +18,7 @@ for which a new license (GPL+exception) is in place.
 #include "selection.h"
 
 #include "fonts/fontfeatures.h"
+#include "ui/widgets/buttongroup.h"
 
 
 PropertyWidget_FontFeatures::PropertyWidget_FontFeatures(QWidget* parent) : QFrame(parent)
@@ -833,7 +834,7 @@ void PropertyWidget_FontFeatures::initWidgets()
 	OrdinalCheck->installEventFilter(this);
 	SlashedZeroCheck->installEventFilter(this);
 
-	QButtonGroup * groupCapitals = new QButtonGroup();
+	ScButtonGroup * groupCapitals = new ScButtonGroup();
 	groupCapitals->setExclusive(true);
 	groupCapitals->addButton(NormalCapRadio);
 	groupCapitals->addButton(SmallRadio);
@@ -845,19 +846,26 @@ void PropertyWidget_FontFeatures::initWidgets()
 	groupCapitals->addButton(UnicaseRadio);
 	groupCapitals->addButton(TitlingRadio);
 
-	QButtonGroup * groupFractions = new QButtonGroup();
+	ScButtonGroup * groupPosition = new ScButtonGroup();
+	groupPosition->setExclusive(true);
+	groupPosition->addButton(DefaultPosRadio);
+	groupPosition->addButton(SubscriptRadio);
+	groupPosition->addButton(SuperscriptRadio);
+	groupPosition->addButton(OrdinalCheck);
+
+	ScButtonGroup * groupFractions = new ScButtonGroup();
 	groupFractions->setExclusive(true);
 	groupFractions->addButton(DefaultFractionsRadio);
 	groupFractions->addButton(DiagonalRadio);
 	groupFractions->addButton(StackedRadio);
 
-	QButtonGroup * groupNumeralStyle = new QButtonGroup();
+	ScButtonGroup * groupNumeralStyle = new ScButtonGroup();
 	groupNumeralStyle->setExclusive(true);
 	groupNumeralStyle->addButton(DefaultStyleRadio);
 	groupNumeralStyle->addButton(LiningRadio);
 	groupNumeralStyle->addButton(OldStyleRadio);
 
-	QButtonGroup * groupNumeralWidth = new QButtonGroup();
+	ScButtonGroup * groupNumeralWidth = new ScButtonGroup();
 	groupNumeralWidth->setExclusive(true);
 	groupNumeralWidth->addButton(DefaultWidthRadio);
 	groupNumeralWidth->addButton(ProportionalRadio);
@@ -870,31 +878,14 @@ void PropertyWidget_FontFeatures::initWidgets()
 	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);
 
diff --git a/scribus/ui/propertywidget_fontfeaturesbase.ui b/scribus/ui/propertywidget_fontfeaturesbase.ui
index d70f42f48..71def0200 100644
--- a/scribus/ui/propertywidget_fontfeaturesbase.ui
+++ b/scribus/ui/propertywidget_fontfeaturesbase.ui
@@ -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="ScToolButton" 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="ScToolButton" 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="ScToolButton" 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="ScToolButton" name="DefaultPosRadio">
          <property name="toolTip">
           <string>Normal position</string>
          </property>
@@ -157,7 +157,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="SubscriptRadio">
+        <widget class="ScToolButton" name="SubscriptRadio">
          <property name="toolTip">
           <string>Subscript (subs)</string>
          </property>
@@ -173,7 +173,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="SuperscriptRadio">
+        <widget class="ScToolButton" name="SuperscriptRadio">
          <property name="toolTip">
           <string>Superscript (sups)</string>
          </property>
@@ -189,7 +189,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="OrdinalCheck">
+        <widget class="ScToolButton" 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="ScToolButton" name="NormalCapRadio">
          <property name="toolTip">
           <string>Normal capitals</string>
          </property>
@@ -428,7 +428,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="SmallRadio">
+        <widget class="ScToolButton" 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="ScToolButton" 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="ScToolButton" 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="ScToolButton" 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="ScToolButton" 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="ScToolButton" 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="ScToolButton" name="UnicaseRadio">
          <property name="toolTip">
           <string>Unicase (unic)</string>
          </property>
@@ -540,7 +540,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="TitlingRadio">
+        <widget class="ScToolButton" 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="ScToolButton" name="DefaultFractionsRadio">
          <property name="toolTip">
           <string>No fractions</string>
          </property>
@@ -644,7 +644,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="DiagonalRadio">
+        <widget class="ScToolButton" name="DiagonalRadio">
          <property name="toolTip">
           <string>Fractions (frac)</string>
          </property>
@@ -660,7 +660,7 @@
         </widget>
        </item>
        <item>
-        <widget class="QToolButton" name="StackedRadio">
+        <widget class="ScToolButton" 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="ScToolButton" 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="ScToolButton" 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="ScToolButton" name="OldStyleRadio">
          <property name="toolTip">
           <string>Oldstyle Figures (onum)</string>
          </property>
@@ -1122,6 +1122,11 @@
   </layout>
  </widget>
  <customwidgets>
+  <customwidget>
+   <class>ScToolButton</class>
+   <extends>QToolButton</extends>
+   <header>ui/widgets/buttongroup.h</header>
+  </customwidget>
   <customwidget>
    <class>Switch</class>
    <extends>QToolButton</extends>
diff --git a/scribus/ui/smalignselect.cpp b/scribus/ui/smalignselect.cpp
index 115cea254..35d6064e3 100644
--- a/scribus/ui/smalignselect.cpp
+++ b/scribus/ui/smalignselect.cpp
@@ -4,6 +4,7 @@ to the COPYING file provided with the program. Following this notice may exist
 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 @@ for which a new license (GPL+exception) is in place.
 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"));
diff --git a/scribus/ui/styleselect.cpp b/scribus/ui/styleselect.cpp
index ab7c67732..102516091 100644
--- a/scribus/ui/styleselect.cpp
+++ b/scribus/ui/styleselect.cpp
@@ -6,6 +6,7 @@ for which a new license (GPL+exception) is in place.
 */
 
 #include <QEvent>
+#include <QButtonGroup>
 
 #include "iconmanager.h"
 #include "scribusapp.h"
@@ -130,7 +131,7 @@ void ShadowValues::languageChange()
 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 );
@@ -138,18 +139,26 @@ StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
 	UnderlineValAct = new QWidgetAction(this);
 	UnderlineValAct->setDefaultWidget(UnderlineVal);
 	UnderlinePop->addAction(UnderlineValAct);
-	underlineButton = new QToolButton( this );
+	underlineButton = new ScToolButton( this );
 	underlineButton->setText( "" );
 	underlineButton->setCheckable( true );
 	underlineButton->setMenu(UnderlinePop);
 	underlineButton->setPopupMode(QToolButton::DelayedPopup);
 	ssLayout->addWidget( underlineButton );
-	underlineWordButton = new QToolButton( this );
+	underlineWordButton = new ScToolButton( this );
 	underlineWordButton->setText( "" );
 	underlineWordButton->setCheckable( true );
 	underlineWordButton->setMenu(UnderlinePop);
 	underlineWordButton->setPopupMode(QToolButton::DelayedPopup);
-	ssLayout->addWidget( underlineWordButton );	
+	ssLayout->addWidget( underlineWordButton );
+
+	ScButtonGroup *bgUnderline = new ScButtonGroup();
+	bgUnderline->setExclusive(false);
+	bgUnderline->addButton(underlineButton);
+	bgUnderline->addButton(underlineWordButton);
+
+	ssLayout->addSpacing(4);
+
 	StrikeVal = new StrikeValues( nullptr );
 	StrikePop = new QMenu();
 	StrikeValAct = new QWidgetAction(this);
@@ -162,29 +171,39 @@ StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
 	strikeoutButton->setPopupMode(QToolButton::DelayedPopup);
 	ssLayout->addWidget( strikeoutButton );
 
-	ssLayout->addSpacing(12);
+	ssLayout->addSpacing(16);
 
-	subscriptButton = new QToolButton( this );
+	subscriptButton = new ScToolButton( this );
 	subscriptButton->setText( "" );
 	subscriptButton->setCheckable( true );
 	ssLayout->addWidget( subscriptButton );
-	superscriptButton = new QToolButton( this );
+	superscriptButton = new ScToolButton( this );
 	superscriptButton->setText( "" );
 	superscriptButton->setCheckable( true );
 	ssLayout->addWidget( superscriptButton );
 
-	ssLayout->addSpacing(12);
+	ScButtonGroup *bgSub = new ScButtonGroup();
+	bgSub->setExclusive(false);
+	bgSub->addButton(subscriptButton);
+	bgSub->addButton(superscriptButton);
 
-	allcapsButton = new QToolButton( this );
+	ssLayout->addSpacing(16);
+
+	allcapsButton = new ScToolButton( this );
 	allcapsButton->setText("");
 	allcapsButton->setCheckable( true );
 	ssLayout->addWidget( allcapsButton );
-	smallcapsButton = new QToolButton( this );
+	smallcapsButton = new ScToolButton( this );
 	smallcapsButton->setText("");
 	smallcapsButton->setCheckable( true );
 	ssLayout->addWidget( smallcapsButton );
 
-	ssLayout->addSpacing(12);
+	ScButtonGroup *bgCaps = new ScButtonGroup();
+	bgCaps->setExclusive(false);
+	bgCaps->addButton(allcapsButton);
+	bgCaps->addButton(smallcapsButton);
+
+	ssLayout->addSpacing(16);
 
 	OutlineVal = new OutlineValues( nullptr );
 	OutlinePop = new QMenu();
@@ -198,6 +217,8 @@ StyleSelect::StyleSelect(QWidget* parent) : QWidget(parent)
 	outlineButton->setPopupMode(QToolButton::DelayedPopup);
 	ssLayout->addWidget( outlineButton );
 
+	ssLayout->addSpacing(4);
+
 	ShadowVal = new ShadowValues( nullptr );
 	ShadowPop = new QMenu();
 	ShadowValAct = new QWidgetAction(this);
diff --git a/scribus/ui/styleselect.h b/scribus/ui/styleselect.h
index ae4905e9d..fd2b2c200 100644
--- a/scribus/ui/styleselect.h
+++ b/scribus/ui/styleselect.h
@@ -21,6 +21,7 @@ class QEvent;
 
 #include "scrspinbox.h"
 #include "scribusapi.h"
+#include "ui/widgets/buttongroup.h"
 
 class SCRIBUS_API StrikeValues : public QFrame
 {
@@ -128,12 +129,12 @@ signals:
 
 protected:
 	QHBoxLayout* ssLayout { nullptr };
-	QToolButton* underlineButton { nullptr };
-	QToolButton* underlineWordButton { nullptr };
-	QToolButton* subscriptButton { nullptr };
-	QToolButton* superscriptButton { nullptr };
-	QToolButton* smallcapsButton { nullptr };
-	QToolButton* allcapsButton { nullptr };
+	ScToolButton* underlineButton { nullptr };
+	ScToolButton* underlineWordButton { nullptr };
+	ScToolButton* subscriptButton { nullptr };
+	ScToolButton* superscriptButton { nullptr };
+	ScToolButton* smallcapsButton { nullptr };
+	ScToolButton* allcapsButton { nullptr };
 	QToolButton* strikeoutButton { nullptr };
 	QToolButton* outlineButton { nullptr };
 	QToolButton* shadowButton { nullptr };
diff --git a/scribus/ui/widgets/buttongroup.cpp b/scribus/ui/widgets/buttongroup.cpp
new file mode 100644
index 000000000..5360f9a64
--- /dev/null
+++ b/scribus/ui/widgets/buttongroup.cpp
@@ -0,0 +1,73 @@
+#include "buttongroup.h"
+
+#include <QAbstractButton>
+#include <QApplication>
+#include <QEvent>
+#include <QPainter>
+#include <QStyleHints>
+#include <QStyleOption>
+#include <QStylePainter>
+
+ScButtonGroup::ScButtonGroup(QWidget *parent) : QButtonGroup(parent) {}
+
+void ScButtonGroup::addButton(QAbstractButton *button, int id)
+{
+	button->installEventFilter(this);
+	QButtonGroup::addButton(button, id);
+	updateGroup();
+}
+
+void ScButtonGroup::removeButton(QAbstractButton *button)
+{
+	button->removeEventFilter(this);
+	QButtonGroup::removeButton(button);
+	updateGroup();
+}
+
+void ScButtonGroup::setAutoStyle(bool autoStyle)
+{
+	m_autoStyle = autoStyle;
+	updateGroup();
+}
+
+void ScButtonGroup::updateGroup()
+{
+	QList<int> visButtons;
+
+	// First gather all visible items
+	for( int i = 0; i < buttons().size(); ++i )
+	{
+		if (buttons().at(i)->isVisible())
+			visButtons.append(i);
+	}
+
+	int count = visButtons.size();
+
+	// Apply style to visible buttons
+	for( int i = 0; i < count; ++i )
+	{	
+		ScToolButton *tb = qobject_cast<ScToolButton*>(buttons().at(visButtons.at(i)));
+		if (!tb)
+			return;
+
+		if (!m_autoStyle || count == 1)
+			tb->setPosition(ScToolButton::None);
+		else
+		{
+			if (i == 0) // left
+				tb->setPosition(ScToolButton::Left);
+			else if (i == count - 1) // right
+				tb->setPosition(ScToolButton::Right);
+			else // center
+				tb->setPosition(ScToolButton::Center);
+		}
+	}
+}
+
+bool ScButtonGroup::eventFilter(QObject *object, QEvent *event)
+{
+	if (object != nullptr && (event->type() == QEvent::Show || event->type() == QEvent::Hide))
+		updateGroup();
+
+	return QObject::eventFilter(object, event);
+}
diff --git a/scribus/ui/widgets/buttongroup.h b/scribus/ui/widgets/buttongroup.h
new file mode 100644
index 000000000..3e2926697
--- /dev/null
+++ b/scribus/ui/widgets/buttongroup.h
@@ -0,0 +1,49 @@
+#ifndef SCBUTTONGROUP_H
+#define SCBUTTONGROUP_H
+
+#include <QButtonGroup>
+#include <QProxyStyle>
+#include <QToolButton>
+#include <QWidget>
+
+class ScToolButton : public QToolButton
+{
+	Q_OBJECT
+public:
+	enum Position
+	{
+		None = 0,
+		Left,
+		Center,
+		Right
+	};
+
+	ScToolButton(QWidget* parent = nullptr) : QToolButton(parent) {};
+
+	Position position() const { return m_position; };
+	void setPosition(Position position) { m_position = position; };
+
+private:
+	Position m_position = Position::None;
+};
+
+class ScButtonGroup : public QButtonGroup
+{
+	Q_OBJECT
+
+public:
+	ScButtonGroup(QWidget* parent = nullptr);
+
+	void addButton(QAbstractButton *button, int id = -1);
+	void removeButton(QAbstractButton *button);
+
+	bool autoStyle() { return m_autoStyle;}
+	void setAutoStyle(bool autoStyle) ;
+
+protected:
+	void updateGroup();
+	bool eventFilter(QObject *object, QEvent *event);
+	bool m_autoStyle = true;
+};
+
+#endif // SCBUTTONGROUP_H
diff --git a/scribus/ui/widgets/pulsing_toolbutton.cpp b/scribus/ui/widgets/pulsing_toolbutton.cpp
index bdfdf2906..4c453be24 100644
--- a/scribus/ui/widgets/pulsing_toolbutton.cpp
+++ b/scribus/ui/widgets/pulsing_toolbutton.cpp
@@ -14,7 +14,7 @@
 #include <QWidget>
 
 PulsingToolButton::PulsingToolButton(QWidget *parent):
-	QToolButton(parent)
+	ScToolButton(parent)
 {
 }
 
@@ -22,7 +22,7 @@ void PulsingToolButton::paintEvent(QPaintEvent* event)
 {
 	if (m_transition == nullptr)
 	{
-		QToolButton::paintEvent(event);
+		ScToolButton::paintEvent(event);
 		return;
 	}
 
diff --git a/scribus/ui/widgets/pulsing_toolbutton.h b/scribus/ui/widgets/pulsing_toolbutton.h
index e28a40a70..cedf40fa5 100644
--- a/scribus/ui/widgets/pulsing_toolbutton.h
+++ b/scribus/ui/widgets/pulsing_toolbutton.h
@@ -19,11 +19,12 @@
 #include <QColor>
 #include <QToolButton>
 #include <QVariantAnimation>
+#include "ui/widgets/buttongroup.h"
 
 class QPaintEvent;
 class QWidget;
 
-class PulsingToolButton : public QToolButton
+class PulsingToolButton : public ScToolButton
 {
 	Q_OBJECT
 
