Index: tags/gsdl-2_70u-distribution/gli/classes/dictionary.properties
===================================================================
--- trunk/gli/classes/dictionary.properties	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gli/classes/dictionary.properties	(revision 11745)
@@ -430,5 +430,4 @@
 WriteCDImagePrompt.Failed_Title:Export Failed
 WriteCDImagePrompt.Instructions:Export one or more collections to a self-installing Windows CD/DVD image (although this works on any platform, the CD/DVD image that is created only runs under Windows).
-WriteCDImagePrompt.Netscape_Compatibility:Bundle Netscape4 browser (and Netscape4 compatibility macros and images).
 WriteCDImagePrompt.Progress_Label:Copying Files. This could take some time...
 WriteCDImagePrompt.Size_Label:Estimated size: 
Index: tags/gsdl-2_70u-distribution/gli/classes/xml/config.xml
===================================================================
--- trunk/gli/classes/xml/config.xml	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gli/classes/xml/config.xml	(revision 11745)
@@ -28,5 +28,5 @@
 ]>
 
-<Configuration version="2.70">
+<Configuration version="2.70u">
   <GathererConfig>
     <!-- ***** General Options: apply globally to the GLI execution. ***** -->
Index: tags/gsdl-2_70u-distribution/gli/classes/xml/configRemote.xml
===================================================================
--- trunk/gli/classes/xml/configRemote.xml	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gli/classes/xml/configRemote.xml	(revision 11745)
@@ -28,5 +28,5 @@
 ]>
 
-<Configuration version="2.70">
+<Configuration version="2.70u">
   <GathererConfig>
     <!-- ***** General Options: apply globally to the GLI execution. ***** -->
Index: tags/gsdl-2_70u-distribution/gli/classes/xml/languages.xml
===================================================================
--- trunk/gli/classes/xml/languages.xml	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gli/classes/xml/languages.xml	(revision 11745)
@@ -40,6 +40,6 @@
    <Language name="CAMBODIAN"           code="KM">ASIAN</Language>
    <Language name="CATALAN"             code="CA">ROMANCE</Language>
-   <Language name="CHINESE-SIMPLIFIED"  code="CN" gs="true" mds="true">ASIAN</Language>
-   <Language name="CHINESE-TRADITIONAL" code="ZH" gs="true">ASIAN</Language>
+   <Language name="CHINESE-SIMPLIFIED"  code="ZH" gs="true" mds="true">ASIAN</Language>
+   <Language name="CHINESE-TRADITIONAL" code="ZH-TR" gs="true">ASIAN</Language>
    <Language name="CORSICAN"            code="CO">ROMANCE</Language>
    <Language name="CROATIAN"            code="HR" gs="true">SLAVIC</Language>
@@ -63,9 +63,9 @@
    <Language name="GUJARATI"            code="GU">INDIAN</Language>
    <Language name="HAUSA"               code="HA">NEGRO-AFRICAN</Language>
-   <Language name="HEBREW"              code="IW" gs="true">SEMITIC [*Changed back from HE in 2003 by us. Not valid iso639, HE]</Language>
+   <Language name="HEBREW"              code="HE" gs="true">SEMITIC</Language>
    <Language name="HINDI"               code="HI" gs="true">INDIAN</Language>
    <Language name="HUNGARIAN"           code="HU">FINNO-UGRIC</Language>
    <Language name="ICELANDIC"           code="IS">GERMANIC</Language>
-   <Language name="INDONESIAN"          code="ID" gs="true">OCEANIC/INDONESIAN [*Changed 1989 from original ISO 639:1988, IN]</Language>
+   <Language name="INDONESIAN"          code="ID" gs="true">OCEANIC/INDONESIAN</Language>
    <Language name="INTERLINGUA"         code="IA" mds="true">INTERNATIONAL AUX.</Language>
    <Language name="INTERLINGUE"         code="IE">INTERNATIONAL AUX.</Language>
@@ -78,5 +78,5 @@
    <Language name="KANNADA"             code="KN" gs="true">DRAVIDIAN</Language>
    <Language name="KASHMIRI"            code="KS">INDIAN</Language>
-   <Language name="KAZAKH"              code="KZ" gs="true">TURKIC/ALTAIC [*Changed 2003 by us. Not valid iso639, KK]</Language>
+   <Language name="KAZAKH"              code="KK" gs="true">TURKIC/ALTAIC</Language>
    <Language name="KINYARWANDA"         code="RW">NEGRO-AFRICAN</Language>
    <Language name="KIRGHIZ"             code="KY">TURKIC/ALTAIC</Language>
Index: tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/GathererApplet.java
===================================================================
--- trunk/gli/src/org/greenstone/gatherer/GathererApplet.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/GathererApplet.java	(revision 11745)
@@ -113,5 +113,5 @@
 	Gatherer.isApplet = true;
 	String library_url_string = fullLibraryURL(getParameter("gwcgi"));
-	String gliserver_url_string = library_url_string.substring(0, library_url_string.lastIndexOf('/') + 1) + "gliserver";
+	String gliserver_url_string = library_url_string.substring(0, library_url_string.lastIndexOf('/') + 1) + "gliserver.pl";
 
         // String debug_param = getParameter("debug");
Index: tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/file/FileManager.java
===================================================================
--- trunk/gli/src/org/greenstone/gatherer/file/FileManager.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/file/FileManager.java	(revision 11745)
@@ -111,8 +111,4 @@
 		// Is this the "Downloaded Files" folder?
 		if (source_nodes[i].getFile().getAbsolutePath().startsWith(downloaded_files_folder_path)) {
-		    // Can only delete from the "Downloaded Files" folder if a collection is open
-		    if (Gatherer.c_man.ready() == false) {
-			return;
-		    }
 		    read_only_source = false;
 		}
Index: tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/file/FileQueue.java
===================================================================
--- trunk/gli/src/org/greenstone/gatherer/file/FileQueue.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/file/FileQueue.java	(revision 11745)
@@ -372,13 +372,16 @@
 	File source_file = source_node.getFile();
 
-	// If we're deleting a metadata.xml file we must unload it
-	boolean metadata_xml_file = source_file.getName().equals(StaticStrings.METADATA_XML);
-	if (metadata_xml_file) {
-	    MetadataXMLFileManager.unloadMetadataXMLFile(source_file);
-	}
-	// Otherwise remove any metadata assigned directly to the file
-	else {
-	    ArrayList assigned_metadata = MetadataXMLFileManager.getMetadataAssignedDirectlyToFile(source_file);
-	    MetadataXMLFileManager.removeMetadata((CollectionTreeNode) source_node, assigned_metadata);
+	// Almost all files will be deleted from the collection tree (exception: files in "Downloaded Files")
+	if (source_node instanceof CollectionTreeNode) {
+	    // If we're deleting a metadata.xml file we must unload it
+	    boolean metadata_xml_file = source_file.getName().equals(StaticStrings.METADATA_XML);
+	    if (metadata_xml_file) {
+		MetadataXMLFileManager.unloadMetadataXMLFile(source_file);
+	    }
+	    // Otherwise remove any metadata assigned directly to the file
+	    else {
+		ArrayList assigned_metadata = MetadataXMLFileManager.getMetadataAssignedDirectlyToFile(source_file);
+		MetadataXMLFileManager.removeMetadata((CollectionTreeNode) source_node, assigned_metadata);
+	    }
 	}
 
@@ -698,5 +701,5 @@
 		synchronized(this) {
 		    // Force both workspace and collection trees to refresh
-		    if (Gatherer.g_man != null) {
+		    if (Gatherer.g_man != null && Gatherer.c_man.ready()) {
 			Gatherer.g_man.refreshWorkspaceTree(DragTree.COLLECTION_CONTENTS_CHANGED);
 			// Gatherer.g_man.refreshCollectionTree(DragTree.COLLECTION_CONTENTS_CHANGED);
Index: tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/gui/ExportAsPrompt.java
===================================================================
--- trunk/gli/src/org/greenstone/gatherer/gui/ExportAsPrompt.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/gui/ExportAsPrompt.java	(revision 11745)
@@ -297,12 +297,13 @@
 	command_parts_list.add(export_type);
 	command_parts_list.add("-exportdir");
-	command_parts_list.add(LocalGreenstone.getTmpDirectoryPath());
-
+	String export_dir = LocalGreenstone.getTmpDirectoryPath();
 	if (cd_title.equals("")) {
-	    command_parts_list.add("exported_" + export_type);
+	    export_dir += "exported_" + export_type;
 	}
 	else {
-	    command_parts_list.add("exported_" + cd_title.replaceAll("\\s", ""));
-	}
+	    export_dir += "exported_" + cd_title.replaceAll("\\s", "");
+	}
+	command_parts_list.add(export_dir);
+
 	
 	for (int i = 0; i < num_collections; i++) {
Index: tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/gui/GatherPane.java
===================================================================
--- trunk/gli/src/org/greenstone/gatherer/gui/GatherPane.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/gui/GatherPane.java	(revision 11745)
@@ -299,5 +299,4 @@
 	bin_button = new RecycleBin();
 	bin_button.addActionListener(this);
-	bin_button.setEnabled(false);
 	bin_button.setMinimumSize(MIN_SIZE);
 	bin_button.setPreferredSize(MIN_SIZE);
@@ -443,5 +442,4 @@
 	collection_tree.setEnabled(collection_loaded);
 	collection_filter.setEnabled(collection_loaded);
-	bin_button.setEnabled(collection_loaded);
 	new_folder.setEnabled(collection_loaded);
 
Index: tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/gui/Preferences.java
===================================================================
--- trunk/gli/src/org/greenstone/gatherer/gui/Preferences.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/gui/Preferences.java	(revision 11745)
@@ -198,4 +198,7 @@
 	    Dictionary.registerTooltip(library_path_field, "Preferences.Connection.Library_Path_Tooltip");
 	}
+	// Disable this field when using the applet, as it is automatically determined
+	library_path_label.setEnabled(!Gatherer.isApplet);
+	library_path_field.setEnabled(!Gatherer.isApplet);
 
 	JPanel gliserver_url_pane = null;
@@ -214,4 +217,8 @@
 	    Dictionary.registerText(gliserver_url_label, "Preferences.Connection.GLIServer_URL");
 	    Dictionary.registerTooltip(gliserver_url_field, "Preferences.Connection.GLIServer_URL_Tooltip");
+
+	    // Disable this field when using the applet, as it is automatically determined
+	    gliserver_url_label.setEnabled(!Gatherer.isApplet);
+	    gliserver_url_field.setEnabled(!Gatherer.isApplet);
 	}
 
Index: tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/gui/WriteCDImagePrompt.java
===================================================================
--- trunk/gli/src/org/greenstone/gatherer/gui/WriteCDImagePrompt.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/gui/WriteCDImagePrompt.java	(revision 11745)
@@ -89,11 +89,10 @@
     /** The text area used to display instructions for the cd-rom/dvd export */
     private JTextArea instructions_textarea;
-    /** A string array used to pass arguments to the phrase retrieval method. */
-    private JCheckBox netscape_checkbox = null;
-    JLabel netscape_label = null;
+
     private JTextField title_field = null;
     private JTextField estimated_size_field = null;
     private JLabel title_label = null;
     private JLabel estimated_size_label = null;
+    /** A string array used to pass arguments to the exportcol.pl script */
     private String args[] = null;
     private String cd_title = null;
@@ -104,9 +103,6 @@
     /** the error message if any */
     private StringBuffer error_message = null;
-    /** This is the size of the exported stuff on its own without 
-	netscape and no collections. */
-    private long total_exported_size = 16250000;
-    /** the size of netscape */
-    private long netscape_size = 16500000;
+    /** This is the size of the exported stuff on its own without collections. */
+    private long total_exported_size = 14000000;
     /** The size of the export prompt screen. */
     public static final Dimension SIZE = new Dimension(500, 500);
@@ -151,4 +147,8 @@
 	estimated_size_field = new JTextField();
 	estimated_size_field.setEditable(false);
+
+	// work out the size of the images directory - could be large if they
+	// have the classic interface pack installed
+	total_exported_size += getFileSize(new File(LocalGreenstone.getDirectoryPath()+File.separator+"images"));
 	estimated_size_field.setText(Utility.formatFileLength(total_exported_size));
 	estimated_size_field.setBackground(Configuration.getColor("coloring.collection_tree_background", false));
@@ -156,9 +156,4 @@
 	Dictionary.setText(estimated_size_label, "WriteCDImagePrompt.Size_Label");
 
-	netscape_checkbox = new JCheckBox();
-	netscape_checkbox.addActionListener(new NetscapeCheckBoxListener());
-	netscape_label = new JLabel();
-	Dictionary.setText(netscape_label, "WriteCDImagePrompt.Netscape_Compatibility");
-	
 	scanForCollections();
 	list.setListData(all_collections);
@@ -178,8 +173,4 @@
 	//title.getDocument().addDocumentListener(new DocumentListener());
 
-	// work out the size of the extra images needed for netscape 4
-	// this assumes that they'll be installed (lang pack). 
-	//exportcol.pl will crap out if they are not.
-	netscape_size += getFileSize(new File(LocalGreenstone.getDirectoryPath()+File.separator+"images"));
     }
 
@@ -215,14 +206,5 @@
 	title_pane.add(title_label, BorderLayout.WEST);
 	title_pane.add(title_field, BorderLayout.CENTER);
-	//	instructions_pane.add(title_pane, BorderLayout.SOUTH);
-
-	JPanel netscape_pane = new JPanel(new BorderLayout());
-	netscape_pane.add(netscape_checkbox, BorderLayout.WEST);
-	netscape_pane.add(netscape_label, BorderLayout.CENTER);
-	
-	JPanel grid_pane = new JPanel(new GridLayout(2,1));
-	grid_pane.add(title_pane);
-	grid_pane.add(netscape_pane);
-	instructions_pane.add(grid_pane, BorderLayout.SOUTH);
+	instructions_pane.add(title_pane, BorderLayout.SOUTH);
 
 	// Central pane
@@ -312,9 +294,4 @@
 	cd_title = cd_title.trim();
 	cd_title = cd_title.replaceAll("\"","");
-
-	boolean use_netscape = false;
-	if (netscape_checkbox.isSelected()) {
-	    use_netscape = true;
-	}
 	
 	// Generate the exportcol.pl command
@@ -325,10 +302,4 @@
 	}
 	command_parts_list.add(LocalGreenstone.getBinScriptDirectoryPath() + "exportcol.pl");
