Index: /main/trunk/gli/classes/dictionary.properties
===================================================================
--- /main/trunk/gli/classes/dictionary.properties	(revision 31719)
+++ /main/trunk/gli/classes/dictionary.properties	(revision 31720)
@@ -861,5 +861,7 @@
 Mirroring.DownloadJob.Pause_Tooltip:Pause this download
 Mirroring.DownloadJob.Stop:Stop
-Mirroring.DownloadJob.Stop_Tooltip:Stop this download
+Mirroring.DownloadJob.Stop_Tooltip:Stop this download job if it is currently running
+Mirroring.DownloadJob.Stopped:Stopped
+Mirroring.DownloadJob.Stopped_Tooltip:This download has been stopped
 Mirroring.DownloadJob.Resume:Resume
 Mirroring.DownloadJob.Resume_Tooltip:Resume this download
Index: /main/trunk/gli/src/org/greenstone/gatherer/download/DownloadJob.java
===================================================================
--- /main/trunk/gli/src/org/greenstone/gatherer/download/DownloadJob.java	(revision 31719)
+++ /main/trunk/gli/src/org/greenstone/gatherer/download/DownloadJob.java	(revision 31720)
@@ -75,5 +75,6 @@
 
     private final String download_url;
-    
+    private boolean wasClosed = false;
+
     //    private String current_url;
     //    private String destination;
@@ -212,5 +213,5 @@
 	    if (getState() == RUNNING) {
 		//setState(STOPPED);
-		stopDownload(); // cancels any running SafeProcess		
+		stopDownload(); // cancels any running SafeProcess
 	    } else {
 		//previous_state = getState();
@@ -220,10 +221,11 @@
 	}
 	else if (event.getSource() == progress.close_button) {
+	    setClosed();
 	    SafeProcess.log("@@@ Progress bar close button pressed");
 	    if(getState() == RUNNING) {
 		previous_state = getState();
 		//setState(STOPPED); // do we need to do anything else to stop this? YES, we do:
-		stopDownload(); // cancels any running SafeProcess		
-	    } 
+		stopDownload(); // cancels any running SafeProcess
+	    }
 	    mummy.deleteDownloadJob(this);
 	}
@@ -798,7 +800,11 @@
 	    // if the cancel button was clicked when it had already naturally terminated
 
+	    // If the user had pressed the Close button to terminate the running job, then
 	    // we're now ready to remove the display of the until now running job
 	    // from the download progress bar interface
