diff --git a/Scribus.pro b/Scribus.pro
index f097e699f..f8d5b56e6 100644
--- a/Scribus.pro
+++ b/Scribus.pro
@@ -1010,6 +1010,7 @@ FORMS += scribus/ui/aboutplugins.ui \
          scribus/ui/actionsearchdialog.ui \
          scribus/ui/aligndistribute.ui \
          scribus/ui/annot.ui \
+         scribus/ui/applytemplatedialog.ui \
          scribus/ui/arcvectorbase.ui \
          scribus/ui/arcwidgetbase.ui \
          scribus/ui/charselect.ui \
diff --git a/scribus/ui/applytemplatedialog.cpp b/scribus/ui/applytemplatedialog.cpp
index 075997b1b..d0e709e6f 100644
--- a/scribus/ui/applytemplatedialog.cpp
+++ b/scribus/ui/applytemplatedialog.cpp
@@ -48,79 +48,84 @@ enum {
  */
 ApplyMasterPageDialog::ApplyMasterPageDialog( QWidget* parent ) : QDialog( parent )
 {
-	setModal(true);
-	setWindowTitle( tr( "Apply Master Page" ));
-	setWindowIcon(IconManager::instance().loadIcon("AppIcon.png"));
-	ApplyMasterPageDialogLayout = new QVBoxLayout(this);
-	ApplyMasterPageDialogLayout->setContentsMargins(9, 9, 9, 9);
-	ApplyMasterPageDialogLayout->setSpacing(6);
-
-	templateNameLayout = new QHBoxLayout;
-	templateNameLayout->setContentsMargins(0, 0, 0, 0);
-	templateNameLayout->setSpacing(6);
-
-	masterPageLabel = new QLabel( this );
-	templateNameLayout->addWidget( masterPageLabel );
-	spacer2 = new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
-	templateNameLayout->addItem( spacer2 );
-
-	masterPageComboBox = new QComboBox(this);
-	masterPageComboBox->setEditable(false);
-	templateNameLayout->addWidget( masterPageComboBox );
-	ApplyMasterPageDialogLayout->addLayout( templateNameLayout );
-
-	applyToPageButtonGroup = new QGroupBox(this);
-	applyToPageButtonGroup->setMinimumSize( QSize( 250, 0 ) );
-	applyToPageButtonGroupLayout = new QVBoxLayout(applyToPageButtonGroup);
-	applyToPageButtonGroupLayout->setSpacing(6);
-	applyToPageButtonGroupLayout->setContentsMargins(9, 9, 9, 9);
-
-	currentPageRadioButton = new QRadioButton( applyToPageButtonGroup );
-	currentPageRadioButton->setChecked( true );
-	applyToPageButtonGroupLayout->addWidget( currentPageRadioButton );
-
-	evenPagesRadioButton = new QRadioButton( applyToPageButtonGroup );
-	applyToPageButtonGroupLayout->addWidget( evenPagesRadioButton );
-
-	oddPagesRadioButton = new QRadioButton( applyToPageButtonGroup );
-	applyToPageButtonGroupLayout->addWidget( oddPagesRadioButton );
-
-	allPagesRadioButton = new QRadioButton( applyToPageButtonGroup );
-	applyToPageButtonGroupLayout->addWidget( allPagesRadioButton );
-
-	rangeLayout = new QHBoxLayout;
-	rangeLayout->setSpacing(6);
-	rangeLayout->setContentsMargins(0, 0, 0, 0);
-
-	useRangeCheckBox = new QCheckBox( applyToPageButtonGroup );
-	useRangeCheckBox->setEnabled( false );	
-	rangeLayout->addWidget( useRangeCheckBox );
-
-	fromPageSpinBox = new ScrSpinBox( applyToPageButtonGroup );
-	fromPageSpinBox->setEnabled( false );
-	fromPageSpinBox->setMinimum( 1 );
-	fromPageSpinBox->setDecimals(0);
+	setupUi(this);
+	setSizePolicy( QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum));
 	fromPageSpinBox->setSuffix("");
-	rangeLayout->addWidget( fromPageSpinBox );
-
-	toPageLabel = new QLabel( applyToPageButtonGroup );
-	rangeLayout->addWidget( toPageLabel );
-
-	toPageSpinBox = new ScrSpinBox( applyToPageButtonGroup );
-	toPageSpinBox->setEnabled( false );
-	toPageSpinBox->setMinimum( 1 );
-	toPageSpinBox->setDecimals(0);
 	toPageSpinBox->setSuffix("");
-	rangeLayout->addWidget( toPageSpinBox );
-	spacer3 = new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
-	rangeLayout->addItem( spacer3 );
-	applyToPageButtonGroupLayout->addLayout( rangeLayout );
-	ApplyMasterPageDialogLayout->addWidget( applyToPageButtonGroup );
-
-	buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
-	ApplyMasterPageDialogLayout->addWidget(buttonBox);
-	languageChange();
+
+	// setModal(true);
+	// setWindowTitle( tr( "Apply Master Page" ));
+	// setWindowIcon(IconManager::instance().loadIcon("AppIcon.png"));
+	// ApplyMasterPageDialogLayout = new QVBoxLayout(this);
+	// ApplyMasterPageDialogLayout->setContentsMargins(9, 9, 9, 9);
+	// ApplyMasterPageDialogLayout->setSpacing(6);
+
+	// templateNameLayout = new QHBoxLayout;
+	// templateNameLayout->setContentsMargins(0, 0, 0, 0);
+	// templateNameLayout->setSpacing(6);
+
+	// masterPageLabel = new QLabel( this );
+	// templateNameLayout->addWidget( masterPageLabel );
+	// spacer2 = new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
+	// templateNameLayout->addItem( spacer2 );
+
+	// masterPageComboBox = new QComboBox(this);
+	// masterPageComboBox->setEditable(false);
+	// templateNameLayout->addWidget( masterPageComboBox );
+	// ApplyMasterPageDialogLayout->addLayout( templateNameLayout );
+
+	// applyToPageButtonGroup = new QGroupBox(this);
+	// applyToPageButtonGroup->setMinimumSize( QSize( 250, 0 ) );
+	// applyToPageButtonGroupLayout = new QVBoxLayout(applyToPageButtonGroup);
+	// applyToPageButtonGroupLayout->setSpacing(6);
+	// applyToPageButtonGroupLayout->setContentsMargins(9, 9, 9, 9);
+
+	// currentPageRadioButton = new QRadioButton( applyToPageButtonGroup );
+	// currentPageRadioButton->setChecked( true );
+	// applyToPageButtonGroupLayout->addWidget( currentPageRadioButton );
+
+	// evenPagesRadioButton = new QRadioButton( applyToPageButtonGroup );
+	// applyToPageButtonGroupLayout->addWidget( evenPagesRadioButton );
+
+	// oddPagesRadioButton = new QRadioButton( applyToPageButtonGroup );
+	// applyToPageButtonGroupLayout->addWidget( oddPagesRadioButton );
+
+	// allPagesRadioButton = new QRadioButton( applyToPageButtonGroup );
+	// applyToPageButtonGroupLayout->addWidget( allPagesRadioButton );
+
+	// rangeLayout = new QHBoxLayout;
+	// rangeLayout->setSpacing(6);
+	// rangeLayout->setContentsMargins(0, 0, 0, 0);
+
+	// useRangeCheckBox = new QCheckBox( applyToPageButtonGroup );
+	// useRangeCheckBox->setEnabled( false );	
+	// rangeLayout->addWidget( useRangeCheckBox );
+
+	// fromPageSpinBox = new ScrSpinBox( applyToPageButtonGroup );
+	// fromPageSpinBox->setEnabled( false );
+	// fromPageSpinBox->setMinimum( 1 );
+	// fromPageSpinBox->setDecimals(0);
+	// fromPageSpinBox->setSuffix("");
+	// rangeLayout->addWidget( fromPageSpinBox );
+
+	// toPageLabel = new QLabel( applyToPageButtonGroup );
+	// rangeLayout->addWidget( toPageLabel );
+
+	// toPageSpinBox = new ScrSpinBox( applyToPageButtonGroup );
+	// toPageSpinBox->setEnabled( false );
+	// toPageSpinBox->setMinimum( 1 );
+	// toPageSpinBox->setDecimals(0);
+	// toPageSpinBox->setSuffix("");
+	// rangeLayout->addWidget( toPageSpinBox );
+	// spacer3 = new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
+	// rangeLayout->addItem( spacer3 );
+	// applyToPageButtonGroupLayout->addLayout( rangeLayout );
+	// ApplyMasterPageDialogLayout->addWidget( applyToPageButtonGroup );
+
+	// buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+	// ApplyMasterPageDialogLayout->addWidget(buttonBox);
 	resize( QSize(268, 230).expandedTo(minimumSizeHint()) );
+	languageChange();
 
 	// signals and slots connections
 	connect( useRangeCheckBox, SIGNAL( toggled(bool) ), this, SLOT( enableRange(bool) ) );
@@ -132,9 +137,10 @@ ApplyMasterPageDialog::ApplyMasterPageDialog( QWidget* parent ) : QDialog( paren
 	connect( toPageSpinBox, SIGNAL( valueChanged(double) ), this, SLOT( checkRangeTo() ) );
 	connect(buttonBox, &QDialogButtonBox::accepted, this, &ApplyMasterPageDialog::accept);
 	connect(buttonBox, &QDialogButtonBox::rejected, this, &ApplyMasterPageDialog::reject);
+	connect(moveItemsCheckBox, &QCheckBox::toggled, this, &ApplyMasterPageDialog::enableItemsSelectable);
 
 	// buddies
-	masterPageLabel->setBuddy( masterPageComboBox );
+	// masterPageLabel->setBuddy( masterPageComboBox );
 }
 
 void ApplyMasterPageDialog::setup(ScribusDoc *doc, const QString& Nam)
@@ -158,6 +164,7 @@ void ApplyMasterPageDialog::setup(ScribusDoc *doc, const QString& Nam)
 	fromPageSpinBox->setValue(doc->currentPage()->pageNr() + 1);
 	toPageSpinBox->setMaximum(docPagesCount);
 	toPageSpinBox->setValue(docPagesCount);
+	facingPages = doc->pagePositioning() != 0;
 }
 
 