-
-	//if (Gatherer.isGsdlRemote || !use_netscape) {
-	if (!use_netscape) {
-	    // now we allow remote users to use the netscape version
-	    command_parts_list.add("-nonetscape");
-	}
 
 	command_parts_list.add("-gli");
@@ -482,16 +453,4 @@
     }
 
-    private class NetscapeCheckBoxListener
-	implements ActionListener {
-	public void actionPerformed(ActionEvent e) {
-	    if (netscape_checkbox.isSelected()) {
-		total_exported_size += netscape_size;
-	    } else {
-		total_exported_size -= netscape_size;
-	    }
-	    // Update the size field
-	    estimated_size_field.setText(Utility.formatFileLength(total_exported_size));
-	}
-    }
     /** This private class listens for selection events in from the list and then displays the appropriate details for that collection.
      */
Index: tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/util/Utility.java
===================================================================
--- trunk/gli/src/org/greenstone/gatherer/util/Utility.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gli/src/org/greenstone/gatherer/util/Utility.java	(revision 11745)
@@ -83,5 +83,5 @@
     static final public String PROGRAM_NAME = "Greenstone Librarian Interface";
     /** The current version of the GLI. */
-    static final public String PROGRAM_VERSION = "v2.70";
+    static final public String PROGRAM_VERSION = "v2.70u";
     static final public String WORKSPACE_TREE = "Workspace";
 
Index: tags/gsdl-2_70u-distribution/gsdl/bin/script/explode_metadata_database.pl
===================================================================
--- trunk/gsdl/bin/script/explode_metadata_database.pl	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/bin/script/explode_metadata_database.pl	(revision 11745)
@@ -220,5 +220,5 @@
 	if (not defined $document_file) {
 	    $record_number = $record_number + 1;
-	    $document_file = sprintf("%4.4d", $record_number) . ".nul";
+	    $document_file = sprintf("%8.8d", $record_number) . ".nul";
 
 	    open(DUMMY_FILE, ">$documents_directory/$document_file");
Index: tags/gsdl-2_70u-distribution/gsdl/bin/script/export.pl
===================================================================
--- trunk/gsdl/bin/script/export.pl	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/bin/script/export.pl	(revision 11745)
@@ -95,5 +95,6 @@
 	'desc' => "{export.saveas_version}",
 	'type' => "string",
-	'reqd' => "no" },
+	'reqd' => "no",
+        'deft' => "greenstone" },
       { 'name' => "exportdir",
 	'desc' => "{export.exportdir}",
Index: tags/gsdl-2_70u-distribution/gsdl/bin/script/exportcol.pl
===================================================================
--- trunk/gsdl/bin/script/exportcol.pl	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/bin/script/exportcol.pl	(revision 11745)
@@ -48,8 +48,4 @@
 	'type' => "string",
 	'deft' => "STDERR",
-	'reqd' => "no" },
-      { 'name' => "nonetscape",
-	'desc' => "{exportcol.nonetscape}",
-	'type' => "flag",
 	'reqd' => "no" },
       { 'name' => "cdname",
@@ -92,5 +88,4 @@
 
     my $xml = 0;
-    my $nonetscape = 0;
 
     my $hashParsingResult = {};
@@ -120,6 +115,4 @@
     }
     
-    my $use_netscape = ($nonetscape) ? 0 : 1;
-
     # If $language has been specified, load the appropriate resource bundle
     # (Otherwise, the default resource bundle will be loaded automatically)
@@ -158,13 +151,4 @@
 	&gsprintf($out, "{exportcol.fail} {exportcol.export_coll_not_installed}\n");
 	die "\n";
-    }
-
-    # if we want to use netscape, check that the lanugage pack has been installed. What's best to check? for now, use one of the english image files
-    if ($use_netscape) {
-	my $search_image = &util::filename_cat ($ENV{'GSDLHOME'}, "images", "en", "tsrchgr.gif");
-	if (!-e $search_image) {
-	    &gsprintf($out, "{exportcol.fail} {exportcol.lang_pack_not_installed}\n");
-	    die "\n";
-	}
     }
 
@@ -269,5 +253,4 @@
     my $net32dir = &util::filename_cat ($ENV{'GSDLHOME'}, "bin", "windows", "net32");
     my $net16dir = &util::filename_cat ($ENV{'GSDLHOME'}, "bin", "windows", "net16");
-    my $netscapedir = &util::filename_cat ($ENV{'GSDLHOME'}, "bin", "windows", "netscape");
     my $win32sdir = &util::filename_cat ($ENV{'GSDLHOME'}, "bin", "windows", "Win32s");
     my $phindjar = &util::filename_cat ($ENV{'GSDLHOME'}, "bin", "java", "Phind.jar");
@@ -276,5 +259,5 @@
     if ((!-d $imagesdir) || (!-d $macrosdir) || (!-d $mappingsdir) || (!-e $maincfg) ||
 	(!-e $serverexe) || (!-e $gssetupexe) || (!-e $setupexe) || (!-d $net32dir) ||
-	(!-d $net16dir) || ($use_netscape && (!-d $netscapedir)) || (!-d $win32sdir) || (!-e $phindjar) ||
+	(!-d $net16dir) || (!-d $win32sdir) || (!-e $phindjar) ||
 	(!-e $gsdlcollageappletjar)) {
 	&gsprintf($out, "{exportcol.fail} {exportcol.non_exist_files}\n");
@@ -288,5 +271,4 @@
 	&gsprintf($out, "  $net32dir\n");
 	&gsprintf($out, "  $net16dir\n");
-	&gsprintf($out, "  $netscapedir\n") if ($use_netscape);
 	&gsprintf($out, "  $win32sdir\n");
 	&gsprintf($out, "  $phindjar\n");
@@ -295,10 +277,5 @@
     }
 
-    # images. If not using netscape, copy only the top level, not any subdirs
-    if ($use_netscape) {
-	&util::cp_r ($imagesdir, $gsdldir);
-    } else {
-	&util::cp_r_toplevel ($imagesdir, $gsdldir);
-    }
+    &util::cp_r ($imagesdir, $gsdldir);
     &util::cp_r ($macrosdir, $gsdldir);
     &util::cp_r ($mappingsdir, $gsdldir);
@@ -309,32 +286,7 @@
     &util::cp_r ($net32dir, $gsdldir);
     &util::cp_r ($net16dir, $gsdldir);
-    &util::cp_r ($netscapedir, $topdir) if ($use_netscape);
     &util::cp_r ($win32sdir, $topdir);
     &util::cp ($phindjar, $binjavadir);
     &util::cp ($gsdlcollageappletjar, $binjavadir);
-
-
-    # if we have netscape 4 bundled, then switch to ns4 compat macro file
-    if ($use_netscape) {
-	my $main_cfg_file = &util::filename_cat($etcdir, "main.cfg");
-	open INFILE, "<$main_cfg_file";
-	open OUTFILE, ">$main_cfg_file.tmp";
-	my $line;
-	while ($line = <INFILE>) {
-	    if ($line =~ s/nav_css\.dm/nav_ns4\.dm/) {
-		print OUTFILE $line;
-		last; # stop matching once we have found the line
-	    } else {
-		print OUTFILE "$line";
-	    }
-	}
-	# continue with no checking
-	while ($line = <INFILE>) {
-	    print OUTFILE "$line";
-	}
-	close INFILE;
-	close OUTFILE;
-	&util::mv("$main_cfg_file.tmp", $main_cfg_file);
-    }
 
     # now change the home.dm macro file to a simple version
Index: tags/gsdl-2_70u-distribution/gsdl/bin/script/import.pl
===================================================================
--- trunk/gsdl/bin/script/import.pl	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/bin/script/import.pl	(revision 11745)
@@ -437,5 +437,5 @@
 	$processor->set_OIDtype ($OIDtype);
 	$processor->set_saveas ($saveas);
-	$processor->set_saveas_version ($version);
+	$processor->set_saveas_version ("greenstone");
 
     } else {
Index: tags/gsdl-2_70u-distribution/gsdl/images/style.css
===================================================================
--- trunk/gsdl/images/style.css	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/images/style.css	(revision 11745)
@@ -37,5 +37,8 @@
   float: right;
   text-align: right;
-}
+  padding: 0em;
+  margin:0em;
+}
+
 /* home, help, preferences links */
 p.bannerlinks {
@@ -43,5 +46,8 @@
   font-size: 10pt;
   font-weight: bold;
-}
+  padding: 0;
+  margin: 0em;
+}
+
 /* the title set by the receptionist based on the page action */
 p.bannertitle {
@@ -49,14 +55,17 @@
   font-size: 24px;
   font-weight: bold;
-  padding-top: 4px;
-  padding-right: 4px;
-  padding-bottom: 10px;
-  margin-left: 10px;
+  padding: 4px 0 10px 0;
+  margin: 20px 0 0 0;
   text-transform: lowercase;
-  background: #96c19b;
-  width: 40px;
   text-align: right;
   white-space: nowrap;
 }
+
+span.bannertitle {
+  background: #96c19b;
+  padding: 5px 6px 7px 5px;
+}
+
+
 /* the image for the collection, shown in the banner */
 div.collectimage {
@@ -65,5 +74,7 @@
 }
 /* make sure this is shown under the other divs (which may be floating) */
-div.bannerextra {clear:both;}
+div.bannerextra {
+  padding-bottom: 20px;
+}
 
 /* blankiconbar */
Index: tags/gsdl-2_70u-distribution/gsdl/macros/nav_css.dm
===================================================================
--- trunk/gsdl/macros/nav_css.dm	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/macros/nav_css.dm	(revision 11745)
@@ -113,5 +113,5 @@
 _imagescript_ {}
 
-_bannertitle_ {_If_(_imagethispage_,<p class="bannertitle">_imagethispage_</p>)}
+_bannertitle_ {_If_(_imagethispage_,<p class="bannertitle"><span class="bannertitle">_imagethispage_</span></p>)}
 
 package home
