Index: /trunk/gli/src/org/greenstone/gatherer/collection/CollectionConfiguration.java
===================================================================
--- /trunk/gli/src/org/greenstone/gatherer/collection/CollectionConfiguration.java	(revision 5676)
+++ /trunk/gli/src/org/greenstone/gatherer/collection/CollectionConfiguration.java	(revision 5677)
@@ -6,4 +6,5 @@
 import org.greenstone.gatherer.msm.MSMUtils;
 import org.greenstone.gatherer.util.Codec;
+import org.greenstone.gatherer.util.StaticStrings;
 import org.greenstone.gatherer.util.Utility;
 import org.w3c.dom.*;
@@ -72,21 +73,38 @@
 				}
 				else if(temp.equalsIgnoreCase("collectionextra")) {
-				    temp = tokenizer.nextToken();
-				    ///ystem.err.println("Read: " + temp);
-				    if(temp.startsWith("[") && temp.endsWith("]")) {
-					String language = temp.substring(temp.indexOf("=") + 1, temp.length() - 1);
-					///ystem.err.println("Try to match " + language + " to " + Gatherer.dictionary.getLanguage());
-					if(description == null || language.equalsIgnoreCase(Gatherer.dictionary.getLanguage())) {
-					    description = Utility.decodeGreenstone(tokenizer.nextToken());
-					    ///ystem.err.println("Found language match, or first match: " + description);
-					}
-				    }
-				    else if(description == null) {
-					description = Codec.transform(temp, Codec.GREENSTONE_TO_TEXT);
-					///ystem.err.println("Found first match: " + description);
-				    }
-				    if(description != null && description.startsWith("\"") && description.endsWith("\"")) {
-					description = description.substring(1, description.length() - 1);
-				    }
+				   // Normal case
+				   temp = tokenizer.nextToken();
+				   ///ystem.err.println("Read: " + temp);
+				      if(temp.startsWith("[") && temp.endsWith("]")) {
+					 String language = temp.substring(temp.indexOf("=") + 1, temp.length() - 1);
+					 ///ystem.err.println("Try to match " + language + " to " + Gatherer.dictionary.getLanguage());
+					    if(description == null || language.equalsIgnoreCase(Gatherer.dictionary.getLanguage())) {
+					       description = Utility.decodeGreenstone(tokenizer.nextToken());
+					       ///ystem.err.println("Found language match, or first match: " + description);
+						  }
+				      }
+				      else if(description == null){
+					 // Some of the collections floating around have collection extras which contain normal newlines, and so their initial description starts with " (the Command Tokenizer hasn't found a closing speech mark). This will cause an error message to be displayed for the collection. If we have read a collectionextra tag, but we have run out of tokens then we do a sneaky and start reading lines until we encounter a closing "
+					 if(temp.startsWith(StaticStrings.SPEECH_CHARACTER) && (!temp.endsWith(StaticStrings.SPEECH_CHARACTER) || temp.length() ==1 )) {
+					    ///ystem.err.println("Encountered a strange Collection Description. Doing my best to parse a sensible text block!");
+					    StringBuffer description_raw = new StringBuffer("");
+					    while(description_raw.indexOf(StaticStrings.SPEECH_CHARACTER) == -1) {
+					       String next_line = br.readLine();
+					       if(next_line != null) {
+						  description_raw.append(next_line);
+						  description_raw.append(StaticStrings.NEW_LINE_CHAR);
+					       }
+					       next_line = null;
+					    }
+					    description = description_raw.substring(0, description_raw.lastIndexOf(StaticStrings.SPEECH_CHARACTER));
+					    description_raw = null;
+					 }
+					 else {
+					    description = Codec.transform(temp, Codec.GREENSTONE_TO_TEXT);
+					 }
+				      }
+				      if(description != null && description.startsWith(StaticStrings.SPEECH_CHARACTER) && description.endsWith(StaticStrings.SPEECH_CHARACTER)) {
+					 description = description.substring(1, description.length() - 1);
+				      }  
 				}
 			    }
@@ -163,5 +181,5 @@
 
     public String getName() {
-	String result = "Error";
+	String result = StaticStrings.ERROR_STR;
 	if(name_element != null) {
 	    result = MSMUtils.getValue(name_element);