-	    mummy.deleteCurrentDownloadJob(this); 
+	    // But don't bother removing the progress bar if the user had only pressed the Stop button
+	    if(wasClosed()) {
+		mummy.deleteCurrentDownloadJob(this); 
+	    }
 	} /*else {
 	    // If we've got to here and the state isn't STOPPED then the
@@ -962,4 +968,11 @@
 	return state;
     }
+    
+    /** @return true if the close button of the DownloadProgressBar was pressed,
+     * false otherwise such as if the Stop button had been pressed.
+    */
+    private synchronized boolean wasClosed() {
+	return this.wasClosed;
+    }
 
     /** Returns the current state of the stop flag for this job.
@@ -978,4 +991,8 @@
 	previous_state = this.state;
 	this.state = state;
+    }
+
+    private synchronized void setClosed() {
+	this.wasClosed = true;
     }
 
Index: /main/trunk/gli/src/org/greenstone/gatherer/download/DownloadProgressBar.java
===================================================================
--- /main/trunk/gli/src/org/greenstone/gatherer/download/DownloadProgressBar.java	(revision 31719)
+++ /main/trunk/gli/src/org/greenstone/gatherer/download/DownloadProgressBar.java	(revision 31720)
@@ -132,6 +132,5 @@
 	// However, now we additionally ensure that the wget launched by the perl is stopped before 
 	// process.destroy(), so at least it cleans up better. I'm therefore changing it to a "Stop" button.
-	stop_start_button = new GLIButton(Dictionary.get("Mirroring.DownloadJob.Pause"),Dictionary.get("Mirroring.DownloadJob.Pause_Tooltip"));
-	//stop_start_button = new GLIButton(Dictionary.get("Mirroring.DownloadJob.Stop"),Dictionary.get("Mirroring.DownloadJob.Stop_Tooltip"));
+	stop_start_button = new GLIButton(Dictionary.get("Mirroring.DownloadJob.Stop"),Dictionary.get("Mirroring.DownloadJob.Stop_Tooltip"));
 	stop_start_button.addActionListener(this);
 	stop_start_button.addActionListener(owner);
@@ -189,16 +188,10 @@
 	    if (current_action == DownloadJob.RUNNING) {
 		current_action = DownloadJob.STOPPED;
-                stop_start_button.setText(Dictionary.get("Mirroring.DownloadJob.Resume"));
-                stop_start_button.setToolTipText(Dictionary.get("Mirroring.DownloadJob.Resume_Tooltip"));
+                stop_start_button.setText(Dictionary.get("Mirroring.DownloadJob.Stopped"));
+                stop_start_button.setToolTipText(Dictionary.get("Mirroring.DownloadJob.Stopped_Tooltip"));
 	        
 		progress.setString(Dictionary.get("Mirroring.DownloadJob.Download_Stopped"));
 		progress.setIndeterminate(false);
-	    } else {
-		current_action = DownloadJob.RUNNING;
-		// we are stopped, so restart
-                stop_start_button.setText(Dictionary.get("Mirroring.DownloadJob.Pause"));
-                stop_start_button.setToolTipText(Dictionary.get("Mirroring.DownloadJob.Pause_Tooltip"));
-		progress.setString(Dictionary.get("Mirroring.DownloadJob.Download_Progress"));
-		progress.setIndeterminate(true);
+		stop_start_button.setEnabled(false);
 	    }
 	}
Index: /main/trunk/gli/src/org/greenstone/gatherer/util/Readme_Using_SafeProcess.txt
===================================================================
--- /main/trunk/gli/src/org/greenstone/gatherer/util/Readme_Using_SafeProcess.txt	(revision 31719)
+++ /main/trunk/gli/src/org/greenstone/gatherer/util/Readme_Using_SafeProcess.txt	(revision 31720)
@@ -581,4 +581,5 @@
 - http://stackoverflow.com/questions/4906799/why-invoke-thread-currentthread-interrupt-when-catch-any-interruptexception
 - https://praveer09.github.io/technology/2015/12/06/understanding-thread-interruption-in-java/
+- http://michaelscharf.blogspot.co.nz/2006/09/dont-swallow-interruptedexception-call.html
 
 
Index: /main/trunk/gli/src/org/greenstone/gatherer/util/SafeProcess.java
===================================================================
--- /main/trunk/gli/src/org/greenstone/gatherer/util/SafeProcess.java	(revision 31719)
+++ /main/trunk/gli/src/org/greenstone/gatherer/util/SafeProcess.java	(revision 31720)
@@ -618,4 +618,5 @@
 	    // See also http://stackoverflow.com/questions/4906799/why-invoke-thread-currentthread-interrupt-when-catch-any-interruptexception
 	    // and https://praveer09.github.io/technology/2015/12/06/understanding-thread-interruption-in-java/
+	    // http://michaelscharf.blogspot.co.nz/2006/09/dont-swallow-interruptedexception-call.html
 	    Thread.currentThread().interrupt(); // re-interrupt the thread - which thread? Infinite loop?
 	
Index: /main/trunk/greenstone3/src/java/org/greenstone/util/SafeProcess.java
===================================================================
--- /main/trunk/greenstone3/src/java/org/greenstone/util/SafeProcess.java	(revision 31719)
+++ /main/trunk/greenstone3/src/java/org/greenstone/util/SafeProcess.java	(revision 31720)
@@ -619,4 +619,5 @@
 	    // See also http://stackoverflow.com/questions/4906799/why-invoke-thread-currentthread-interrupt-when-catch-any-interruptexception
 	    // and https://praveer09.github.io/technology/2015/12/06/understanding-thread-interruption-in-java/
+	    // http://michaelscharf.blogspot.co.nz/2006/09/dont-swallow-interruptedexception-call.html
 	    Thread.currentThread().interrupt(); // re-interrupt the thread - which thread? Infinite loop?
 	