Index: tags/gsdl-2_70u-distribution/gsdl/packages/yaz/config.status
===================================================================
--- trunk/gsdl/packages/yaz/config.status	(revision 11574)
+++ 	(revision )
@@ -1,159 +1,0 @@
-#! /bin/sh
-# Generated automatically by configure.
-# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host ickenham.mdx.ac.uk:
-#
-# ./configure  --cache-file=/home/George/corbanormal/gsdl/config.cache
-#
-# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
-
-ac_cs_usage="Usage: ./config.status [--recheck] [--version] [--help]"
-for ac_option
-do
-  case "$ac_option" in
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    echo "running ${CONFIG_SHELL-/bin/sh} ./configure  --cache-file=/home/George/corbanormal/gsdl/config.cache --no-create --no-recursion"
-    exec ${CONFIG_SHELL-/bin/sh} ./configure  --cache-file=/home/George/corbanormal/gsdl/config.cache --no-create --no-recursion ;;
-  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "./config.status generated by autoconf version 2.13"
-    exit 0 ;;
-  -help | --help | --hel | --he | --h)
-    echo "$ac_cs_usage"; exit 0 ;;
-  *) echo "$ac_cs_usage"; exit 1 ;;
-  esac
-done
-
-ac_given_srcdir=.
-
-trap 'rm -fr Makefile util/Makefile odr/Makefile z39.50/Makefile asn/Makefile zutil/Makefile comstack/Makefile ccl/Makefile tab/Makefile include/Makefile include/yaz/Makefile lib/Makefile client/Makefile doc/Makefile conftest*; exit 1' 1 2 15
-
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\&%]/\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF
-/^[ 	]*VPATH[ 	]*=[^:]*$/d
-
-s%@SHELL@%/bin/sh%g
-s%@CFLAGS@%-g -O2%g
-s%@CPPFLAGS@%%g
-s%@CXXFLAGS@%%g
-s%@FFLAGS@%%g
-s%@DEFS@% -DHAVE_READLINE_READLINE_H=1 -DHAVE_READLINE_HISTORY_H=1 -DSTDC_HEADERS=1 %g
-s%@LDFLAGS@%%g
-s%@LIBS@% -lreadline -lhistory%g
-s%@exec_prefix@%${prefix}%g
-s%@prefix@%/usr/local%g
-s%@program_transform_name@%s,x,x,%g
-s%@bindir@%${exec_prefix}/bin%g
-s%@sbindir@%${exec_prefix}/sbin%g
-s%@libexecdir@%${exec_prefix}/libexec%g
-s%@datadir@%${prefix}/share%g
-s%@sysconfdir@%${prefix}/etc%g
-s%@sharedstatedir@%${prefix}/com%g
-s%@localstatedir@%${prefix}/var%g
-s%@libdir@%${exec_prefix}/lib%g
-s%@includedir@%${prefix}/include%g
-s%@oldincludedir@%/usr/include%g
-s%@infodir@%${prefix}/info%g
-s%@mandir@%${prefix}/man%g
-s%@CC@%gcc%g
-s%@CPP@%gcc -E%g
-s%@RANLIB@%ranlib%g
-s%@have_sgml2txt@%no%g
-s%@have_sgml2latex@%no%g
-s%@have_sgml2html@%no%g
-s%@ASNMODULE@%z39.50%g
-s%@ILLMODULE@%ill%g
-s%@ILLLIB@%../ill/libill.a%g
-s%@SUBDIRS_VAR@%util odr z39.50 zutil comstack ccl tab include lib client %g
-
-CEOF
-
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
-  if test $ac_beg -gt 1; then
-    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
-  else
-    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
-  fi
-  if test ! -s conftest.s$ac_file; then
-    ac_more_lines=false
-    rm -f conftest.s$ac_file
-  else
-    if test -z "$ac_sed_cmds"; then
-      ac_sed_cmds="sed -f conftest.s$ac_file"
-    else
-      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
-    fi
-    ac_file=`expr $ac_file + 1`
-    ac_beg=$ac_end
-    ac_end=`expr $ac_end + $ac_max_sed_cmds`
-  fi
-done
-if test -z "$ac_sed_cmds"; then
-  ac_sed_cmds=cat
-fi
-
-CONFIG_FILES=${CONFIG_FILES-"Makefile util/Makefile odr/Makefile z39.50/Makefile asn/Makefile zutil/Makefile comstack/Makefile ccl/Makefile tab/Makefile include/Makefile include/yaz/Makefile lib/Makefile client/Makefile doc/Makefile"}
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case "$ac_file" in
-  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
-       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-  *) ac_file_in="${ac_file}.in" ;;
-  esac
-
-  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
-  # Remove last slash and all that follows it.  Not all systems have dirname.
-  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
-  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
-    # The file is in a subdirectory.
-    test ! -d "$ac_dir" && mkdir "$ac_dir"
-    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
-    # A "../" for each directory in $ac_dir_suffix.
-    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
-  else
-    ac_dir_suffix= ac_dots=
-  fi
-
-  case "$ac_given_srcdir" in
-  .)  srcdir=.
-      if test -z "$ac_dots"; then top_srcdir=.
-      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
-  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
-  *) # Relative path.
-    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
-    top_srcdir="$ac_dots$ac_given_srcdir" ;;
-  esac
-
-
-  echo creating "$ac_file"
-  rm -f "$ac_file"
-  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
-  case "$ac_file" in
-  *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
-  *) ac_comsub= ;;
-  esac
-
-  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
-  sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
-
-
-
-exit 0
Index: tags/gsdl-2_70u-distribution/gsdl/perllib/doc.pm
===================================================================
--- trunk/gsdl/perllib/doc.pm	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/perllib/doc.pm	(revision 11745)
@@ -563,6 +563,7 @@
     }
     else {
-	print STDERR "***** Check that GROUPID in dmdSec is valid!!!\n";
-	print STDERR "***** Check to see if <techMD> required\n";
+	# TODO::
+	#print STDERR "***** Check that GROUPID in dmdSec is valid!!!\n";
+	#print STDERR "***** Check to see if <techMD> required\n";
 	# if it isn't allowed, go back and set $mdTag = dmdSec/amdSec
 
Index: tags/gsdl-2_70u-distribution/gsdl/perllib/strings.rb
===================================================================
--- trunk/gsdl/perllib/strings.rb	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/perllib/strings.rb	(revision 11745)
@@ -152,6 +152,6 @@
 explode.plugin: Plugin to use for exploding
 explode.params: [options] filename
+
 # -- exportcol.pl --
-
 exportcol.out:Filename or handle to print output status to.
 exportcol.cddir:The name of the directory that the CD contents are exported to.
@@ -169,7 +169,5 @@
 exportcol.success:exportcol.pl succeeded:
 exportcol.output_dir:The exported collections (%s) are in %s.
-exportcol.nonetscape:Do not bundle netscape with exported CD-ROM.
 exportcol.export_coll_not_installed:The Export to CD-ROM functionality has not been installed.
-exportcol.lang_pack_not_installed:The Classic Interface Pack has not been installed. This is necessary for Netscape 4 compatibility. 
 
 # -- import.pl --
@@ -280,4 +278,6 @@
 
 export.saveas.METS:METS format using the Greenstone profile.
+
+export.saveas_version:Currently only valid with saveas: METS, options are 'greenstone', for Greenstone METS, or 'fedora', for Fedora METS.
 
 export.out:Filename or handle to print output status to.
Index: tags/gsdl-2_70u-distribution/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/CollageImage.java
===================================================================
--- trunk/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/CollageImage.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/CollageImage.java	(revision 11745)
@@ -4,4 +4,7 @@
 import java.awt.geom.*;
 import java.io.*;
+import java.net.*;
+import java.awt.image.*;
+
 
 /** 
@@ -17,6 +20,29 @@
 public class CollageImage {
 
-    /** Graphical representation of the image */
-    Image image_        = null;
+     /** Decrements the alpha value between adjacent rows on the edge of an image<br>
+     *  Used to fade the edges faster than the rest of the image <br>
+     *  Only used when java2 parameter is true and advanced image processing
+     *  techniques may be applied */
+    static final int FADEVALUE = 3;
+
+    /** Defines the shades of white used to colour the backgrounds of white images <br>
+     *  These colours are used because when several white images appear in the collage
+     *  simultaneously it is difficult to distinguish their edges<br>
+     *  Only used when java2 parameter is true and advanced image processing
+     *  techniques may be applied */
+    int colorMask [] = {0xF8FFFF, 0xFFF8FF, 0xFFFFF8, 0xF8F8FF, 0xFFF8F8, 0xF8FFF8, 0xFAFAFA};
+
+      
+    /** Defines the number of shades of white used to colour the backgrounds of white images <br>
+     *  These colours are used because when several white images appear in the collage
+     *  simultaneously it is difficult to distinguish their edges<br>
+     *  Only used when java2 parameter is true and advanced image processing
+     *  techniques may be applied */
+    static final int NO_OF_COLORS = 7;
+
+    /** Will fire a removal operation when 4 images in the collage overlap a single area */
+    static final int NO_IMAGES_OF_OVERLAP = 4;
+
+
     /** Source url of the image */
     String from_url_    = null;
@@ -29,5 +55,7 @@
     /** Indicates whether or not the image has been drawn on the applet previously */
     boolean fresh       = true;
-
+    
+    URL url_ = null;      
+ 
     /** Reflects the translation of the image from the origin to its position on the screen */
     AffineTransform af_ = null;
@@ -40,5 +68,12 @@
     /** Bottom y co-ordinate */
     protected int yb_ = 0;
-
+ 
+     /** Refers to applet */
+    GsdlCollageApplet app_ = null;
+
+    boolean isJava2_;
+ 
+    Image image_; 
+   
     /** Constructs an CollageImage from the three specified parameters
      *
@@ -46,19 +81,16 @@
      *  @param from_url The source url for the image
      *  @param name The file name of the image */
-    public CollageImage(Image image, String from_url, String name)
+    public CollageImage(GsdlCollageApplet app, boolean isJava2, DownloadImages.ImageUrlTriple iutriple)
     {
-	image_    = image;
-	from_url_ = from_url;
-	name_     = name;
-    }
-
-    /** Sets the width and height of the image
-     *
-     *  @param x_dim The new width of the image
-     *  @param y_dim The new height of the image */
-    public void setDimensions(int x_dim, int y_dim)
-    {
-	image_x_dim_ = x_dim;
-	image_y_dim_ = y_dim;
+         
+         image_ = iutriple.image();
+	 from_url_ = iutriple.urlString();
+	 name_ = iutriple.name();
+	 url_ =  iutriple.url();
+         
+         isJava2_=isJava2;
+         app_=app;  
+
+	 process();
     }
 
@@ -71,4 +103,5 @@
 	image_x_dim_ = (int) (image_x_dim_ * af.scaleX);
 	image_y_dim_ = (int) (image_y_dim_ * af.scaleY);
+        
 	image_ = image_.getScaledInstance(image_x_dim_, image_y_dim_, Image.SCALE_DEFAULT);
 	
@@ -89,4 +122,5 @@
 	    yb_ = Math.round((float)(trans_y + image_y_dim_)) -1; 
 	}
+
     }
 
@@ -157,4 +191,318 @@
 	return af_.getTranslateY();
     }
