--- scribus15/scribus/scribus.cpp-	2016-05-29 16:15:39.725407986 +0200
+++ scribus15/scribus/scribus.cpp	2016-05-30 05:55:16.272679228 +0200
@@ -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
@@ -8371,12 +8370,31 @@
 	slotSelect();
 }
 
-void ScribusMainWindow::imageEditorExited(int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/)
+void ScribusProcess::imageEditorExited(int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/)
 {
-	if ( ExternalApp != 0 )
+	// Mark the process inactive for purging by cleanExternalAppList
+
+	active = false;
+}
+
+void ScribusMainWindow::cleanExternalAppList()
+{
+	// Remove all of the inactive external apps
+
+	if ( !ExternalAppList.isEmpty() )
 	{
-		delete ExternalApp;
-		ExternalApp = 0;
+		QLinkedList<ScribusProcess *>::iterator i = ExternalAppList.begin();
+		while (i != ExternalAppList.end()) {
+			QLinkedList<ScribusProcess *>::iterator previous = i;
+			i++;
+			if ( !(*previous)->active )
+			{
+				(*previous)->process->disconnect();
+				delete (*previous)->process;
+				delete (*previous);
+				ExternalAppList.erase(previous);
+			}
+		}
 	}
 }
 
@@ -8407,17 +8425,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" );
@@ -8441,18 +8453,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();
+		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-05-30 05:21:09.149240014 +0200
@@ -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();
 
 	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); active = true; }
+
+	QProcess *process;
+	bool active;
+
+public slots:
+	void imageEditorExited(int, QProcess::ExitStatus);
+};
+
 #endif
