Index: Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
===================================================================
--- Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp	(revision 20542)
+++ Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp	(working copy)
@@ -4751,7 +4751,21 @@
 				}
 			}
 			else
-				currItem->Pfile = Relative2Path(attrs.valueAsString("PFILE"), baseDir);
+			  {
+			    if (!FileExists(Relative2Path(attrs.valueAsString("PFILE"), baseDir)))
+			      {
+				// try the PFILEABS, if that is empty, revert to PFILE since legacy
+				// xml may not have PFILEABS
+				if (attrs.hasAttribute("PFILEABS")
+				    && !attrs.valueAsString("PFILEABS").isEmpty()
+				    && FileExists(attrs.valueAsString("PFILEABS")))
+				  currItem->Pfile = attrs.valueAsString("PFILEABS");
+				else
+				  currItem->Pfile = Relative2Path(attrs.valueAsString("PFILE"), baseDir);
+			      }
+			    else
+			      currItem->Pfile = Relative2Path(attrs.valueAsString("PFILE"), baseDir);
+			  }
 #ifdef HAVE_OSG
 			if (currItem->asOSGFrame())
 			{
Index: Scribus/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
===================================================================
--- Scribus/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp	(revision 20542)
+++ Scribus/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp	(working copy)
@@ -2594,7 +2594,10 @@
 			}
 		}
 		else
+		  {
 			docu.writeAttribute("PFILE",Path2Relative(item->Pfile, baseDir));
+			docu.writeAttribute("PFILEABS",Relative2Path(item->Pfile, baseDir));
+		  }
 	}
 #ifdef HAVE_OSG
 	else if (item->asOSGFrame())
Index: Scribus/scribus/util.cpp
===================================================================
--- Scribus/scribus/util.cpp	(revision 20539)
+++ Scribus/scribus/util.cpp	(working copy)
@@ -309,6 +309,13 @@
 	return out;
 }
 
+bool FileExists(QString Path)
+{
+  if (Path.isEmpty())
+    return false;
+  return QFileInfo::exists(Path);   
+}
+
 QString Path2Relative(QString Path, const QString& baseDir)
 {
 	QDir d(baseDir);
Index: Scribus/scribus/util.h
===================================================================
--- Scribus/scribus/util.h	(revision 20539)
+++ Scribus/scribus/util.h	(working copy)
@@ -51,6 +51,7 @@
 void SCRIBUS_API ReOrderText(ScribusDoc *currentDoc, ScribusView *view);
 void SCRIBUS_API WordAndPara(PageItem *currItem, int *w, int *p, int *c, int *wN, int *pN, int *cN);
 bool SCRIBUS_API overwrite(QWidget *parent, QString filename);
+bool SCRIBUS_API FileExists(QString Path);
 QString SCRIBUS_API Path2Relative(QString Path, const QString& baseDir = QDir::currentPath());
 QString SCRIBUS_API Relative2Path(QString File, const QString& baseDir = QDir::currentPath());
 char SCRIBUS_API *toAscii85( quint32 value, bool& allZero );