+    
+  
+    /** Fades and colours the image on a pixel-by-pixel basis <br>
+     *  First it grabs the pixels of the entire image and stores them in a 2D array.
+     *  Then a bound is calculated to indicate the point from which edge
+     *  fading should occur. The position of the bound will change in proportion
+     *  to the age of the image so that older images have a larger faded edge.
+     *  The area within the bounds, that forms the center of the image, is processed
+     *  first and faded by a standard alpha value. Then each edge of the image
+     *  is processed separately, creating a gradient fade from the true edge to the
+     *  position of the bound. <br>
+     *  The faded pixel array is then turned into a new image a returned.
+     *
+     *  @param img the image that requires processing
+     *  @param x the x co-ordinate of the image
+     *  @param y the y co-ordinate of the image
+     *  @param w the width of the image
+     *  @param h the height of the image
+     *  @param p the position of the image in the applet (indicates age)
+     *  @param fresh whether the image is being processed for the first time */
+    public int[]  handlepixels(int p) {
+       
+	int h = image_y_dim_;
+	int w = image_x_dim_;       
+	
+	// declare an array to hold the pixels
+	int[] pixels = new int[w * h];
+	// get the pixels of the image into the pixels array
+	PixelGrabber pg = new PixelGrabber(image_, 0, 0, w, h, pixels, 0, w);
+	
+	try {
+	    pg.grabPixels();
+	} catch (InterruptedException e) {
+	    System.err.println("interrupted waiting for pixels!");
+	}
+	
+	    
+	// check for any failures
+	if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
+	    System.err.println("image fetch aborted or errored");
+		
+	}
+	
+   
+	// calculates the bound from which fading should begin
+	double bound = p * 0.01;
+	if (w > h)
+	    bound *= w;
+	else
+	    bound *= h;
+
+	int upperboundheight = h - (int) bound;
+	int upperboundwidth = w - (int) bound;
+	int lowerbound = (int) bound;
+
+      	// loop through every pixel in the picture and handle it
+	for (int j = lowerbound; j < upperboundheight; j++) {
+	    for (int i = lowerbound; i < upperboundwidth; i++) {
+		// width and height: x+i y+j
+		pixels[j * w + i] = handlesinglepixel(pixels[j * w + i], p, fresh, false, 255);
+	    }
+	}
+
+	int fade = 0;
+	int fader = 0;
+	int corealpha = (pixels[(h/2) * w + (w/2)] >> 24) & 0xff;
+	
+	// top edge
+	for (int n = lowerbound; n >= 0; n--) {
+	    fader = corealpha - fade;
+	    if (fader < 0)
+		fader = 0;
+	    
+	    for (int m = 0; m < w; m++){
+		int index = n* w + m;
+		if (index <pixels.length){
+		    pixels[index] = handlesinglepixel(pixels[index], p, fresh, true, fader);
+		    
+		}
+	    }   
+	    
+	    fade+= FADEVALUE;
+	}
+
+	// bottom edge
+	fade = 0;
+	for (int n = upperboundheight; n < h; n++) {
+	    fader = corealpha - fade;
+	    if (fader < 0)
+		fader = 0;
+	    for (int m = 0; m < w; m++){
+		int index = n * w + m;
+		if (index <pixels.length){
+		    pixels[index] = handlesinglepixel(pixels[index], p, fresh, true, fader);
+		    
+		}
+	    }
+	    
+	    fade += FADEVALUE;
+	}
+
+	// left edge
+	fade = 0;
+	for (int n = lowerbound; n >= 0; n--) {
+	    fader = corealpha - fade;
+	    if (fader < 0)
+		fader = 0;
+	    for (int m = 0; m < h; m++) {
+		if ( m < lowerbound && n > m);
+		else if ( m > upperboundheight && n > (h - m));
+		else {
+		    int index = m * w + n;
+                    if (index <pixels.length){
+			pixels[index] = handlesinglepixel(pixels[index], p, fresh, true, fader);
+	
+		    }
+		}
+                   
+	    }
+	    fade += FADEVALUE;    
+	}
+	
+	// right edge
+	fade = 0;
+	for (int n = upperboundwidth; n < w; n++) {
+	    fader = corealpha - fade;
+	    if (fader < 0)
+		fader = 0;
+	    for (int m = 0; m < h; m++) {
+		if ( m < lowerbound && (w - n) > m);
+		else if ( m > upperboundheight && (w - n) > (h - m));
+		else {
+		    int index = m * w + n;
+                    if (index <pixels.length){
+			pixels[index] = handlesinglepixel(pixels[index], p, fresh, true, fader);
+	
+		    }
+		}
+		    
+	    }
+	    
+	    fade += FADEVALUE;
+	}  
+	
+       		// set the pixels of the whole picture to the pixels array
+       	pg.setPixels(0, 0, w, h, pg.getColorModel(), pixels, 0, w);
+
+	image_ =  app_.createImage(new MemoryImageSource(w, h, pixels, 0, w));
+
+	return pixels;
+    }
+
+    
+    /** Adjusts the colour and alpha value of an individual pixel <br>
+     *  If the image is being drawn for the first time, the RGB values are
+     *  extracted. If the pixel is close to white (RGB > 250) then an offwhite
+     *  colour is applied to this pixel.
+     *  This is done because when several white images appear in the collage
+     *  simultaneously it is difficult to distinguish their edges. <br>
+     *  This function also fades the alpha value of the pixel as the image ages.
+     *  The alpha value is more heavily decremented as pixels get closer to the
+     *  edge of the image
+     *
+     *  @param pixel the pixel to manipulate
+     *  @param p the position of the image in collage (representative of age)
+     *  @param fresh indicates whether or not the image is being drawn for the first time
+     *  @param edge indicates whether or not this pixel is near the edge of the image
+     *  @param fade the amount by which to fade this pixel
+     *  @return the adjusted pixel as an int */
+    public int handlesinglepixel(int pixel, int p, boolean fresh, boolean edge, int fade) {
+       	int newpixel = 0;
+
+        //changes the colour of the picture, only when first drawn
+	//and only if the pixel is close to white
+	if (fresh) {
+	    
+	    int red   = (pixel >> 16) & 0xff;
+	    int green = (pixel >>  8) & 0xff;
+	    int blue  = (pixel      ) & 0xff;
+	    
+	    if (red >= 250 && green >= 250 && blue >= 250) {
+		
+		int c = colorMask[((int) (p%NO_OF_COLORS))];
+
+		red = (c >> 16) & 0xff;
+		green = (c >> 8) & 0xff;
+		blue  = (c) & 0xff;
+	    }
+
+	    newpixel |= (red << 16) & 0x00ff0000;
+	    newpixel |= (green << 8) & 0x0000ff00;
+	    newpixel |= blue & 0x000000ff;
+	}
+
+	else {
+	    newpixel |= pixel & 0x00ffffff;
+	}
+
+	int alpha = (pixel >> 24) & 0xff;
+
+	if (edge) {
+	    // fade the edges more...
+	    alpha = fade;
+	}
+	else if (alpha > 10 && !fresh) {
+	    alpha -= 10;
+	}
+	
+	newpixel |= (alpha << 24) & 0xff000000;
+	
+	return (newpixel);
+    }
+
+
+  
+
+    /** Resets the alpha channel of an image so that it appears solid
+     *
+     *  @param img the image to restore
+     *  @param x the x co-ordinate of the image
+     *  @param y the y co-ordinate of the image
+     *  @param w the width of the image
+     *  @param h the height of the image */
+    public void restoreAlpha() {
+       	int h = image_y_dim_;
+	int w = image_x_dim_;       
+
+	// declare an array to hold the pixels
+	int[] pixels = new int[w * h];
+	// get the pixels of the image into the pixels array
+	PixelGrabber pg = new PixelGrabber(image_, 0, 0, w, h, pixels, 0, w);
+	try {
+	    pg.grabPixels();
+	    
+		
+	} catch (InterruptedException e) {
+	    System.err.println("interrupted waiting for pixels!");
+	}
+	
+	
+	// check for any failures
+	if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
+	    System.err.println("image fetch aborted or errored");
+	}
+	
+	
+	    
+	// loop through every pixel in the picture and handle it
+	for (int j = 0; j < h; j++) {
+	    for (int i = 0; i < w; i++) {
+		pixels[j * w + i] |= (255 << 24) & 0xff000000;
+	    }
+	}   
+ 
+	// set the pixels of the whole picture to the pixels array
+	pg.setPixels(0, 0, w, h, pg.getColorModel(), pixels, 0, w);
+
+	image_ =  app_.createImage(new MemoryImageSource(w, h, pixels, 0, w));       
+	
+    }
+    
+    /** Checks whether an image has faded to the point where it must be removed
+     *  from the collage.
+     *
+     *  @param img the image to restore
+     *  @param x the x co-ordinate of the image
+     *  @param y the y co-ordinate of the image
+     *  @param w the width of the image
+     *  @param h the height of the image */
+    public boolean checkFaded (int[] pixels) {
+	int h = image_y_dim_;
+	int w = image_x_dim_;
+
+	// get the alpha value of the middle pixel of the image
+	int corealpha = (pixels[(h/2) * w + (w/2)] >> 24) & 0xff;
+	
+	if (corealpha < 50)
+	    return true;
+	
+	return false;
+	
+    }
+
+    public boolean isValid(){
+	image_x_dim_ = image_.getWidth(app_);
+	image_y_dim_ = image_.getHeight(app_);
+
+	return  (image_x_dim_) >0 && ( image_x_dim_ >0);
+	
+    }
+
+    
+    public void process(){
+
+	// images x and y dimensions
+	image_x_dim_ = image_.getWidth(app_);
+	image_y_dim_ = image_.getHeight(app_);
+	 if (( image_x_dim_ >0) && ( image_x_dim_ >0))
+	     {		
+		 // places and sizes the image
+		 MyAffineTransform af = new MyAffineTransform(image_x_dim_,image_y_dim_);
+		 
+		 // sets location & size of collage image
+		 setAffineTransform(af, isJava2_);
+		 fresh = false;
+		 if (isJava2_ ) {      	 
+		     restoreAlpha(); 
+		 }
+		 	
+	     }
+  
+	
+    }
+
 }	
 
Index: tags/gsdl-2_70u-distribution/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/DisplayImages.java
===================================================================
--- trunk/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/DisplayImages.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/DisplayImages.java	(revision 11745)
@@ -12,5 +12,5 @@
  *
  *  Retrieves images from the download thread, determines an appropriate position
- *  for these images onscreen ensuring maximum whitespace coverage and minimal overlap
+ *  for thes  images onscreen ensuring maximum whitespace coverage and minimal overlap
  *  when possible. Draws images using advanced image processing techniques when applicable,
  *  such as fading the edges of an image and discolouring backgrounds. Also re-uses images