@@ -218,6 +225,14 @@ void ApplyMasterPageDialog::singleSelectable()
 	toPageSpinBox->setEnabled(false);
 }
 
+void ApplyMasterPageDialog::enableItemsSelectable(bool enabled)
+{
+	moveItemsAnchorComboBox->setEnabled(enabled);
+	moveItemsAnchorComboBox->setEnabled(enabled);
+	moveItemsMarginLabel->setEnabled(enabled);
+}
+
+
 
 bool ApplyMasterPageDialog::usingRange()
 {
@@ -252,19 +267,31 @@ void ApplyMasterPageDialog::changeEvent(QEvent *e)
 
 void ApplyMasterPageDialog::languageChange()
 {
-	setWindowTitle( tr( "Apply Master Page" ) );
-	masterPageLabel->setText( tr( "&Master Page:" ) );
-	applyToPageButtonGroup->setTitle( tr( "Apply to" ) );
-	currentPageRadioButton->setText( tr( "Current &Page" ) );
-	currentPageRadioButton->setShortcut( QKeySequence( tr( "Alt+P" ) ) );
-	evenPagesRadioButton->setText( tr( "&Even Pages" ) );
-	evenPagesRadioButton->setShortcut( QKeySequence( tr( "Alt+E" ) ) );
-	oddPagesRadioButton->setText( tr( "O&dd Pages" ) );
-	oddPagesRadioButton->setShortcut( QKeySequence( tr( "Alt+D" ) ) );
-	allPagesRadioButton->setText( tr( "&All Pages" ) );
-	allPagesRadioButton->setShortcut( QKeySequence( tr( "Alt+A" ) ) );
-	useRangeCheckBox->setText( tr( "&Within Range" ) );
-	useRangeCheckBox->setShortcut( QKeySequence( tr( "Alt+W" ) ) );
-	useRangeCheckBox->setToolTip( "<qt>" + tr( "Apply the selected master page to even, odd or all pages within the following range") + "</qt>" );
-	toPageLabel->setText( tr( "to" ) );
+	setWindowTitle(tr("Apply Master Page"));
+	masterPageLabel->setText(tr("&Master Page:"));
+	applyToPageButtonGroup->setTitle(tr("Apply to"));
+	currentPageRadioButton->setText(tr("Current &Page"));
+	currentPageRadioButton->setShortcut(QKeySequence(tr("Alt+P")));
+	evenPagesRadioButton->setText(tr("&Even Pages"));
+	evenPagesRadioButton->setShortcut(QKeySequence(tr("Alt+E")));
+	oddPagesRadioButton->setText(tr("O&dd Pages"));
+	oddPagesRadioButton->setShortcut(QKeySequence(tr("Alt+D")));
+	allPagesRadioButton->setText(tr("&All Pages"));
+	allPagesRadioButton->setShortcut(QKeySequence(tr("Alt+A")));
+	useRangeCheckBox->setText(tr("&Within Range"));
+	useRangeCheckBox->setShortcut(QKeySequence(tr("Alt+W")));
+	useRangeCheckBox->setToolTip("<qt>" + tr("Apply the selected master page to even, odd or all pages within the following range") + "</qt>");
+	toPageLabel->setText(tr("to"));
+	moveItemsCheckBox->setText(tr("Move Items with"));
+	moveItemsAnchorComboBox->clear();
+	if (facingPages) {
+		moveItemsAnchorComboBox->addItem(tr("Inside"));
+		moveItemsAnchorComboBox->addItem(tr("Outside"));
+	}
+	else
+	{
+		moveItemsAnchorComboBox->addItem(tr("Left"));
+		moveItemsAnchorComboBox->addItem(tr("Right"));
+	}
+	moveItemsMarginLabel->setText(tr("Margin"));
 }
diff --git a/scribus/ui/applytemplatedialog.h b/scribus/ui/applytemplatedialog.h
index 71dd7fef4..efc177f52 100644
--- a/scribus/ui/applytemplatedialog.h
+++ b/scribus/ui/applytemplatedialog.h
@@ -15,6 +15,8 @@ for which a new license (GPL+exception) is in place.
 #ifndef APPLYMASTERPAGEDIALOG_H
 #define APPLYMASTERPAGEDIALOG_H
 
+#include "ui_applytemplatedialog.h"
+
 #include <QDialog>
 #include <QDialogButtonBox>
 #include <QString>
@@ -35,7 +37,7 @@ class QRadioButton;
 class QSpacerItem;
 class QVBoxLayout;
 
-class SCRIBUS_API ApplyMasterPageDialog : public QDialog
+class SCRIBUS_API ApplyMasterPageDialog : public QDialog, Ui::ApplyMasterPage
 {
 	Q_OBJECT
 
@@ -43,17 +45,17 @@ public:
 	ApplyMasterPageDialog( QWidget* parent = nullptr );
 	~ApplyMasterPageDialog() = default;
 
-	QLabel* masterPageLabel { nullptr };
-	QComboBox* masterPageComboBox { nullptr };
-	QGroupBox* applyToPageButtonGroup { nullptr };
-	QRadioButton* currentPageRadioButton { nullptr };
-	QRadioButton* evenPagesRadioButton { nullptr };
-	QRadioButton* oddPagesRadioButton { nullptr };
-	QRadioButton* allPagesRadioButton { nullptr };
-	QCheckBox* useRangeCheckBox { nullptr };
-	ScrSpinBox* fromPageSpinBox { nullptr };
-	QLabel* toPageLabel { nullptr };
-	ScrSpinBox* toPageSpinBox { nullptr };
+	// QLabel* masterPageLabel { nullptr };
+	// QComboBox* masterPageComboBox { nullptr };
+	// QGroupBox* applyToPageButtonGroup { nullptr };
+	// QRadioButton* currentPageRadioButton { nullptr };
+	// QRadioButton* evenPagesRadioButton { nullptr };
+	// QRadioButton* oddPagesRadioButton { nullptr };
+	// QRadioButton* allPagesRadioButton { nullptr };
+	// QCheckBox* useRangeCheckBox { nullptr };
+	// ScrSpinBox* fromPageSpinBox { nullptr };
+	// QLabel* toPageLabel { nullptr };
+	// ScrSpinBox* toPageSpinBox { nullptr };
 
 	virtual void setup(ScribusDoc* doc, const QString& Nam);
 	virtual QString getMasterPageName();
@@ -63,14 +65,15 @@ public:
 	virtual int getToPage();
 
 protected:
-	QVBoxLayout* ApplyMasterPageDialogLayout { nullptr };
-	QHBoxLayout* templateNameLayout { nullptr };
-	QSpacerItem* spacer2 { nullptr };
-	QVBoxLayout* applyToPageButtonGroupLayout { nullptr };
-	QHBoxLayout* rangeLayout { nullptr };
-	QSpacerItem* spacer3 { nullptr };
-	QDialogButtonBox* buttonBox { nullptr };
+	// QVBoxLayout* ApplyMasterPageDialogLayout { nullptr };
+	// QHBoxLayout* templateNameLayout { nullptr };
+	// QSpacerItem* spacer2 { nullptr };
+	// QVBoxLayout* applyToPageButtonGroupLayout { nullptr };
+	// QHBoxLayout* rangeLayout { nullptr };
+	// QSpacerItem* spacer3 { nullptr };
+	// QDialogButtonBox* buttonBox { nullptr };
 	
+	bool facingPages = false;
 	void changeEvent(QEvent *e) override;
 
 protected slots:
@@ -82,6 +85,7 @@ private slots:
 	virtual void enableRange( bool enabled );
 	virtual void rangeSelectable();
 	virtual void singleSelectable();
+	virtual void enableItemsSelectable(bool enabled);
 
 };
 
