Index: /main/trunk/gli/src/org/greenstone/gatherer/Gatherer.java
===================================================================
--- /main/trunk/gli/src/org/greenstone/gatherer/Gatherer.java	(revision 32922)
+++ /main/trunk/gli/src/org/greenstone/gatherer/Gatherer.java	(revision 32923)
@@ -672,4 +672,23 @@
 		}
 
+	}
+
+    
+	/** Returns the correct version of the (local or remote) Greenstone server if init() has already been called. */
+	public static int serverVersionNumber() { 
+		return GS3 ? 3 : 2;
+	} 
+
+	/** Returns "Server: version number" if init() has already been called. */
+	public static String getServerVersionAsString() { 
+		return "Server: v" + serverVersionNumber();
+	} 
+
+	public void openGUI()
+	{
+
+	    // openGUI() is called on the EDT (graphical/swing thread)
+	    // remoteGS.downloadCollectionConfigurations() moved here as it calls remoteGS3.authenticateUser()
+	    // which displays a dialog to get user input and therefore belongs on the EDT.
 		// If using a remote Greenstone we need to download the collection configurations now
 		if (Gatherer.isGsdlRemote) {
@@ -682,19 +701,5 @@
 			}
 		}
-	}
-
-    
-	/** Returns the correct version of the (local or remote) Greenstone server if init() has already been called. */
-	public static int serverVersionNumber() { 
-		return GS3 ? 3 : 2;
-	} 
-
-	/** Returns "Server: version number" if init() has already been called. */
-	public static String getServerVersionAsString() { 
-		return "Server: v" + serverVersionNumber();
-	} 
-
-	public void openGUI()
-	{
+		
 		// Size and place the frame on the screen
 		Rectangle bounds = Configuration.getBounds("general.bounds", true);
Index: /main/trunk/gli/src/org/greenstone/gatherer/GathererProg.java
===================================================================
--- /main/trunk/gli/src/org/greenstone/gatherer/GathererProg.java	(revision 32922)
+++ /main/trunk/gli/src/org/greenstone/gatherer/GathererProg.java	(revision 32923)
@@ -76,9 +76,5 @@
 	// Create an instance of the Gatherer class, which will parse the args and prepare the rest of the GLI
 	Gatherer gatherer = new Gatherer(args);
-	
-	// Display the GUI immediately
-	gatherer.openGUI();
-	
-	/*	
+		
 	// TESTING circumventing the old GUI event dispatch thread exceptions in GLI. Follows
 	// https://docs.oracle.com/javase/6/docs/api/javax/swing/package-summary.html#threading
@@ -90,15 +86,12 @@
 	SwingUtilities.invokeLater(new Runnable() {
             public void run() {
-		// These lines used to be done immediate after setGLIDirectoryPath() call above
-		// but are now inside an invokeLater().
-		
-		// Create an instance of the Gatherer class, which will parse the args and prepare the rest of the GLI
-		Gatherer gatherer = new Gatherer(args);
-		
+		// This line used to be done immediately after setGLIDirectoryPath()
+		// and new Gatherer() above, but is now inside an invokeLater() to do graphical stuff here.
+
 		// Display the GUI immediately
 		gatherer.openGUI();
             }
         });
-	*/
+	
     }
 }
Index: /main/trunk/gli/src/org/greenstone/gatherer/gui/GUIManager.java
===================================================================
--- /main/trunk/gli/src/org/greenstone/gatherer/gui/GUIManager.java	(revision 32922)
+++ /main/trunk/gli/src/org/greenstone/gatherer/gui/GUIManager.java	(revision 32923)
@@ -183,6 +183,6 @@
 	}
 	else if (esrc == menu_bar.file_delete) {
-	    new DeleteCollectionTask().start();
-	    //SwingUtilities.invokeLater(new DeleteCollectionTask());
+	    //new DeleteCollectionTask().start();
+	    SwingUtilities.invokeLater(new DeleteCollectionTask());
 	}
 	else if (esrc == menu_bar.file_cdimage) {
@@ -203,11 +203,11 @@
 	}
         else if (esrc == menu_bar.file_new) {
-	    new NewCollectionTask().start();
-	    //SwingUtilities.invokeLater(new NewCollectionTask());
+	    //new NewCollectionTask().start();
+	    SwingUtilities.invokeLater(new NewCollectionTask());
 	}
 	else if (esrc == menu_bar.file_open) {
-	    new OpenCollectionTask().start(); // will cause an EDT access violation exception
+	    //new OpenCollectionTask().start(); // will cause an EDT access violation exception
 	    // since the GUI stuff of opening a collection is not done in a Swing thread
-	    //SwingUtilities.invokeLater(new OpenCollectionTask());
+	    SwingUtilities.invokeLater(new OpenCollectionTask());
 	}
 	else if (esrc == menu_bar.file_options) {
@@ -940,6 +940,5 @@
 
     private class OpenCollectionTask
-	extends Thread
-    //implements Runnable //extends Thread -> If this extends Thread, it will cause an EDT access
+    implements Runnable //extends Thread -> If this extends Thread, it will cause an EDT access
 	       // violation since the GUI stuff in run() is not done in the Swing Event Dispatch Thread/EDT.
     {
@@ -989,6 +988,5 @@
 
     private class NewCollectionTask
-	extends Thread
-    //implements Runnable //extends Thread
+	implements Runnable //extends Thread
     {
 	public void run()
@@ -1022,6 +1020,5 @@
 
     private class DeleteCollectionTask
-	extends Thread
-    //implements Runnable //extends Thread
+    implements Runnable //extends Thread
     {
 	public void run()
@@ -1092,6 +1089,6 @@
     public void updateUI()
     {
-	//SwingUtilities.invokeLater(new Runnable() {
-	//	public void run() {
+	SwingUtilities.invokeLater(new Runnable() {
+		public void run() {
 		    JPanel pane = (JPanel) getContentPane();
 		    pane.updateUI();
@@ -1103,6 +1100,6 @@
 		    workflowUpdate("Create", Configuration.get("workflow.create", false));
 		    workflowUpdate("Format", Configuration.get("workflow.format", false));
-	    //	}
-	    //	    });
+	    	}
+	    });
     }
 
Index: /main/trunk/gli/src/org/greenstone/gatherer/remote/RemoteGreenstoneServer.java
===================================================================
--- /main/trunk/gli/src/org/greenstone/gatherer/remote/RemoteGreenstoneServer.java	(revision 32922)
+++ /main/trunk/gli/src/org/greenstone/gatherer/remote/RemoteGreenstoneServer.java	(revision 32923)
@@ -265,4 +265,5 @@
 	String threadName = Thread.currentThread().getName();
 
+	/*
 	// If we're running in the GUI thread we must return immediately
 	// We cannot wait for the action to complete because this will block any GUI updates
@@ -273,4 +274,5 @@
 	    return null;
 	}
+	*/
 
 	// Otherwise wait until the action is processed