@@ -19,15 +19,4 @@
 public class DisplayImages extends Thread {
 
-    /** Decrements the alpha value between adjacent rows on the edge of an image<br>
-     *  Used to fade the edges faster than the rest of the image <br>
-     *  Only used when java2 parameter is true and advanced image processing
-     *  techniques may be applied */
-    static final int FADEVALUE = 3;
-    /** Defines the number of shades of white used to colour the backgrounds of white images <br>
-     *  These colours are used because when several white images appear in the collage
-     *  simultaneously it is difficult to distinguish their edges<br>
-     *  Only used when java2 parameter is true and advanced image processing
-     *  techniques may be applied */
-    static final int NO_OF_COLORS = 7;
 
     /** Will fire a removal operation when 4 images in the collage overlap a single area */
@@ -60,10 +49,11 @@
     protected boolean is_java2_     = false;
 
-    /** Holds images currently on display in the applet */
-    protected  Vector inuse_ready_    = null;
-
+  
     /** Holds images currently on display in the applet */
     protected Vector inuse_    = null;
     
+     /** Holds images ready to be used */
+    protected Vector inuse_ready_    = null;
+
     /** Holds previously displayed images for re-use */
     protected Vector notinuse_ = null;
@@ -87,11 +77,5 @@
     public static int [] [] used_space = null;
     
-    /** Defines the shades of white used to colour the backgrounds of white images <br>
-     *  These colours are used because when several white images appear in the collage
-     *  simultaneously it is difficult to distinguish their edges<br>
-     *  Only used when java2 parameter is true and advanced image processing
-     *  techniques may be applied */
-    int colorMask [] = {0xF8FFFF, 0xFFF8FF, 0xFFFFF8, 0xF8F8FF, 0xFFF8F8, 0xF8FFF8, 0xFAFAFA};
-
+  
     /**
      *  Starts the display images thread. Initialises variables using parameters and
@@ -114,6 +98,6 @@
 
 	inuse_    = new Vector();
-        inuse_ready_   = new Vector();  
-	notinuse_ = new Vector();
+      	notinuse_ = new Vector();
+        inuse_ready_ = new Vector();
 	download_images_ = download_images;
 	// sets width and height
@@ -146,19 +130,25 @@
         next_frame_ =  new Thread(new Runnable(){
                 public void run() {
-		    try {
-
-			Thread curr_thread = Thread.currentThread();
-	    
-			while (curr_thread == next_frame_) {
+		  
+		    Thread curr_thread = Thread.currentThread();
+		    
+		    while (curr_thread == next_frame_) {
+			try {	    
+			    Runtime rt = Runtime.getRuntime();
+			    //System.out.println("total: "+rt.totalMemory());
+			    //System.out.println("free:  "+rt.freeMemory());
+			    rt.gc();             
+               		    //System.out.println("**************next frame...");
 			    next_frame();
-			    
 			    Thread.sleep(app_. refreshDelay_);
+			   
 			    curr_thread = Thread.currentThread();
+			} catch (Exception e) {
+                            e.printStackTrace(); 
+			    break;
 			}
-
-	    
-		    } catch (Exception e) {
-			e.printStackTrace();
-		    }
+		    }
+		    	    
+		   
 		}
 
@@ -166,5 +156,5 @@
 	    });
 
-	   next_frame_.start();
+	 next_frame_.start();
 
 
@@ -175,5 +165,5 @@
      *  @param y the y co-ordinate of the mouse
      *  @return the image that the user has clicked on or null if the user has clicked whitespace */
-   public synchronized CollageImage clickedOnImage(int x, int y)
+   public CollageImage clickedOnImage(int x, int y)
     {
 	if (app_.verbosity() > 1)
@@ -182,7 +172,7 @@
 	}
 
-	int no_images = inuse_.size() - 1;
+	
 	// checks from last image down, as last images place will be at the top of the collage
-	for (int i= no_images; i >= 0; i--)
+	for (int i= inuse_.size() - 1; i >= 0; i--)
 	{
 	    CollageImage collage_image = (CollageImage)inuse_.elementAt(i);
@@ -211,109 +201,74 @@
     public  void display_collage() 
     {
-
-       	// get the number of images currently in the collage
-	final int no_images = inuse_.size();
-	
-
+	
 	// if there is nothing new to add
-	if (no_images==0) return;
-	
+	if (inuse_.size()==0) return;
 	
 	// otherwise need to re-generate images
 	if (app_.verbosity() >= 2)
-	{
-	    System.err.println("Regenerating images: " +no_images);
-	}
+	    {
+		//system.err.println("Regenerating images");
+	    }
 	
 	// get each image currently onscreen inturn
-	for (int i=0; i<inuse_.size(); i++)
-	{
-	    CollageImage collage_image = (CollageImage)inuse_.elementAt(i);
-	   
-	    Image image = collage_image.image_;
-	    // images x and y dimensions
-	    int image_x_dim = image.getWidth(app_);
-	    int image_y_dim = image.getHeight(app_);
-
-	    //int status = app_.checkImage(image,app_);
-
-	    if ((image_x_dim>0) && (image_y_dim>0))
+	for (int i=0; i<inuse_.size();)
 	    {
+		CollageImage collage_image = (CollageImage)inuse_.elementAt(i);
+  
+                if (!collage_image.isValid()){
+		    continue;
+		}	    
+
+                int[] pixels = null;
 		// the first time the image is painted, determine its position and size
 		if (collage_image.fresh == true)
 		    {
-			// first time => randomly place doc
-			collage_image.setDimensions(image_x_dim,image_y_dim);
-			
-			// places and sizes the image
-			MyAffineTransform af = new MyAffineTransform(image_x_dim,image_y_dim);
-		
-			// sets location & size of collage image
-			collage_image.setAffineTransform(af, is_java2_);
-			
-			 if (is_java2_) {
-			    collage_image.image_ 
-				 = restoreAlpha(collage_image.image_, 0, 0, 
-					       collage_image.image_x_dim_, collage_image.image_y_dim_); 
-			   
-			}
-			
-			
+			collage_image.process();
 		    }
 		
 		// advanced image processing may be used
 		if (is_java2_)
-		{
-              
- 
-		    // conducts fading and colouring of image
-		    Image img = handlepixels(collage_image.image_, 0, 0, collage_image.image_x_dim_, 
-					    collage_image.image_y_dim_, i, collage_image.fresh ); 
-		    collage_image.image_ = img;
+		    {
+			// conducts fading and colouring of image
+			pixels = collage_image.handlepixels(inuse_.size()-i); 
+		    }
 		
- 
-		}
-
 		if (collage_image.fresh) {
 		    collage_image.fresh = false;
 		}
-		   
-	    }
-	    else {
-		if (app_.verbosity()>=3) {
-		    System.err.println("  Image ["+i+"] not ready yet!");
-		}
-	    }
-	    //finished_graphic_.drawImage(screen_buffer_,0,0,app_);
-	
-	}	
-	
-	// draws the finished image onscreen
-	finished_graphic_.drawImage(screen_buffer_,0,0,app_);
-	remove_old_images();
-    }
-
-
- /** loops through removing oldest images and reduces number of images if excessive overlap is occuring */
-    void remove_old_images() {
-   
-	// loops through removing oldest images that have almost faded completely
-	// and restricting the size of a simple collage to 25 images
-	int i=0;
-	while (i<inuse_.size())
-	{
-	    CollageImage collage_image = (CollageImage)inuse_.elementAt(i);
-	    
-	    // if we remove when images have faded too much
-	    if (is_java2_) {
-		if (checkFaded(collage_image.image_, 0, 0, collage_image.image_x_dim_, collage_image.image_y_dim_) || overlap)
-		    {
+		
+		
+		// if we remove when images have faded too much
+		if (is_java2_) {
+		    if (collage_image.checkFaded(pixels)|| overlap)
+			{
+			    overlap = false;
+			    
+			    CollageImage removed_image = (CollageImage)inuse_.elementAt(i);
+			    //System.out.println(removed_image.name_ + "is removed");
+			    inuse_.remove(i);
+			    // indicates space for this image is no longer used
+			    for (int n = removed_image.xl_; n < (removed_image.xl_ + removed_image.image_x_dim_); n++)
+				for (int m = removed_image.yt_; m < (removed_image.yt_ + removed_image.image_y_dim_); m++)
+				    if(used_space[n][m] != 0) {
+					used_space[n][m]--;
+					if (used_space[n][m] > NO_IMAGES_OF_OVERLAP)
+					    overlap = true;
+				    }
+			    
+			    // sets the image as fresh and adds it to the vector of images previously seen
+			    removed_image.fresh = true;
+			    notinuse_.addElement(removed_image);
+			}
+		    else{
+			i++;
+		    }
+		}
+		else 
+		    if (inuse_.size() > 25 || overlap) {
 			overlap = false;
-
+			
 			CollageImage removed_image = (CollageImage)inuse_.elementAt(i);
 			inuse_.remove(i);
-
-			// restores alpha channel to represent a solid image
-			Image img = restoreAlpha(removed_image.image_, 0, 0, removed_image.image_x_dim_, removed_image.image_y_dim_); 
 			
 			// indicates space for this image is no longer used
@@ -322,47 +277,19 @@
 				if(used_space[n][m] != 0) {
 				    used_space[n][m]--;
-				    if (used_space[n][m] > NO_IMAGES_OF_OVERLAP)
-					overlap = true;
+				if (used_space[n][m] > NO_IMAGES_OF_OVERLAP)
+				    overlap = true;
 				}
-
+			
 			// sets the image as fresh and adds it to the vector of images previously seen
-			removed_image.image_ = img;
 			removed_image.fresh = true;
 			notinuse_.addElement(removed_image);
 		    }
-		else {
-		    i++;
-		}
-	    }
-	    // if we remove to prevent too many images being displayed simultaneously
-	    else {
-		if (inuse_.size() > 25 || overlap) {
-		    overlap = false;
-
-		    CollageImage removed_image = (CollageImage)inuse_.elementAt(i);
-		    inuse_.remove(i);
-
-		    // indicates space for this image is no longer used
-		    for (int n = removed_image.xl_; n < (removed_image.xl_ + removed_image.image_x_dim_); n++)
-			for (int m = removed_image.yt_; m < (removed_image.yt_ + removed_image.image_y_dim_); m++)
-			    if(used_space[n][m] != 0) {
-				used_space[n][m]--;
-				if (used_space[n][m] > NO_IMAGES_OF_OVERLAP)
-				    overlap = true;
-			    }
-		    
-		    // sets the image as fresh and adds it to the vector of images previously seen
-		    removed_image.fresh = true;
-		    notinuse_.addElement(removed_image);
-		}
-		else {
-		    i++;
-		}
-	    }
-	}
-     
-     
-    }
-
+		    else{
+			i++;
+		    }    
+		
+	    }
+    }
+    
   
     /** Alters the images currently on display in the applet <br>
@@ -379,325 +306,34 @@
     {
 	double random = Math.random();
-              
-
-	if (inuse_ready_.size() > 0){
+	
+     
+	 if (inuse_ready_.size() > 0){
 	    int pos = (int) ((inuse_ready_.size() - 1) * random);
-		inuse_.addElement(inuse_ready_.remove(pos));
-	}
-        else if (notinuse_.size()>0)
-	    {
-		int position = (int) ((notinuse_.size() - 1) * random);
-		Image image;
-		
-		CollageImage collage_image = (CollageImage)notinuse_.elementAt(position);
-		notinuse_.remove(position);
-		inuse_.addElement(collage_image);
-		
-		if (app_.verbosity()>3)
+	    CollageImage collage_image = (CollageImage) inuse_ready_.remove(pos);
+	    inuse_.addElement(collage_image);
+ 	}
+	else if (notinuse_.size()>0)
+		{
+		    int position = (int) ((notinuse_.size() - 1) * random);
+		    
+		    CollageImage collage_image = (CollageImage)notinuse_.elementAt(position);
+		    notinuse_.remove(position);
+		    inuse_.addElement(collage_image);
+		    
+		    if (app_.verbosity()>3)
 		    {
 			System.err.println("Re-using an image not on screen");
 		    }
-	    }
-	// otherwise repaint the first image as the last image
-// 	else if (inuse_.size() > 0){
-// 	    CollageImage removed_image = (CollageImage)inuse_.elementAt(0);
-	    
-// 	    // empty the picture from the grid
-// 	    for (int n = removed_image.xl_; n < (removed_image.xl_ + removed_image.image_x_dim_); n++)
-// 		for (int m = removed_image.yt_; m < (removed_image.yt_ + removed_image.image_y_dim_); m++)
-// 		    used_space[n][m]--;
-	    
-// 	    // reset the alpha and add it
-// 	    removed_image.fresh = true;
-	    
-// 	     if (is_java2_) {
-// 		removed_image.image_ = restoreAlpha(removed_image.image_, 0, 0, 
-// 						    removed_image.image_x_dim_, removed_image.image_y_dim_); 
-// 	    }
-	    
-// 	    notinuse_.addElement(removed_image);
-// 	    inuse_.remove(0);
-// 	    if (app_.verbosity()>=4){
-// 		System.err.println("Removing oldest image");
-// 	    }
-// 	}
-	else{
-	    if (app_.verbosity()>=4)
-		System.err.println("No images in download area");
-	}
-          display_collage();
-	
-    }
-    
-    /** Adjusts the colour and alpha value of an individual pixel <br>
-     *  If the image is being drawn for the first time, the RGB values are
-     *  extracted. If the pixel is close to white (RGB > 250) then an offwhite
-     *  colour is applied to this pixel.
-     *  This is done because when several white images appear in the collage
-     *  simultaneously it is difficult to distinguish their edges. <br>
-     *  This function also fades the alpha value of the pixel as the image ages.
-     *  The alpha value is more heavily decremented as pixels get closer to the
-     *  edge of the image
-     *
-     *  @param pixel the pixel to manipulate
-     *  @param p the position of the image in collage (representative of age)
-     *  @param fresh indicates whether or not the image is being drawn for the first time
-     *  @param edge indicates whether or not this pixel is near the edge of the image
-     *  @param fade the amount by which to fade this pixel
-     *  @return the adjusted pixel as an int */
-    public int handlesinglepixel(int pixel, int p, boolean fresh, boolean edge, int fade) {
-	
-	int newpixel = 0;
-
-        //changes the colour of the picture, only when first drawn
-	//and only if the pixel is close to white
-	if (fresh) {
-	    
-	    int red   = (pixel >> 16) & 0xff;
-	    int green = (pixel >>  8) & 0xff;
-	    int blue  = (pixel      ) & 0xff;
-	    
-	    if (red >= 250 && green >= 250 && blue >= 250) {
-		
-		int c = colorMask[((int) (p%NO_OF_COLORS))];
-
-		red = (c >> 16) & 0xff;
-		green = (c >> 8) & 0xff;
-		blue  = (c) & 0xff;
-	    }
-
-	    newpixel |= (red << 16) & 0x00ff0000;
-	    newpixel |= (green << 8) & 0x0000ff00;
-	    newpixel |= blue & 0x000000ff;
-	}
-
-	else {
-	    newpixel |= pixel & 0x00ffffff;
-	}
-
-	int alpha = (pixel >> 24) & 0xff;
-
-	if (edge) {
-	    // fade the edges more...
-	    alpha = fade;
-	}
-	else if (alpha > 10 && !fresh) {
-	    alpha -= 10;
-	}
-
-	newpixel |= (alpha << 24) & 0xff000000;
-	
-	return (newpixel);
-    }
-    
-    /** Fades and colours the image on a pixel-by-pixel basis <br>
-     *  First it grabs the pixels of the entire image and stores them in a 2D array.
-     *  Then a bound is calculated to indicate the point from which edge
-     *  fading should occur. The position of the bound will change in proportion
-     *  to the age of the image so that older images have a larger faded edge.
-     *  The area within the bounds, that forms the center of the image, is processed
-     *  first and faded by a standard alpha value. Then each edge of the image
-     *  is processed separately, creating a gradient fade from the true edge to the
-     *  position of the bound. <br>
-     *  The faded pixel array is then turned into a new image a returned.
-     *
-     *  @param img the image that requires processing
-     *  @param x the x co-ordinate of the image
-     *  @param y the y co-ordinate of the image
-     *  @param w the width of the image
-     *  @param h the height of the image
-     *  @param p the position of the image in the applet (indicates age)
-     *  @param fresh whether the image is being processed for the first time */
-
-    public  Image handlepixels(Image img, int x, int y, int w, int h, int p, boolean fresh) {
-	
-	// declare an array to hold the pixels
-	int[] pixels = new int[w * h];
-
-	// get the pixels of the image into the pixels array
-	PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
-	try {
-	    pg.grabPixels();
-	
-	} catch (InterruptedException e) {
-	    System.err.println("interrupted waiting for pixels!");
-	    return img;
-	}
-	// check for any failures
-	if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
-	    System.err.println("image fetch aborted or errored");
-	    return img;
-	}
-
-	// calculates the bound from which fading should begin
-	double bound = (inuse_.size() - p) * 0.01;
-	if (w > h)
-	    bound *= w;
-	else
-	    bound *= h;
-	int upperboundheight = h - (int) bound;
-	int upperboundwidth = w - (int) bound;
-	int lowerbound = (int) bound;
-
-	// loop through every pixel in the picture and handle it
-	for (int j = lowerbound; j < upperboundheight; j++) {
-	    for (int i = lowerbound; i < upperboundwidth; i++) {
-		// width and height: x+i y+j
-		pixels[j * w + i] = handlesinglepixel(pixels[j * w + i], p, fresh, false, 255);
-	    }
-	}
-
-	int fade = 0;
-	int fader = 0;
-	int corealpha = (pixels[(h/2) * w + (w/2)] >> 24) & 0xff;
-	
-	// top edge
-	for (int n = lowerbound; n >= 0; n--) {
-	    fader = corealpha - fade;
-	    if (fader < 0)
-		fader = 0;
-	    
-	    for (int m = 0; m < w; m++)
-		pixels[n * w + m] = handlesinglepixel(pixels[n * w + m], p, fresh, true, fader);
-	    
-	    fade+= FADEVALUE;
-	}
-
-	// bottom edge
-	fade = 0;
-	for (int n = upperboundheight; n < h; n++) {
-	    fader = corealpha - fade;
-	    if (fader < 0)
-		fader = 0;
-	    for (int m = 0; m < w; m++)
-		pixels[n * w + m] = handlesinglepixel(pixels[n * w + m], p, fresh, true, fader);
-	    
-	    fade += FADEVALUE;
-	}
-
-	// left edge
-	fade = 0;
-	for (int n = lowerbound; n >= 0; n--) {
-	    fader = corealpha - fade;
-	    if (fader < 0)
-		fader = 0;
-	    for (int m = 0; m < h; m++) {
-		if ( m < lowerbound && n > m);
-		else if ( m > upperboundheight && n > (h - m));
-		else 
-		    pixels[m * w + n] = handlesinglepixel(pixels[m * w + n], p, fresh, true, fader);
-	    }
-	    fade += FADEVALUE;    
-	}
-	
-	// right edge
-	fade = 0;
-	for (int n = upperboundwidth; n < w; n++) {
-	    fader = corealpha - fade;
-	    if (fader < 0)
-		fader = 0;
-	    for (int m = 0; m < h; m++) {
-		if ( m < lowerbound && (w - n) > m);
-		else if ( m > upperboundheight && (w - n) > (h - m));
-		else 
-		    pixels[m * w + n] = handlesinglepixel(pixels[m * w + n], p, fresh, true, fader);
-	    }
-	    
-	    fade += FADEVALUE;
-	}
-   
-	// set the pixels of the whole picture to the pixels array
-	pg.setPixels(0, 0, w, h, pg.getColorModel(), pixels, 0, w);
-
-	// create the new image and return it
-	return( app_.createImage(new MemoryImageSource(w, h, pixels, 0, w)) );
-    
-    }
-
-    /** Resets the alpha channel of an image so that it appears solid
-     *
-     *  @param img the image to restore
-     *  @param x the x co-ordinate of the image
-     *  @param y the y co-ordinate of the image
-     *  @param w the width of the image
-     *  @param h the height of the image */
-    public Image restoreAlpha(Image img, int x, int y, int w, int h) {
-      
-	// declare an array to hold the pixels
-	int[] pixels = new int[w * h];
-
-	// get the pixels of the image into the pixels array
-	PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
-
-	try {
-	  
-	    pg.grabPixels();
-          
-	} catch (InterruptedException e) {
-	    System.err.println("interrupted waiting for pixels!");
-	    return img;
-	}
-
-      
-	// check for any failures
-	if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
-	    System.err.println("image fetch aborted or errored");
-	    return img;
-	}
-
-	// loop through every pixel in the picture and handle it
-	for (int j = 0; j < h; j++) {
-	    for (int i = 0; i < w; i++) {
-		pixels[j * w + i] |= (255 << 24) & 0xff000000;
-	    }
-	}
-
-	// set the pixels of the whole picture to the pixels array
-	pg.setPixels(0, 0, w, h, pg.getColorModel(), pixels, 0, w);
-
-	// create the new image and return it
-	return( app_.createImage(new MemoryImageSource(w, h, pixels, 0, w)) );
-    
-    }
-
-    /** Checks whether an image has faded to the point where it must be removed
-     *  from the collage.
-     *
-     *  @param img the image to restore
-     *  @param x the x co-ordinate of the image
-     *  @param y the y co-ordinate of the image
-     *  @param w the width of the image
-     *  @param h the height of the image */
-    public boolean checkFaded (Image img, int x, int y, int w, int h) {
-	 if (w == 0 || h == 0) 
-	     return false;
-	
-	// declare an array to hold the pixels
-	int[] pixels = new int[w * h];
-
-	// get the pixels of the image into the pixels array
-	PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
-	try {
-	    pg.grabPixels();
-	
-	} catch (InterruptedException e) {
-	    System.err.println("interrupted waiting for pixels!");
-	    return false;
-	}
-	// check for any failures
-	if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
-	    System.err.println("image fetch aborted or errored");
-	    return false;
-	}
-
-	// get the alpha value of the middle pixel of the image
-	int corealpha = (pixels[(h/2) * w + (w/2)] >> 24) & 0xff;
-	
-	if (corealpha < 2)
-	    return true;
-
-	return false;
-	
-    }
+		}
+	    else{
+		if (app_.verbosity()>=4)
+		    System.err.println("No images in download area");
+	    }
+
+	display_collage();
+	
+    }
+  
+  
 
     /** Paints the applet on the screen */
