diff --git a/scribus/fileloader.cpp b/scribus/fileloader.cpp
index 50e9c997d..5f1eae3db 100644
--- a/scribus/fileloader.cpp
+++ b/scribus/fileloader.cpp
@@ -173,7 +173,7 @@ int FileLoader::testFile()
 	return ret;
 }
 
-bool FileLoader::loadPage(ScribusDoc* currDoc, int PageToLoad, bool Mpage, const QString& renamedPageName)
+bool FileLoader::loadPage(ScribusDoc* currDoc, std::vector<int> PageToLoad, bool Mpage, std::function<void(int)> updateViewCallabck, const QString& renamedPageName)
 {
 	bool ret = false;
 // 	newReplacement = false;
@@ -192,7 +192,9 @@ bool FileLoader::loadPage(ScribusDoc* currDoc, int PageToLoad, bool Mpage, const
 		if (m_fileType == FORMATID_SLA13XIMPORT || m_fileType == FORMATID_SLA134IMPORT || m_fileType == FORMATID_SLA150IMPORT)
 		{
 			it->plug->setupTargets(currDoc, nullptr, currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(m_prefsManager.appPrefs.fontPrefs.AvailFonts));
+			it->plug->setUpdateViewCallback(updateViewCallabck);
 			ret = it->plug->loadPage(m_fileName, PageToLoad, Mpage, renamedPageName);
+			it->plug->setUpdateViewCallback();
 // 			if (ret)
 // 				it->plug->getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces);
 		}
diff --git a/scribus/fileloader.h b/scribus/fileloader.h
index b1210904a..c1f9e3fa9 100644
--- a/scribus/fileloader.h
+++ b/scribus/fileloader.h
@@ -26,6 +26,7 @@ class SCFonts;
 class PrefsManager;
 class FileFormat;
 class multiLine;
+class vector;
 
 class SCRIBUS_API FileLoader : public QObject
 {
@@ -37,7 +38,7 @@ public:
 	int fileType() const { return m_fileType; }
 	int testFile();
 
-	bool loadPage(ScribusDoc* currDoc, int PageToLoad, bool Mpage, const QString& renamedPageName=QString());
+	bool loadPage(ScribusDoc* currDoc, std::vector<int> PageToLoad, bool Mpage, std::function<void(int)> updateViewCallabck, const QString& renamedPageName=QString());
 	bool loadFile(ScribusDoc* currDoc);
 	bool saveFile(const QString& fileName, ScribusDoc *doc, QString *savedFile = nullptr);
 	bool readStyles(ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles);
diff --git a/scribus/loadsaveplugin.cpp b/scribus/loadsaveplugin.cpp
index ae660e5bf..6a0178de2 100644
--- a/scribus/loadsaveplugin.cpp
+++ b/scribus/loadsaveplugin.cpp
@@ -13,6 +13,8 @@ for which a new license (GPL+exception) is in place.
 
 #include "plugins/formatidlist.h"
 
+#include <vector>
+
 #include <QList>
 #include <QMessageBox>
 
@@ -399,6 +401,11 @@ void LoadSavePlugin::getReplacedFontData(bool & /*getNewReplacement*/, QMap<QStr
 {
 }
 
+bool LoadSavePlugin::loadPage(const QString & /*fileName*/, std::vector<int> /*pageNumbers*/, bool /*Mpage*/, const QString& /*renamedPageName*/)
+{
+	return false;
+}
+
 bool LoadSavePlugin::loadPage(const QString& /*fileName*/, int /*pageNumber*/, bool /*Mpage*/, const QString& /*renamedPageName*/)
 {
 	return false;
diff --git a/scribus/loadsaveplugin.h b/scribus/loadsaveplugin.h
index 1bf162898..17db33672 100644
--- a/scribus/loadsaveplugin.h
+++ b/scribus/loadsaveplugin.h
@@ -16,6 +16,9 @@ for which a new license (GPL+exception) is in place.
 #include <QStringList>
 #include <QList>
 
+#include <functional>
+#include <vector>
+
 class FileFormat;
 //TODO REmove includes one day
 class ScribusView;
@@ -108,7 +111,9 @@ class SCRIBUS_API LoadSavePlugin : public ScPlugin
 
 		virtual void setupTargets(ScribusDoc *targetDoc, ScribusView* targetView, ScribusMainWindow* targetMW, QProgressBar* targetMWPRogressBar, SCFonts* targetAvailableFonts);
 		virtual void getReplacedFontData(bool & getNewReplacement, QMap<QString,QString> &getReplacedFonts, QList<ScFace> &getDummyScFaces);
+		virtual bool loadPage(const QString & fileName, std::vector<int> pageNumbers, bool Mpage, const QString& renamedPageName=QString());
 		virtual bool loadPage(const QString & fileName, int pageNumber, bool Mpage, const QString& renamedPageName=QString());
+		void setUpdateViewCallback(std::function<void(int)> callback = {}) { this->viewUpdateCallback = callback; }
 		virtual bool readStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles);
 		virtual bool readCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles);
 		virtual bool readLineStyles(const QString& fileName, QHash<QString, multiLine> *Sty);
@@ -143,6 +148,7 @@ class SCRIBUS_API LoadSavePlugin : public ScPlugin
 		SCFonts*           m_AvailableFonts;
 		QString            m_lastSavedFile;
 		UndoManager * const undoManager;
+		std::function<void(int)> viewUpdateCallback = [](int i) {};
 
 	private:
 		// A list of all supported formats. This is maintained by plugins
diff --git a/scribus/plugins/fileloader/scribus150format/scribus150format.cpp b/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
index ba7c805c2..0e4ecdbb4 100644
--- a/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
+++ b/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
@@ -44,6 +44,8 @@ for which a new license (GPL+exception) is in place.
 #include "pageitem_spiral.h"
 #include "pagestructs.h"
 
+#include <vector>
+
 #include <QApplication>
 #include <QByteArray>
 #include <QCursor>
@@ -5979,7 +5981,7 @@ bool Scribus150Format::readLatexInfo(PageItem_LatexFrame* latexitem, ScXmlStream
 	return !reader.hasError();
 }
 
-bool Scribus150Format::loadPage(const QString & fileName, QList<int> pageNumbers, bool Mpage, const QString& renamedPageName)
+bool Scribus150Format::loadPage(const QString & fileName, std::vector<int> pageNumbers, bool Mpage, const QString& renamedPageName)
 {
 // 	qDebug() << QString("loading page %2 from file '%1' from 1.3.x plugin").arg(fileName).arg(pageNumber);
 	if (m_Doc==nullptr || m_AvailableFonts==nullptr)
@@ -5997,6 +5999,8 @@ bool Scribus150Format::loadPage(const QString & fileName, QList<int> pageNumbers
 
 	for (const int pageNumber: pageNumbers)
 	{
+		if (viewUpdateCallback)
+			viewUpdateCallback(pageNumber);
 		ParagraphStyle vg;
 		Xp = 0.0;
 		Yp = 0.0;
@@ -6541,7 +6545,7 @@ bool Scribus150Format::loadPage(const QString & fileName, QList<int> pageNumbers
 
 bool Scribus150Format::loadPage(const QString & fileName, int pageNumber, bool Mpage, const QString& renamedPageName)
 {
-	QList<int> pageNumbers = {pageNumber};
+	std::vector<int> pageNumbers = {pageNumber};
 	return loadPage(fileName, pageNumbers, Mpage, renamedPageName);
 }
 
diff --git a/scribus/plugins/fileloader/scribus150format/scribus150format.h b/scribus/plugins/fileloader/scribus150format/scribus150format.h
index 7972d5b8f..4b806fd3e 100644
--- a/scribus/plugins/fileloader/scribus150format/scribus150format.h
+++ b/scribus/plugins/fileloader/scribus150format/scribus150format.h
@@ -56,8 +56,8 @@ class PLUGIN_API Scribus150Format : public LoadSavePlugin
 		virtual void addToMainWindowMenu(ScribusMainWindow *) {};
 
 		// Special features - .sla page extraction support
-		virtual bool loadPage(const QString & fileName, QList<int> pageNumbers, bool Mpage, const QString& renamedPageName=QString());
-		virtual bool loadPage(const QString & fileName, int pageNumber, bool Mpage, const QString& renamedPageName=QString());
+		bool loadPage(const QString & fileName, std::vector<int> pageNumbers, bool Mpage, const QString& renamedPageName=QString()) override;
+		bool loadPage(const QString & fileName, int pageNumber, bool Mpage, const QString& renamedPageName=QString()) override;
 		virtual bool readStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles);
 		virtual bool readCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles);
 		virtual bool readLineStyles(const QString& fileName, QHash<QString, multiLine> *Sty);
diff --git a/scribus/scribus.cpp b/scribus/scribus.cpp
index 239ede923..9b0406261 100644
--- a/scribus/scribus.cpp
+++ b/scribus/scribus.cpp
@@ -3348,13 +3348,15 @@ bool ScribusMainWindow::slotPageImport()
 			mainWindowProgressBar->reset();
 			mainWindowProgressBar->setMaximum(nrToImport);
 			int counter = startPage;
-			for (int i = 0; i < nrToImport; ++i)
-			{
-				view->GotoPa(counter);
-				loadPage(dia->getFromDoc(), pageNs[i] - 1, false);
+			auto refresh = [this, &counter](int i) {
+				this->view->GotoPa(counter);
 				counter++;
-				mainWindowProgressBar->setValue(i + 1);
-			}
+				this->mainWindowProgressBar->setValue(i + 1);
+				qDebug() << i;
+			};
+
+			loadPage(dia->getFromDoc(), pageNs, false, refresh);
+
 			view->GotoPa(startPage);
 			mainWindowProgressBar->reset();
 			m_mainWindowStatusLabel->setText( tr("Import done"));
@@ -3375,52 +3377,58 @@ bool ScribusMainWindow::slotPageImport()
 
 bool ScribusMainWindow::loadPage(const QString& fileName, int Nr, bool Mpa, const QString& renamedPageName)
 {
-	bool ret = false;
-	if (!fileName.isEmpty())
+	return loadPage(fileName, {Nr}, Mpa, [](int i){}, renamedPageName);
+}
+
+bool ScribusMainWindow::loadPage(const QString& fileName, std::vector<int> pageNumbers, bool Mpa, std::function<void(int)> updateView, const QString& renamedPageName)
+{
+	if (fileName.isEmpty())
+		return false;
+
+	FileLoader *fl = new FileLoader(fileName);
+	if (fl->testFile() == -1)
+	{
+		delete fl;
+		return false;
+	}
+	doc->setLoading(true);
+	int oldItemsCount = doc->Items->count();
+
+	if (!fl->loadPage(doc, pageNumbers, Mpa, updateView, renamedPageName))
 	{
-		FileLoader *fl = new FileLoader(fileName);
-		if (fl->testFile() == -1)
-		{
-			delete fl;
-			return false;
-		}
-		doc->setLoading(true);
-		int oldItemsCount = doc->Items->count();
-		if (!fl->loadPage(doc, Nr, Mpa, renamedPageName))
-		{
-			delete fl;
-			doc->setLoading(false);
-			return false;
-		}
 		delete fl;
-		if (ScCore->haveCMS() && doc->cmsSettings().CMSinUse)
-		{
-			recalcColors();
-			doc->RecalcPictures(&ScCore->InputProfiles, &ScCore->InputProfilesCMYK);
-		}
-		int docItemsCount=doc->Items->count();
-		for (int i = oldItemsCount; i < docItemsCount; ++i)
-		{
-			PageItem *ite = doc->Items->at(i);
-			if ((ite->asTextFrame()) && (ite->isBookmark))
-				AddBookMark(ite);
-		}
-		propertiesPalette->updateColorList();
-		contentPalette->updateColorList();
-		emit UpdateRequest(reqArrowStylesUpdate | reqLineStylesUpdate | reqStyleComboDocUpdate | reqInlinePalUpdate);
-		symbolPalette->updateSymbolList();
-		slotDocCh();
-		rebuildLayersList();
-		updateLayerMenu();
-		layerPalette->rebuildList();
 		doc->setLoading(false);
-		ret = true;
+		return false;
+	}
+	delete fl;
+	if (ScCore->haveCMS() && doc->cmsSettings().CMSinUse)
+	{
+		recalcColors();
+		doc->RecalcPictures(&ScCore->InputProfiles, &ScCore->InputProfilesCMYK);
+	}
+	int docItemsCount=doc->Items->count();
+	for (int i = oldItemsCount; i < docItemsCount; ++i)
+	{
+		PageItem *ite = doc->Items->at(i);
+		if ((ite->asTextFrame()) && (ite->isBookmark))
+			AddBookMark(ite);
 	}
+	propertiesPalette->updateColorList();
+	contentPalette->updateColorList();
+	emit UpdateRequest(reqArrowStylesUpdate | reqLineStylesUpdate | reqStyleComboDocUpdate | reqInlinePalUpdate);
+	symbolPalette->updateSymbolList();
+	slotDocCh();
+	rebuildLayersList();
+	updateLayerMenu();
+	layerPalette->rebuildList();
+	doc->setLoading(false);
+
 	if (!Mpa)
 		pagePalette->Rebuild();
 	view->reformPages();
 	view->DrawNew();
-	return ret;
+
+	return true;
 }
 
 bool ScribusMainWindow::loadDoc(const QString& fileName)
diff --git a/scribus/scribus.h b/scribus/scribus.h
index 6c2015229..96ddd74ed 100644
--- a/scribus/scribus.h
+++ b/scribus/scribus.h
@@ -54,6 +54,8 @@ class QMdiSubWindow;
 class QQuickView;
 
 // application specific includes
+#include <functional>
+
 #include "scribusapi.h"
 #include "scribusdoc.h"
 #include "styleoptions.h"
@@ -321,6 +323,7 @@ public slots:
 	void newFileFromTemplate();
 	bool slotPageImport();
 	bool loadPage(const QString& fileName, int Nr, bool Mpa, const QString& renamedPageName=QString());
+	bool loadPage(const QString& fileName, std::vector<int> pageNumbers, bool Mpa, std::function<void(int)> updateView, const QString& renamedPageName=QString());
 	void GotoLa(int l);
 	void slotGetContent();
 	void slotGetContent2(); // kk2006
