Index: scribus/plugins/fileloader/scribus150format/scribus150format.cpp
===================================================================
--- scribus/plugins/fileloader/scribus150format/scribus150format.cpp	(révision 18833)
+++ scribus/plugins/fileloader/scribus150format/scribus150format.cpp	(copie de travail)
@@ -66,6 +66,7 @@
 Scribus150Format::~Scribus150Format()
 {
 	unregisterAll();
+    qDebug () << "Scribus150Format::~Scribus150Format DESTRUCTOR"; // never called
 }
 
 void Scribus150Format::languageChange()
@@ -5610,14 +5611,25 @@
 	return !reader.hasError();
 }
 
+// pageNumber can be <0 when begining and ending the loads of a set of pages
 bool Scribus150Format::loadPage(const QString & fileName, int pageNumber, bool Mpage, QString renamedPageName)
 {
 // 	qDebug() << QString("loading page %2 from file '%1' from 1.3.x plugin").arg(fileName).arg(pageNumber);
+
 	if (m_Doc==0 || m_AvailableFonts==0)
+		return false;
+
+	if (pageNumber <0)  // called both for init and end
 	{
-		Q_ASSERT(m_Doc==0 || m_AvailableFonts==0);
-		return false;
+		if (unknownLinks.size())
+			QMessageBox::information (m_ScMW,
+									  CommonStrings::trWarning,
+									  tr("Scribus was unable to import %1 link(s) toward not imported frame(s).").arg(unknownLinks.size()),
+									  CommonStrings::tr_OK);
+		unknownLinks.clear();
+        return true;
 	}
+
 	ParagraphStyle vg;
 	Xp = 0.0;
 	Yp = 0.0;
@@ -5908,8 +5919,22 @@
 				newItem->LayerID = layerTrans.value(newItem->LayerID, newItem->LayerID);
 				if (isNewFormat)
 				{
-					if (itemInfo.nextItem != -1)
+                    int startItemID (unknownLinks.key(itemInfo.itemID,0));
+                    if (startItemID)	// found previously missing destination of an imported link ?
+                    {
+                        PageItem * Its = LinkID[startItemID];
+                        PageItem * Itn = LinkID[itemInfo.itemID];
+                        if (!Its->testLinkCandidate(Itn))
+                            qDebug() << "Scribus150Format::loadPage : Link Corruption Found from " << startItemID << "to "<< itemInfo.itemID;
+                        else
+                        {
+                            Its->link(Itn);
+                            unknownLinks.remove(startItemID);
+                        }
+                    }
+                    if (itemInfo.nextItem != -1) {
 						itemNext[itemInfo.itemID] = itemInfo.nextItem;
+                    };
 					if (itemInfo.item->isTableItem)
 						TableItems.append(itemInfo.item);
 					if (itemInfo.isWeldFlag)
@@ -6044,7 +6069,8 @@
 					PageItem * Itn = LinkID[lc.value()];
 					if (!Its->testLinkCandidate(Itn))
 					{
-						qDebug() << "scribus150format: corruption in linked textframes detected";
+                        qDebug() << "scribus150format: Found link from " << lc.key() << "to yet unloaded frame"<< lc.value();
+                        unknownLinks[lc.key()]=lc.value();
 						continue;
 					}
 					Its->link(Itn);
@@ -6105,7 +6131,7 @@
 						PageItem * Itn = m_Doc->DocItems.at(itemRemap[lc.value()]);
 						if (!Its->testLinkCandidate(Itn))
 						{
-							qDebug() << "scribus150format: corruption in linked textframes detected";
+                            qDebug() << "scribus150format: Found link from " << lc.key() << "to yet unloaded frame"<< lc.value();
 							continue;
 						}
 						Its->link(Itn);
Index: scribus/plugins/fileloader/scribus150format/scribus150format.h
===================================================================
--- scribus/plugins/fileloader/scribus150format/scribus150format.h	(révision 18833)
+++ scribus/plugins/fileloader/scribus150format/scribus150format.h	(copie de travail)
@@ -19,6 +19,7 @@
 #include <QMap>
 #include <QProgressBar>
 #include <QString>
+#include <QMessageBox>
 
 class QIODevice;
 
@@ -190,7 +191,8 @@
 		void SetItemProps(ScXmlStreamWriter& docu, PageItem* item, const QString& baseDir, bool newFormat);
 
 		QMap<QString, QString> parStyleMap;
-		
+
+        QMap<int, int> unknownLinks; // in pageLoad only as for now : items that remain unlinked because linked frame is in yet unloaded page
 		QMap<int, int> itemRemap;
 		QMap<int, int> itemNext;
 		QMap<int, int> itemRemapF;
Index: scribus/scribus.cpp
===================================================================
--- scribus/scribus.cpp	(révision 18833)
+++ scribus/scribus.cpp	(copie de travail)
@@ -3865,11 +3865,13 @@
 	UndoTransaction* activeTransaction = NULL;
 	if(UndoManager::undoEnabled())
 		activeTransaction = new UndoTransaction(undoManager->beginTransaction(Um::ImportPage, Um::IGroup, Um::ImportPage, 0, Um::ILock));
-
 	if (dia->exec())
 	{
 		mainWindowStatusLabel->setText( tr("Importing Pages..."));
 		qApp->setOverrideCursor(QCursor(Qt::WaitCursor));
+
+        const QString FromFilename (dia->getFromDoc());
+
 		std::vector<int> pageNs;
 		parsePagesString(dia->getPageNumbers(), &pageNs, dia->getPageCounter());
 		int startPage=0, nrToImport=pageNs.size();
@@ -3877,7 +3879,7 @@
 		if (doc->masterPageMode())
 		{
 			if (nrToImport > 1)
-				loadPage(dia->getFromDoc(), pageNs[0] - 1, false);
+                loadPage(FromFilename, pageNs[0] - 1, false);
 			doIt = false;
 		}
 		else if (dia->getCreatePageChecked())
@@ -3930,16 +3932,18 @@
 				mainWindowProgressBar->reset();
 				mainWindowProgressBar->setMaximum(nrToImport);
 				int counter = startPage;
+                loadPage(FromFilename, -1, false); // init clean unknownLinks
 				for (int i = 0; i < nrToImport; ++i)
 				{
 					view->GotoPa(counter);
-					loadPage(dia->getFromDoc(), pageNs[i] - 1, false);
+                    loadPage(FromFilename, pageNs[i] - 1, false);
 					counter++;
 					mainWindowProgressBar->setValue(i + 1);
 				}
 				view->GotoPa(startPage);
 				mainWindowProgressBar->reset();
 				mainWindowStatusLabel->setText( tr("Import done"));
+                loadPage(FromFilename, -1, false); // end load clean
 			}
 			else
 			{
