Index: main/trunk/gli/src/org/greenstone/gatherer/Gatherer.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/Gatherer.java	(revision 32686)
+++ main/trunk/gli/src/org/greenstone/gatherer/Gatherer.java	(revision 32689)
@@ -56,4 +56,5 @@
 import org.greenstone.gatherer.gui.WarningDialog;
 import org.greenstone.gatherer.gui.FedoraLogin;
+import org.greenstone.gatherer.gui.TestingPreparation;
 import org.greenstone.gatherer.metadata.FilenameEncoding;
 import org.greenstone.gatherer.remote.RemoteGreenstoneServer;
@@ -235,4 +236,8 @@
 		}
 
+		if(go.testing_mode) {
+		    TestingPreparation.TEST_MODE = true;
+		}
+		
 		init(go.gsdl_path, go.gsdl3_path, go.gsdl3_src_path, 
 		go.fedora_info,
@@ -755,9 +760,13 @@
 		}
 	}*/
-		g_man.setName("GUIManager"); // g_man has a name "frame0" assigned automatically
-		// setNamesRecursively won't assign a name if one is already set
-		// Setting explicitly since GUIManager is preferred for its name
-		GUIManager.setNamesRecursively("", g_man);
-		GUIManager.printComponentNames(g_man, "");
+
+		// if we're tutorial testing GLI, want names assigned to the GUI components
+		if(TestingPreparation.TEST_MODE) {
+		    g_man.setName("GUIManager"); // g_man has a name "frame0" assigned automatically
+		    // setNamesRecursively won't assign a name if one is already set
+		    // Setting explicitly since GUIManager is preferred for its name
+		    TestingPreparation.setNamesRecursively("", g_man);
+		    TestingPreparation.printComponentNames(g_man, "");
+		}
 		
 		// If there was a collection left open last time, reopen it	
Index: main/trunk/gli/src/org/greenstone/gatherer/GetOpt.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/GetOpt.java	(revision 32686)
+++ main/trunk/gli/src/org/greenstone/gatherer/GetOpt.java	(revision 32689)
@@ -34,5 +34,7 @@
 public class GetOpt
 {
-    public boolean debug = false; 
+    public boolean testing_mode = false; // true if running GLI for tutorial testing: want names assigned to GUI components
+    
+    public boolean debug = false;
     public boolean feedback_enabled = false;
     public boolean no_load = false;
@@ -128,4 +130,8 @@
 			System.exit(0);
 		    }
+		    // Run GLI in testing mode. Will assign names to GUI Components
+		    else if(argument_name.equals(StaticStrings.TESTING_ARGUMENT)) {
+			testing_mode = true;
+		    }
 		    // Run GLI in debug mode. Produces debug log plus extra
 		    // messages.
Index: main/trunk/gli/src/org/greenstone/gatherer/gui/GUIManager.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/gui/GUIManager.java	(revision 32686)
+++ main/trunk/gli/src/org/greenstone/gatherer/gui/GUIManager.java	(revision 32689)
@@ -144,111 +144,4 @@
     }
 
