--- scribus15/scribus/scribus.cpp-	2016-11-19 19:23:30.103044218 +0100
+++ scribus15/scribus/scribus.cpp	2016-11-20 07:17:52.043596475 +0100
@@ -299,7 +299,6 @@
 	resourceManager=0;
 	UrlLauncher::instance();
 	m_mainWindowStatusLabel=0;
-	ExternalApp=0;
 	m_ScriptRunning = 0;
 #ifdef Q_OS_MAC
 	//commenting this out until this is resolved :https://bugreports.qt.io/browse/QTBUG-44565
@@ -463,6 +462,7 @@
 
 ScribusMainWindow::~ScribusMainWindow()
 {
+	cleanExternalAppList( /* cleanEveryApp */ true, /* killApp */ false );	// Setting killApp will kill image editor processes, which might lose the user's work
 	if (actionManager)
 		delete actionManager;
 	if (appModeHelper)
@@ -8383,12 +8383,46 @@
 	slotSelect();
 }
 
-void ScribusMainWindow::imageEditorExited(int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/)
+void ScribusProcess::deleteProcess(bool killProcess)
 {
-	if ( ExternalApp != 0 )
+	// Disconnect and delete the QProcess.
+	// This will kill the image editor process if it is still running.
+
+	if (process != NULL) {
+		process->disconnect();
+		if (killProcess) {
+			delete process;
+		}
+		process = NULL;
+	}
+}
+
+void ScribusProcess::imageEditorExited(int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/)
+{
+	// Disconnect the process
+
+	deleteProcess( /* killProcess */ true );
+}
+
+void ScribusMainWindow::cleanExternalAppList(bool cleanEveryApp, bool killApp)
+{
+	// Remove all of the inactive external apps.
+	// Set cleanEveryApp to true to clean all external apps associated with the window.
+
+	if ( !ExternalAppList.isEmpty() )
 	{
-		delete ExternalApp;
-		ExternalApp = 0;
+		QLinkedList<ScribusProcess *>::iterator i = ExternalAppList.begin();
+		while (i != ExternalAppList.end()) {
+			QLinkedList<ScribusProcess *>::iterator previous = i;
+			i++;
+			if ( cleanEveryApp && (*previous)->process != NULL ) {
+				(*previous)->deleteProcess(killApp);
+			}
+			if ( (*previous)->process == NULL ) {
+				delete (*previous);
+				ExternalAppList.erase(previous);
+			}
+		}
 	}
 }
 
@@ -8419,17 +8453,11 @@
 	}
 #endif
 	QString imageEditorExecutable=m_prefsManager->imageEditorExecutable();
-	if (ExternalApp != 0)
-	{
-		QString ieExe = QDir::toNativeSeparators(imageEditorExecutable);
-		ScMessageBox::information(this, tr("Information"), "<qt>" + tr("The program %1 is already running!").arg(ieExe) + "</qt>");
-		return;
-	}
 	if (currItem->imageIsAvailable)
 	{
 		int index;
 		QString imEditor;
-		ExternalApp = new QProcess(NULL);
+		ScribusProcess *ExternalApp = new ScribusProcess();
 		QStringList cmd;
 	#if defined(_WIN32)
 		index = imageEditorExecutable.indexOf( ".exe" );
@@ -8453,18 +8481,20 @@
 		if (index > -1 )
 		{
 			QString imEditorDir = imEditor.left( index + 1 );
-			ExternalApp->setWorkingDirectory( imEditorDir );
+			ExternalApp->process->setWorkingDirectory( imEditorDir );
 		}
 		cmd.append(QDir::toNativeSeparators(currItem->Pfile));
-		ExternalApp->start(imEditor, cmd);
-		if (!ExternalApp->waitForStarted())
+		ExternalApp->process->start(imEditor, cmd);
+		if (!ExternalApp->process->waitForStarted())
 		{
+			delete ExternalApp->process;
 			delete ExternalApp;
-			ExternalApp = 0;
 			ScMessageBox::critical(this, CommonStrings::trWarning, "<qt>" + tr("The program %1 is missing!").arg(imageEditorExecutable) + "</qt>");
 			return;
 		}
-		connect(ExternalApp, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(imageEditorExited(int, QProcess::ExitStatus)));
+		cleanExternalAppList( /* cleanEveryApp */ false, /* killApp */ true );
+		ExternalAppList.append(ExternalApp);
+		connect(ExternalApp->process, SIGNAL(finished(int, QProcess::ExitStatus)), ExternalApp, SLOT(imageEditorExited(int, QProcess::ExitStatus)));
 	}
 }
 
--- scribus15/scribus/scribus.h-	2016-05-16 23:19:42.119494233 +0200
+++ scribus15/scribus/scribus.h	2016-11-20 07:05:30.327014778 +0100
@@ -34,6 +34,7 @@
 #include <QActionGroup>
 #include <QClipboard>
 #include <QKeyEvent>
+#include <QLinkedList>
 #include <QMainWindow>
 #include <QMap>
 #include <QMultiHash>
@@ -100,6 +101,7 @@
 class ScribusCore;
 class ScribusDoc;
 class ScribusMainWindow;
+class ScribusProcess;
 class ScribusQApp;
 class ScribusWin;
 class SimpleState;
@@ -254,7 +256,8 @@
 	QString LoadEnc;
 	AppModeHelper *appModeHelper;
 
-	QProcess *ExternalApp;
+	QLinkedList<ScribusProcess *> ExternalAppList;
+	void cleanExternalAppList(bool cleanEveryApp, bool killApp);
 
 	QMap<QString, QPointer<ScrAction> > scrActions;
 	QMap<QString, QPointer<ScrAction> > scrRecentFileActions;
@@ -517,7 +520,6 @@
 	void SetSnapElements(bool b);
 	void EditTabs();
 	void SearchText();
-	void imageEditorExited(int, QProcess::ExitStatus);
 	/*! \brief call gimp and wait upon completion */
 	void callImageEditor();
 	void docCheckToggle(bool visible);
@@ -666,4 +668,19 @@
 	QQuickView *m_qqview;
 };
 
+
+class ScribusProcess : public QObject
+{
+	Q_OBJECT
+
+public:
+	ScribusProcess() { process = new QProcess(NULL); }
+	void deleteProcess(bool killProcess);
+
+	QProcess *process;
+
+public slots:
+	void imageEditorExited(int, QProcess::ExitStatus);
+};
+
 #endif