@@ -725,5 +361,5 @@
 		if (collage_image.fresh) {
 		  if (app_.verbosity()>=1) {
-			System.err.println("doing nothing...  images in use is fresh.");
+			System.err.println("doing nothing...  "+ collage_image.name_ +" is fresh.");
 		   }
 		}
@@ -742,6 +378,5 @@
 		// simple image collage
 		else
-		    {
-			// add the image to the collage
+		    {			// add the image to the collage
 			
 			screen_graphic_.drawImage(collage_image.image_, 
@@ -779,18 +414,18 @@
 	    
 	    while (curr_thread == this) {
-		CollageImage collage_image  = download_images_.getCollageImage();
-			if (collage_image !=null){
-			    inuse_ready_.addElement(collage_image);	
-			}
-			else{
-			    break;
-			}
-	       curr_thread = Thread.currentThread();
-	    }
-
-	   
-	    
+		if (inuse_ready_.size() >= 1){
+		    Thread.sleep(1000);		    
+		    continue;
+		}    
+		CollageImage collage_image = download_images_.getCollageImage();
+ 	
+		if (collage_image !=null){
+		    inuse_ready_.addElement(collage_image);	
+ 		}
+		curr_thread = Thread.currentThread();
+	    }
+	        
 	} catch (Exception e) {
-	    //e.printStackTrace();
+	   e.printStackTrace();
            System.out.println("Display images thread is interrupted");
 	}
Index: tags/gsdl-2_70u-distribution/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/DownloadImages.java
===================================================================
--- trunk/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/DownloadImages.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/DownloadImages.java	(revision 11745)
@@ -24,6 +24,7 @@
 
 	Image image_;
-	String url_;
+	String urlString_;
 	String name_;
+        URL url_;
 
 	/** Constructs a downloaded image structure from the given parameters
@@ -31,8 +32,9 @@
 	 *  @param url the source url for this image
 	 *  @param name the name of the image file */
-	public ImageUrlTriple (Image image, String url, String name)
+	public ImageUrlTriple (Image image, URL url, String urlString, String name)
 	{
 	    image_ = image;
 	    url_ = url;
+            urlString_ = urlString; 
 	    name_ = name;
 	}
@@ -42,6 +44,6 @@
 	}
 
-	String url() {
-	    return url_;
+	String urlString() {
+	    return urlString_;
 	}
 
@@ -50,6 +52,9 @@
 	}
 
+	URL url(){
+	    return url_;
+	}
+
     }
-
 
    
@@ -60,8 +65,8 @@
     GsdlCollageApplet app_ = null;
     boolean isJava2_;
-    int num_of_downloads;
+    int num_of_downloads = 1;
     boolean stopDownload;
- 
-  
+
+    MediaTracker tracker_;
 
     /** Initialises an empty vector to store downloaded images in and sets
@@ -74,5 +79,4 @@
     }
 
-
     /** Push a new image into the vector of downloaded images
      *  @param image the graphical image to add
@@ -81,4 +85,6 @@
     public  synchronized int downloadImage(MediaTracker tracker, URL url, String urlString, String name)
     {
+	
+	tracker_= tracker;
 
 	while (downloaded_image != null ){
@@ -92,31 +98,25 @@
 
 	}
-	    Image image = Toolkit.getDefaultToolkit().getImage(url);
+      
+	Image image = Toolkit.getDefaultToolkit().getImage(url);
+	tracker_.addImage(image,num_of_downloads);
 
-	     tracker.addImage(image,num_of_downloads);
+	try{
+	    tracker_.waitForID(num_of_downloads);
+	}
+	catch (InterruptedException e){
+	    notify();
+	    return num_of_downloads;
+	}
+	
 
-	     try{
-	       System.out.println( "   downloading ..."); 
-		 tracker.waitForID(num_of_downloads);
-                System.out.println(Thread.currentThread().getName() + " get!!!"); 
-	       }
-	       catch (InterruptedException e){
-	        return 0;
-	     }
-     
-	downloaded_image  = new ImageUrlTriple(image,urlString,name);
-	num_of_downloads++;
+	downloaded_image  = new ImageUrlTriple(image,url,urlString,name);
 
-	if (num_of_downloads == app_.maxDownloads()){
-	    stopDownload = true;
-            System.out.println("num_of_downloads "+num_of_downloads);
-
-	}	
-	//System.out.println("num_of_downloads "+num_of_downloads +" ");
 	notify();
        
 	return num_of_downloads ;
     }
-
+ 
+ 
     /** Remove the image from the specified position in the array of downloaded images
      *  @return an ImageUrlTriple containing the image, url and image name */