-    /*
-      For GUI swing testing of GLI, it's very handy for components to have names
-      I use the GLI classname as name or if it's not a GLI class, then:
-       - if a member var of a GLI class, then GLIclassName.memberVarName
-       - else GLIClassName.swingComponentName
-      Google: "Java swing automatically setName"
-      -> https://stackoverflow.com/questions/3628218/strategy-for-naming-swing-components
-         https://stackoverflow.com/questions/1782598/with-java-reflection-how-to-instantiate-a-new-object-then-call-a-method-on-it
-      - https://stackoverflow.com/questions/4163500/how-to-automatic-set-name-attr-of-gui-components/4164479#4164479
-      - https://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.wb.swing.doc.user%2Fhtml%2Fwizards%2Fswing%2Fautomatic_databinding.html
-      - https://stackoverflow.com/questions/28639294/in-java-how-to-get-name-of-component-which-is-clicked
-    */
-    public static void setNamesRecursively(String prefix, Component root) {
-	
-	// root starts off as GLI's JFrame, so we know that all its GUI children are specifically JComponents
-	
-	// https://docs.oracle.com/javase/7/docs/api/index.html?java/lang/reflect/package-summary.html
-	String className = root.getClass().getSimpleName();
-	
-	String packageName = root.getClass().getPackage().getName();
-	if(!packageName.contains("org.greenstone.gatherer.gui")) {
-	    if(root.getName() == null || root.getName().equals("")) { // if name not already set
-		if(!prefix.equals("")){
-		    // TODO: fix this
-		    root.setName(prefix + "." + className);
-		}
-		else {
-		    root.setName(className);
-		}
-	    } // else swing Component name already set
-	    
-	} else { // root is in GLI GUI package, use its classname for name
-	    
-	    if(root.getName() == null || root.getName().equals("")) {
-		root.setName(className);
-	    }
-	    prefix = className;
-	    
-	    // check member vars
-	    Field[] memberVars = root.getClass().getDeclaredFields(); // private to public member vars, but not inherited ones	    
-	    for(int i = 0; i < memberVars.length; i++) {
-		memberVars[i].setAccessible(true); // make private/protected etc fields accessible
-		
-		// https://www.tutorialspoint.com/java/lang/class_isinstance.htm
-		Class jCompClass = Container.class;
-		Class memberVarClass = memberVars[i].getType();
-
-		// memberVarClass is a JComponen (subclass)
-		if(jCompClass.isAssignableFrom(memberVarClass)) {
-		    
-		    // get the actual member variable denoted by memberVars[i]
-		    // on the current JComponent instance 'root'.
-		    // We now know this member var to be a JComponent
-		    // Having the actual member variable of the instantiated instance,
-		    // we can call setName on it
-		    try {
-			Container memberComponent = (Container)memberVars[i].get(root);
-		    
-			if(memberComponent != null) {
-
-			    // member var is a JComponent but not of GLI package, so locally instantiated
-			    if(!memberVarClass.getPackage().getName().contains("org.greenstone.gatherer.gui")) {
-				String memberprefix = prefix + "." + memberVars[i].getName(); // append member var name
-				// now can call setName() on the actual member variable
-				memberComponent.setName(memberprefix);
-				setNamesRecursively(memberprefix, memberComponent);
-			    }
-
-			    //else  the member variable is a GLI GUI class, use its className as prefix for child components
-			    // Skip this step to avoid circular references to our own member vars
-			    /*else { // member variable is a GLI GUI class, use its className as prefix for child components
-				String memberprefix = memberVarClass.getSimpleName();
-				memberComponent.setName(memberprefix);
-				setNamesRecursively(memberprefix, memberComponent);
-			    }*/
-			
-			    
-			}
-		    } catch(Exception e) {
-			e.printStackTrace();
-		    }
-		}
-		// else not a JComponent, skip
-	    }	    
-	}
-
-	
-	// https://stackoverflow.com/questions/33927349/could-someone-please-explain-note-this-method-should-be-called-under-awt-tree
-	// No worries about AWT tree lock: setNamesRecursively is called by openGUI
-	// which is specifically called by GathererProg on the Event Dispatch Thread (EDT)
-	Component[] children = ((Container)root).getComponents();
-	for(int i = 0; i < children.length; i++) {
-	    // if we haven't already set a name for any child JComponents with the above,
-	    // then the following will do so now
-	    setNamesRecursively(className, children[i]);
-	}
-	
-    }
-
-    public static void printComponentNames(Component root, String tabbing) {
-	System.err.println(tabbing + root.getName());
-	Component[] children = ((Container)root).getComponents();
-	// recursive call
-	for(int i = 0; i < children.length; i++) {
-	    printComponentNames(children[i], tabbing + "  ");
-	}
-    }
 
     public void windowGainedFocus(WindowEvent e)
