fix test failures
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/core/model/DefaultSiteParser.java b/update/org.eclipse.update.core/src/org/eclipse/update/core/model/DefaultSiteParser.java
index f9e1286..2530cf4 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/core/model/DefaultSiteParser.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/core/model/DefaultSiteParser.java
@@ -253,8 +253,17 @@
 				stateStack.pop();

 				text = ""; //$NON-NLS-1$

 				while (objectStack.peek() instanceof String) {

-					text = (String) objectStack.pop() + text;

+					// add text, preserving at most one space between text fragments

+					String newText = (String) objectStack.pop();

+					if (trailingSpace(newText) && !leadingSpace(text)) {

+						text = " " + text;

+					}

+					text = newText.trim() + text;

+					if (leadingSpace(newText) && !leadingSpace(text)) {

+						text = " " + text;

+					}

 				}

+				text = text.trim();

 

 				info = (URLEntryModel) objectStack.pop();

 				if (text != null)

@@ -275,8 +284,17 @@
 				stateStack.pop();

 				text = ""; //$NON-NLS-1$

 				while (objectStack.peek() instanceof String) {

-					text = (String) objectStack.pop() + text;

+					// add text, preserving at most one space between text fragments

+					String newText = (String) objectStack.pop();

+					if (trailingSpace(newText) && !leadingSpace(text)) {

+						text = " " + text;

+					}

+					text = newText.trim() + text;

+					if (leadingSpace(newText) && !leadingSpace(text)) {

+						text = " " + text;

+					}

 				}

+				text = text.trim();

 

 				info = (URLEntryModel) objectStack.pop();

 				if (text != null)

@@ -307,7 +325,7 @@
 	 * @since 2.0

 	 */

 	public void characters(char[] ch, int start, int length) {

-		String text = new String(ch, start, length).trim();

+		String text = new String(ch, start, length);

 		//only push if description

 		int state = ((Integer) stateStack.peek()).intValue();

 		if (state == STATE_DESCRIPTION_SITE || state == STATE_DESCRIPTION_CATEGORY_DEF)

@@ -708,4 +726,16 @@
 				return Policy.bind("DefaultSiteParser.UnknownState"); //$NON-NLS-1$

 		}

 	}

+	private boolean leadingSpace(String str) {

+		if (str.length() <= 0) {

+			return false;

+		}

+		return Character.isWhitespace(str.charAt(0));

+	}

+	private boolean trailingSpace(String str) {

+		if (str.length() <= 0) {

+			return false;

+		}

+		return Character.isWhitespace(str.charAt(str.length() - 1));

+	}

 }

diff --git a/update/org.eclipse.update.tests.core/src/org/eclipse/update/tests/parser/TestSiteParse.java b/update/org.eclipse.update.tests.core/src/org/eclipse/update/tests/parser/TestSiteParse.java
index bc00473..231b9a6 100644
--- a/update/org.eclipse.update.tests.core/src/org/eclipse/update/tests/parser/TestSiteParse.java
+++ b/update/org.eclipse.update.tests.core/src/org/eclipse/update/tests/parser/TestSiteParse.java
@@ -94,7 +94,7 @@
 		assertTrue("Wrong number of categories", categories.length == 1);

 		assertTrue("Wrong number of archives", archives.length == 2);

 

-		String valideString = "This category contains all of the<currently>available versions of Red Dot feature.<greeting>Hello, world!</greeting>";

+		String valideString = "This category contains all of the <currently> available versions of Red Dot feature. <greeting>Hello, world!</greeting>";

 		assertEquals(valideString, remoteSite.getCategoryModels()[0].getDescriptionModel().getAnnotation());

 

 		String path = new URL(SOURCE_FILE_SITE + "parsertests/").getFile();

@@ -120,7 +120,7 @@
 		assertTrue("Wrong number of categories", categories.length == 1);

 		assertTrue("Wrong number of archives", archives.length == 2);

 

-		String valideString = "This category contains all of the<currently>available versions of Red Dot feature.";

+		String valideString = "This category contains all of the <currently> available versions of Red Dot feature.";

 		assertEquals(valideString, remoteSite.getCategoryModels()[0].getDescriptionModel().getAnnotation());

 

 		String path = new URL(SOURCE_FILE_SITE + "parsertests/").getFile();