@@ -125,5 +125,5 @@
 	if (stopDownload)  return null;   
 
-	while (downloaded_image == null && !stopDownload){
+	while (downloaded_image == null){
 	    System.out.println(Thread.currentThread().getName() + " wait to get Collage image...");
 	    try{
@@ -131,14 +131,29 @@
 	    }
 	    catch(InterruptedException e){
+		//e.printStackTrace();
+		downloaded_image = null;
+		notify();
 		return null;
 	    }
 	}
-
-	collage_image = process(downloaded_image);
-	downloaded_image = null;
-       
-        notify();
-	System.out.println(Thread.currentThread().getName() + " get Collage image!!!");
-        return collage_image;
+         
+      	if (tracker_.statusID(num_of_downloads, false) == MediaTracker.COMPLETE){
+	    collage_image = new CollageImage(app_,isJava2_,downloaded_image);
+	    downloaded_image = null; 
+	    num_of_downloads++;
+	    notify();
+	    return collage_image;
+	}
+	else{
+	    if ((tracker_.statusAll(false) & MediaTracker.ERRORED) != 0){
+		//System.out.println(downloaded_image.name_);
+		downloaded_image = null;
+		num_of_downloads++;
+		notify();
+		return null;
+	    }
+	}
+	
+	return null;
 
     }
@@ -148,86 +163,4 @@
     }
 
-    private CollageImage process(ImageUrlTriple iutriple){
-            Image image     = iutriple.image();
-	    String from_url = iutriple.url();
-	    String img_name = iutriple.name();
  
-	    CollageImage collage_image = new CollageImage(image,from_url,img_name);
-
-	    image = collage_image.image_;
-	    // images x and y dimensions
-	    int image_x_dim = image.getWidth(app_);
-	    int image_y_dim = image.getHeight(app_);
-
-	    if ((image_x_dim>0) && (image_y_dim>0))
-	    {
-		collage_image.setDimensions(image_x_dim,image_y_dim);
-		
-		// places and sizes the image
-		MyAffineTransform af = new MyAffineTransform(image_x_dim,image_y_dim);
-		
-		// sets location & size of collage image
-		collage_image.setAffineTransform(af, isJava2_);
-		
-		 if (isJava2_ ) {
-		    collage_image.image_ 
-			= restoreAlpha(collage_image.image_, 0, 0, 
-				       collage_image.image_x_dim_, collage_image.image_y_dim_); 
-		    
-		}
-			
-			
-	    }
-	 
-	    collage_image.fresh = false;
-	    return collage_image;
-    }
-
-  /** Resets the alpha channel of an image so that it appears solid
-     *
-     *  @param img the image to restore
-     *  @param x the x co-ordinate of the image
-     *  @param y the y co-ordinate of the image
-     *  @param w the width of the image
-     *  @param h the height of the image */
-    public Image restoreAlpha(Image img, int x, int y, int w, int h) {
-      
-	// declare an array to hold the pixels
-	int[] pixels = new int[w * h];
-
-	// get the pixels of the image into the pixels array
-	PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
-
-	try {
-	    System.err.println("  grab pixels....");
-	    pg.grabPixels();
-	    System.err.println("  got pixels!!!");
-	} catch (InterruptedException e) {
-	    System.err.println("interrupted waiting for pixels!");
-	    return img;
-	}
-
-      
-	// check for any failures
-	if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
-	    System.err.println(" image fetch aborted or errored");
-	    return img;
-	}
-
-	// loop through every pixel in the picture and handle it
-	for (int j = 0; j < h; j++) {
-	    for (int i = 0; i < w; i++) {
-		pixels[j * w + i] |= (255 << 24) & 0xff000000;
-	    }
-	}
-
-	// set the pixels of the whole picture to the pixels array
-	pg.setPixels(0, 0, w, h, pg.getColorModel(), pixels, 0, w);
-
-	// create the new image and return it
-	return( app_.createImage(new MemoryImageSource(w, h, pixels, 0, w)) );
-    
-    }
-
-
 }
Index: tags/gsdl-2_70u-distribution/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/DownloadUrls.java
===================================================================
--- trunk/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/DownloadUrls.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/DownloadUrls.java	(revision 11745)
@@ -65,6 +65,7 @@
     int verbosity_ = 0;
 
-    protected boolean busy_ = false;
-    
+     /** Records all images which have already been examined */
+    Hashtable visited_images_  = null;
+        
     MediaTracker tracker;
 
@@ -99,5 +100,5 @@
 	System.err.println("starting_url_ "  + starting_url +"\n"+
 	                   "href_musthave_ " +  href_musthave +"\n"+
-			   "image_mustnothave_" + image_mustnothave+"\n"+
+			   "image_mustnothave_ " + image_mustnothave+"\n"+
 			   "image_ignore_ "+  image_ignore+"\n"+
 			   "image_type_ "+ image_type+"\n"+
@@ -110,9 +111,5 @@
     }
 
-      public boolean getStatus(){
-	return busy_;
-
-    } 
-
+  
     /** Determines whether or not a url has already been examined
      *
@@ -128,5 +125,5 @@
 	 }
 
-	// if the url has been visited before, return true
+      	// if the url has been visited before, return true
 	if (visited_url_.containsKey(url_string))
 	{
@@ -142,4 +139,48 @@
 	return false;
     }
+
+  /** Determines whether or not an images or its screenview has been visited)
+     *  has already been examined
+     *
+     *  @param url_string the url to check
+     *  @param img_name the image to check
+     *  @return true if the url has been visited, false if not */
+    public boolean image_visited(String url_string, String img_name)
+    {
+	String hash_dir = url_string.substring(0,url_string.lastIndexOf("/"));  
+    
+ 	if ( visited_images_.containsKey(hash_dir)){
+	    Hashtable hashed_images = (Hashtable)visited_images_.get(hash_dir);   
+	   
+            if (img_name.startsWith("screenview")){
+		return true;
+	    }
+
+	    if (hashed_images.containsKey(img_name)){
+		return true;
+	    }
+         
+            Enumeration enu = hashed_images.keys();
+            for(;enu.hasMoreElements();){
+		String name = (String)enu.nextElement();
+		if(name.startsWith("screenview")){
+		    return true;
+		}
+	    }
+    
+            hashed_images.put(img_name,"visited");           
+	}
+	else{
+	    Hashtable hashed_images = new Hashtable();
+	    hashed_images.put(img_name,"visited");
+	    visited_images_.put(hash_dir,hashed_images);	    
+	}
+	     
+	return false;
+    }
+
+   
+
+
 
     /** Restricts the type of images that can be included in the collage
@@ -325,6 +366,8 @@
 	    // get the image from the url
 	    if (verbosity_>=2) {
-		//System.err.println("  ****Downloading image URL: " + url.toString());
-	    }
+		System.err.println("  Downloading image URL: " + url.toString());
+	    }
+            
+           if (image_visited(url.toString(),img_name)) return;
 
 	   int size = download_images_.downloadImage(tracker,url, from_url, img_name);
@@ -354,5 +397,5 @@
     public void rec_add_images(String new_url, int depth)
     {
-
+   
 	if (already_visited(new_url)) return;
 
@@ -377,5 +420,6 @@
 	    // get all the <code><img src=</code> links into a vector
 	    Vector src_links = curl.getSrcLinks();
-	    
+
+        	    
 	    if (verbosity_ >= 2) {
 		System.err.println("  Got src links... there are " + src_links.size() + " of them.");
@@ -386,5 +430,5 @@
 		URL url = (URL)src_links.get(i);
 		String url_string  = url.toString();
-                
+            
 		//System.err.println(" source links " + i + " ["  + url_string +"]");
 
@@ -440,16 +484,16 @@
 	    for (int i = 0; i < href_links.size(); i++) 
 		{
+           
 		    URL url = (URL)href_links.get(i);
 		    String url_string  = url.toString();
-
-		    //System.err.println(" href links " + i + "["  + url_string +"]");
-                    
+		    //System.err.println(" href links " + i + "["  + url_string +"]");      
 
 		    if (image_file_extension(url_string))
 			{
-		                              
+			                      
 			    if (filter_image(url_string))
 
 				{
+				 					    
 				    img_name = url_string.substring(url_string.lastIndexOf("/") + 1, url_string.length());
 
@@ -471,4 +515,5 @@
 			    if (filter_href(url_string,new_url,depth))
 				{
+		
 				    rec_add_images(url_string,depth+1);
 				    
@@ -493,8 +538,7 @@
     public void externalLinks() {
 	external_links_ = null;
-
 	try {
 
-	    if (starting_url_.indexOf(document_root_) >= 0 ){ 
+	    if (starting_url_ == null || (document_root_ != null && starting_url_.indexOf(document_root_) >= 0) ){ 
 		return;
 	    }
@@ -510,5 +554,5 @@
 	    // split the line of the space, first part is the image, second part the link
 	    while (l != null) {
-
+	
 		String tmp1 = new String();
 		String tmp2 = new String();
@@ -523,4 +567,5 @@
 		    
 		    if (tmp2 != null) {
+			
 			external_links_.put(tmp1, tmp2);
 			//System.err.println(tmp1 + " " + tmp2);
@@ -543,5 +588,6 @@
 	System.err.println("Starting download thread.");
 	visited_url_ = new Hashtable();
-	
+	visited_images_ = new Hashtable();
+
        	rec_add_images(starting_url_,1);
 	download_images_.stopDownload();
Index: tags/gsdl-2_70u-distribution/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/GsdlCollageApplet.java
===================================================================
--- trunk/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/GsdlCollageApplet.java	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/src/java/org/nzdl/gsdl/GsdlCollageApplet/GsdlCollageApplet.java	(revision 11745)
@@ -57,5 +57,5 @@
 
     /** Time lapse between repainting of the applet */
-    protected int refreshDelay_ = 1500;
+    protected int refreshDelay_ = 2000;
     
     /** Stores an image and url pair and provides associated methods */
@@ -123,8 +123,9 @@
 	}
 
+
 	if (verbosity_ >= 4) { 
 	    System.err.println("Got parameters.");
 	}