Index: main/trunk/gli/src/org/greenstone/gatherer/gui/TestingPreparation.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/gui/TestingPreparation.java	(revision 32689)
+++ main/trunk/gli/src/org/greenstone/gatherer/gui/TestingPreparation.java	(revision 32689)
@@ -0,0 +1,123 @@
+package org.greenstone.gatherer.gui;
+
+import java.awt.*;
+import javax.swing.*;
+import java.lang.reflect.*;
+
+public class TestingPreparation {
+    public static boolean TEST_MODE = false;
+    
+    
+    /*
+      For GUI swing testing of GLI, it's very handy for components to have names
+      I use the GLI classname as name or if it's not a GLI class, then:
+       - if a member var of a GLI class, then GLIclassName.memberVarName
+       - else GLIClassName.swingComponentName
+      Google: "Java swing automatically setName"
+      -> https://stackoverflow.com/questions/3628218/strategy-for-naming-swing-components
+         https://stackoverflow.com/questions/1782598/with-java-reflection-how-to-instantiate-a-new-object-then-call-a-method-on-it
+      - https://stackoverflow.com/questions/4163500/how-to-automatic-set-name-attr-of-gui-components/4164479#4164479
+      - https://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.wb.swing.doc.user%2Fhtml%2Fwizards%2Fswing%2Fautomatic_databinding.html
+      - https://stackoverflow.com/questions/28639294/in-java-how-to-get-name-of-component-which-is-clicked
+    */
+    public static void setNamesRecursively(String prefix, Component root) {
+	if(!TEST_MODE) return;
+	
+	// root starts off as GLI's JFrame, so we know that all its GUI children are specifically JComponents
+	
+	// https://docs.oracle.com/javase/7/docs/api/index.html?java/lang/reflect/package-summary.html
+	String className = root.getClass().getSimpleName();
+	
+	String packageName = root.getClass().getPackage().getName();
+	if(!packageName.contains("org.greenstone.gatherer.gui")) {
+	    if(root.getName() == null || root.getName().equals("")) { // if name not already set
+		if(!prefix.equals("")){
+		    // TODO: fix this
+		    root.setName(prefix + "." + className);
+		}
+		else {
+		    root.setName(className);
+		}
+	    } // else swing Component name already set
+	    
+	} else { // root is in GLI GUI package, use its classname for name
+	    
+	    if(root.getName() == null || root.getName().equals("")) {
+		root.setName(className);
+	    }
+	    prefix = className;
+	    
+	    // check member vars
+	    Field[] memberVars = root.getClass().getDeclaredFields(); // private to public member vars, but not inherited ones	    
+	    for(int i = 0; i < memberVars.length; i++) {
+		memberVars[i].setAccessible(true); // make private/protected etc fields accessible
+		
+		// https://www.tutorialspoint.com/java/lang/class_isinstance.htm
+		Class jCompClass = Container.class;
+		Class memberVarClass = memberVars[i].getType();
+
+		// memberVarClass is a JComponen (subclass)
+		if(jCompClass.isAssignableFrom(memberVarClass)) {
+		    
+		    // get the actual member variable denoted by memberVars[i]
+		    // on the current JComponent instance 'root'.
+		    // We now know this member var to be a JComponent
+		    // Having the actual member variable of the instantiated instance,
+		    // we can call setName on it
+		    try {
+			Container memberComponent = (Container)memberVars[i].get(root);
+		    
+			if(memberComponent != null) {
+
+			    // member var is a JComponent but not of GLI package, so locally instantiated
+			    if(!memberVarClass.getPackage().getName().contains("org.greenstone.gatherer.gui")) {
+				String memberprefix = prefix + "." + memberVars[i].getName(); // append member var name
+				// now can call setName() on the actual member variable
+				memberComponent.setName(memberprefix);
+				setNamesRecursively(memberprefix, memberComponent);
+			    }
+
+			    //else  the member variable is a GLI GUI class, use its className as prefix for child components
+			    // Skip this step to avoid circular references to our own member vars
+			    /*else { // member variable is a GLI GUI class, use its className as prefix for child components
+				String memberprefix = memberVarClass.getSimpleName();
+				memberComponent.setName(memberprefix);
+				setNamesRecursively(memberprefix, memberComponent);
+			    }*/
+			
+			    
+			}
+		    } catch(Exception e) {
+			e.printStackTrace();
+		    }
+		}
+		// else not a JComponent, skip
+	    }	    
+	}
+
+	
+	// https://stackoverflow.com/questions/33927349/could-someone-please-explain-note-this-method-should-be-called-under-awt-tree
+	// No worries about AWT tree lock: setNamesRecursively is called by openGUI
+	// which is specifically called by GathererProg on the Event Dispatch Thread (EDT)
+	Component[] children = ((Container)root).getComponents();
+	for(int i = 0; i < children.length; i++) {
+	    // if we haven't already set a name for any child JComponents with the above,
+	    // then the following will do so now
+	    setNamesRecursively(className, children[i]);
+	}
+	
+    }
+
+    
+    // For debugging swing Component names assigned with Container's setName()
+    public static void printComponentNames(Component root, String tabbing) {
+	if(!TEST_MODE) return;
+	
+	System.err.println(tabbing + root.getName());
+	Component[] children = ((Container)root).getComponents();
+	// recursive call
+	for(int i = 0; i < children.length; i++) {
+	    printComponentNames(children[i], tabbing + "  ");
+	}
+    }
+}
Index: main/trunk/gli/src/org/greenstone/gatherer/util/StaticStrings.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/util/StaticStrings.java	(revision 32686)
+++ main/trunk/gli/src/org/greenstone/gatherer/util/StaticStrings.java	(revision 32689)
@@ -270,4 +270,5 @@
     static final public String TEXT_NODE = "#text";
     static final public String TEXT_STR = "text";
+    static final public String TESTING_ARGUMENT = "-testing_mode";
     static final public String TIMESTAMP_ARGUMENT = "&uq=";
     static final public String TITLE_ELEMENT = "Title";