-	verbosity_=0;
+
 	if (caption_param != null && !caption_param.startsWith("_")) {
 	    caption_ = caption_param;
@@ -238,5 +239,4 @@
 
  
-
     /** Goes to the url associated with the image that is clicked on screen<br>
      *  Displays the url containing the image in a new window */
@@ -251,8 +251,18 @@
 	    try {
 		// displays the associated url in a new window
-		URL from_url = new URL(cimage.from_url_  + "#" + cimage.name_);
+                URL from_url = null;		
+		
+		java.util.regex.Pattern p = java.util.regex.Pattern.compile("cl=CL\\d(\\.\\d)*\\s");
+		java.util.regex.Matcher m = p.matcher(cimage.from_url_.trim()+" ");
+
+                if (m.find() ){
+		    from_url = cimage.url_;
+		}
+		else{
+		    from_url =  new URL(cimage.from_url_  + "#" + cimage.name_);
+		}
 		getAppletContext().showDocument(from_url,"gsdlDoc");
 	    } 
-	    catch (MalformedURLException e) {
+	    catch (MalformedURLException e) { 
 		e.printStackTrace();
 	    }
@@ -266,4 +276,8 @@
     {
 	
+	download_thread_.start();	
+
+	display_thread_.start();
+
          paint =  new Thread(new Runnable(){
                 public void run() {
@@ -276,5 +290,5 @@
 			   repaint();
 			    
-			    Thread.sleep(1000);
+			    Thread.sleep(2000);
 			    curr_thread = Thread.currentThread();
 			}
@@ -282,5 +296,5 @@
 	    
 		    } catch (Exception e) {
-			e.printStackTrace();
+			
 		    }
 		}
@@ -290,10 +304,5 @@
 
 	    paint.start();
-
-
-        download_thread_.start();	
-
-	display_thread_.start();
-
+   
     }
 
Index: tags/gsdl-2_70u-distribution/gsdl/src/recpt/historydb.cpp
===================================================================
--- trunk/gsdl/src/recpt/historydb.cpp	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/src/recpt/historydb.cpp	(revision 11745)
@@ -31,4 +31,5 @@
 
 #define MAX_RECORDS 20
+#define HIST_SEP ';'
 
 // returns true on success (in which case historyinfo will contain
@@ -151,5 +152,5 @@
       if (entry==key) {
 	here=it+1;
-      	it=findchar(here, end, '&');
+      	it=findchar(here, end, HIST_SEP);
 	value = substr(here, it);
 	return;
@@ -168,5 +169,5 @@
   text_tarray values;
 
-  splitchar(here, end, '&', values);
+  splitchar(here, end, HIST_SEP, values);
   
   text_tarray::iterator start = values.begin();
@@ -231,5 +232,4 @@
   infodbclass argsinfo;
   parse_saved_args(historyargs, argsinfo);
-  
   text_t collect = argsinfo["c"];
   if (collect=="") {
@@ -237,5 +237,5 @@
     return;
   }
-
+ 
   if (collect != args["c"]) {
     userinfo += collect+", ";
@@ -260,46 +260,42 @@
 
   if (argsinfo["b"] != args["b"] || argsinfo["t"] != args["t"]) {
-    text_t mode;
     if (argsinfo["b"]=="0") { // simple mode
       if (argsinfo["t"]=="0") {
-	mode = " _texthallwords_";
-      }
-      else { // t=1
-	mode = " _texthsomewords_";
+	userinfo += " _texthallwords_, ";
+      }
+      else if (argsinfo["t"]=="1"){
+	userinfo += " _texthsomewords_, ";
       }
       
     } 
-    else { // advanced mode
+    else if (argsinfo["b"] == "1") { // advanced mode
       if (argsinfo["t"]=="0") {
-	mode = " _texthboolean_";
-      }
-      else {
-	mode = " _texthranked_";
-      }
-    }
-    userinfo += mode+", ";
-  }
-  
-  if (argsinfo["k"] != args["k"]) {
+	userinfo += " _texthboolean_, ";
+      }
+      else if (argsinfo["t"]=="1") {
+	userinfo += " _texthranked_, ";
+      }
+    }
+  }
+  
+  if (argsinfo["k"] != "" && argsinfo["k"] != args["k"]) {
     text_t options;
-    if (argsinfo["k"]=="0") {
-      options = " _texthcaseoff_";
-    }
-    else {
-      options = " _texthcaseon_";
-    }
-    userinfo += options+", ";
-  }
-
-  if (argsinfo["s"] != args["s"]) {
-    text_t stem;
+    // the text translations are the wrong way round
+    if (argsinfo["k"]=="1") {
+      userinfo += " _texthcaseoff_, ";
+    }
+    else if (argsinfo["k"]=="0") {
+      userinfo += " _texthcaseon_, ";
+    }
+  }
+
+  if (argsinfo["s"] != "" && argsinfo["s"] != args["s"]) {
     if (argsinfo["s"]=="0") {
-      stem = " _texthstemoff_";
-    }
-    else {
-      stem = " _texthstemon_";
-    }
-    userinfo += stem+", ";
-  }
-
-}
+      userinfo += " _texthstemoff_, ";
+    }
+    else if (argsinfo["s"]=="1") {
+      userinfo += " _texthstemon_, ";
+    }
+  }
+
+}
Index: tags/gsdl-2_70u-distribution/gsdl/src/recpt/queryaction.cpp
===================================================================
--- trunk/gsdl/src/recpt/queryaction.cpp	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/src/recpt/queryaction.cpp	(revision 11745)
@@ -817,5 +817,4 @@
 
   // defines the following macros
-
   // _searchhistorylist_
 
@@ -1601,17 +1600,17 @@
   }
   query += "c="+args["c"];
-  query += "&amp;h="+args["h"];
-  query += "&amp;t="+args["t"];
-  query += "&amp;b="+args["b"];
-  query += "&amp;j="+args["j"];
-  query += "&amp;n="+args["n"];
-  query += "&amp;s="+args["s"];
-  query += "&amp;k="+args["k"];
-  query += "&amp;g="+args["g"]; 
+  query += ";h="+args["h"];
+  query += ";t="+args["t"];
+  query += ";b="+args["b"];
+  query += ";j="+args["j"];
+  query += ";n="+args["n"];
+  query += ";s="+args["s"];
+  query += ";k="+args["k"];
+  query += ";g="+args["g"]; 
   
   text_t qstring = args["q"];
   //text_t formattedquery =cgi_safe(qstring);
   //query += "&amp;q="+formattedquery;
-  query += "&amp;q="+qstring;
+  query += ";q="+qstring;
   bool display=false;
   int hd = args.getintarg("hd");
Index: tags/gsdl-2_70u-distribution/gsdl/src/w32server/fnord.cpp
===================================================================
--- trunk/gsdl/src/w32server/fnord.cpp	(revision 11574)
+++ tags/gsdl-2_70u-distribution/gsdl/src/w32server/fnord.cpp	(revision 11745)
@@ -135,6 +135,6 @@
 HWND GoButton = NULL;
 HWND Enter = NULL;
-HWND EnterRestricted = NULL;
-HWND InfoRestricted = NULL;
+// HWND EnterRestricted = NULL;
+// HWND InfoRestricted = NULL;
 int init_type = 0;
 int init_done = 0;
@@ -543,21 +543,21 @@
       init_type = 1;
 
-    } else if ((EnterRestricted != NULL) && ((HWND)LParam == EnterRestricted)) {
-      init_done = 1;
-      init_type = 0;
-
-    } else if ((InfoRestricted != NULL) && ((HWND)LParam == InfoRestricted)) {
-      MessageBox (NULL, "The Greenstone system automatically determines whether your computer has\n"
-		  "network software installed or is connected to a network.  It operates correctly\n"
-		  "under any of these conditions.\n\n"
-		  "The restricted version is intended for use when the standard one\n\n"
-		  "   (a) causes an unwanted telephone dialup operation;\n"
-		  "   (b) fails to run because network software is installed, but installed\n"
-		  "         incorrectly.\n\n"
-		  "The restricted version only works with Netscape (not Internet Explorer).\n\n"
-		  "Unless these problems arise, you should always use the standard version\n"
-		  "(press the 'Enter Library' button).\n",
-		  "Greenstone Digital Library Software", 
-		  MB_OK | MB_ICONINFORMATION | MB_APPLMODAL);
+//      } else if ((EnterRestricted != NULL) && ((HWND)LParam == EnterRestricted)) {
+//        init_done = 1;
+//        init_type = 0;
+
+//      } else if ((InfoRestricted != NULL) && ((HWND)LParam == InfoRestricted)) {
+//        MessageBox (NULL, "The Greenstone system automatically determines whether your computer has\n"
+//  		  "network software installed or is connected to a network.  It operates correctly\n"
+//  		  "under any of these conditions.\n\n"
+//  		  "The restricted version is intended for use when the standard one\n\n"
+//  		  "   (a) causes an unwanted telephone dialup operation;\n"
+//  		  "   (b) fails to run because network software is installed, but installed\n"
+//  		  "         incorrectly.\n\n"
+//  		  "The restricted version only works with Netscape (not Internet Explorer).\n\n"
+//  		  "Unless these problems arise, you should always use the standard version\n"
+//  		  "(press the 'Enter Library' button).\n",
+//  		  "Greenstone Digital Library Software", 
+//  		  MB_OK | MB_ICONINFORMATION | MB_APPLMODAL);
 
     } else {
@@ -1007,31 +1007,31 @@
 			 NULL);                // pointer not needed 
     
-    EnterRestricted = CreateWindow("Button",                // predefined class 
-				   "Restricted Version",    // button text 
-				   WS_VISIBLE | WS_CHILD | WS_TABSTOP | BS_PUSHBUTTON,   // styles 
-				   ALTERNATIVEBUTTONX,      // starting x position 
-				   ALTERNATIVEBUTTONY,      // starting y position 
-				   ALTERNATIVEBUTTONWIDTH-(INFOBUTTONWIDTH+SPACERWIDTH),  // button width 
-				   ALTERNATIVEBUTTONHEIGHT, // button height 
-				   MainWindow,              // parent window 
-				   (HMENU)NULL,             // No menu 
-				   Instance, 
-				   NULL);                   // pointer not needed 
-    
-    InfoRestricted = CreateWindow("Button",                // predefined class 
-				  NULL,
-				  WS_VISIBLE | WS_CHILD | WS_TABSTOP | BS_BITMAP,   // styles 
-				  ALTERNATIVEBUTTONWIDTH-INFOBUTTONWIDTH+SPACERWIDTH, // starting x position 
-				  ALTERNATIVEBUTTONY,      // starting y position 
-				  INFOBUTTONWIDTH,         // button width 
-				  ALTERNATIVEBUTTONHEIGHT, // button height 
-				  MainWindow,              // parent window 
-				  (HMENU)NULL,             // No menu 
-				  Instance, 
-				  NULL);                   // pointer not needed 
-    
-    HANDLE i_icon = LoadImage (Instance, MAKEINTRESOURCE(GSDL_ICBMP), IMAGE_BITMAP, 
-			       INFOBUTTONWIDTH-4, ALTERNATIVEBUTTONHEIGHT-4, LR_DEFAULTCOLOR);
-    SendMessage (InfoRestricted, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)i_icon);
+//      EnterRestricted = CreateWindow("Button",                // predefined class 
+//  				   "Restricted Version",    // button text 
+//  				   WS_VISIBLE | WS_CHILD | WS_TABSTOP | BS_PUSHBUTTON,   // styles 
+//  				   ALTERNATIVEBUTTONX,      // starting x position 
+//  				   ALTERNATIVEBUTTONY,      // starting y position 
+//  				   ALTERNATIVEBUTTONWIDTH-(INFOBUTTONWIDTH+SPACERWIDTH),  // button width 
+//  				   ALTERNATIVEBUTTONHEIGHT, // button height 
+//  				   MainWindow,              // parent window 
+//  				   (HMENU)NULL,             // No menu 
+//  				   Instance, 
+//  				   NULL);                   // pointer not needed 
+    
+//      InfoRestricted = CreateWindow("Button",                // predefined class 
+//  				  NULL,
+//  				  WS_VISIBLE | WS_CHILD | WS_TABSTOP | BS_BITMAP,   // styles 
+//  				  ALTERNATIVEBUTTONWIDTH-INFOBUTTONWIDTH+SPACERWIDTH, // starting x position 
+//  				  ALTERNATIVEBUTTONY,      // starting y position 
+//  				  INFOBUTTONWIDTH,         // button width 
+//  				  ALTERNATIVEBUTTONHEIGHT, // button height 
+//  				  MainWindow,              // parent window 
+//  				  (HMENU)NULL,             // No menu 
+//  				  Instance, 
+//  				  NULL);                   // pointer not needed 
+    
+//      HANDLE i_icon = LoadImage (Instance, MAKEINTRESOURCE(GSDL_ICBMP), IMAGE_BITMAP, 
+//  			       INFOBUTTONWIDTH-4, ALTERNATIVEBUTTONHEIGHT-4, LR_DEFAULTCOLOR);
+//      SendMessage (InfoRestricted, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)i_icon);
     
     SetFocus (Enter);
@@ -1055,6 +1055,6 @@
     // don't want these buttons anymore
     DestroyWindow (Enter);
-    DestroyWindow (EnterRestricted);
-    DestroyWindow (InfoRestricted);
+    // DestroyWindow (EnterRestricted);
+    // DestroyWindow (InfoRestricted);
     
     enterstring = strnothing;
