diff --git a/htroot/opensearchdescription.xml b/htroot/opensearchdescription.xml
index fcad1f48a..9c0743211 100644
--- a/htroot/opensearchdescription.xml
+++ b/htroot/opensearchdescription.xml
@@ -18,7 +18,8 @@
   ::
   <Url type="text/html" method="GET" template="http://#[thisaddress]#/compare_yacy.html?verify=true&amp;resource=global&amp;nav=all&amp;query={searchTerms}" />
   #(/compareyacy)#
-  <Url type="application/x-suggestions+json" template="http://#[thisaddress]#/suggest?query={searchTerms}"/>
+  <Url type="application/x-suggestions+json" template="http://#[thisaddress]#/suggest.json?query={searchTerms}"/>
+  <Url type="application/x-suggestions+xml" template="http://#[thisaddress]#/suggest.xml?query={searchTerms}"/>
   <!-- syntax according to http://www.loc.gov/standards/sru/. Set verify=true to get snippets in the search results -->
   <Developer>See http://developer.berlios.de/projects/yacy/</Developer>
   <Query role="example" searchTerms="yacy+open+source" />
diff --git a/htroot/suggest.java b/htroot/suggest.java
index a07b69765..8e25d205e 100644
--- a/htroot/suggest.java
+++ b/htroot/suggest.java
@@ -20,7 +20,9 @@
 
 import java.util.Iterator;
 
+import net.yacy.cora.protocol.HeaderFramework;
 import net.yacy.cora.protocol.RequestHeader;
+import net.yacy.cora.protocol.ResponseHeader;
 
 import de.anomic.data.DidYouMean;
 import de.anomic.search.Segment;
@@ -28,12 +30,20 @@ import de.anomic.search.Segments;
 import de.anomic.search.Switchboard;
 import de.anomic.server.serverObjects;
 import de.anomic.server.serverSwitch;
+import de.anomic.server.servletProperties;
 
 /**
+ * for json format:
  * implementation of the opensearch suggestion extension, see
  * http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.1
  * or
  * https://wiki.mozilla.org/Search_Service/Suggestions
+ * 
+ * for xml format:
+ * see Microsoft Search Suggestion Format
+ * http://msdn.microsoft.com/en-us/library/cc848863%28VS.85%29.aspx
+ * and
+ * http://msdn.microsoft.com/en-us/library/cc848862%28v=VS.85%29.aspx
  */
 public class suggest {
     
@@ -41,7 +51,11 @@ public class suggest {
     
     public static serverObjects respond(final RequestHeader header, final serverObjects post, final serverSwitch env) {
         final Switchboard sb = (Switchboard) env;
-        final serverObjects prop = new serverObjects();
+        final servletProperties prop = new servletProperties();
+
+        final String ext = header.get("EXT", "");
+        final boolean json = ext.equals("json");
+        final boolean xml = ext.equals("xml");
         
         // get query
         String originalquerystring = (post == null) ? "" : post.get("query", post.get("q", "")).trim();
@@ -63,17 +77,29 @@ public class suggest {
         
         DidYouMean didYouMean = new DidYouMean(indexSegment.termIndex(), querystring);
         Iterator<String> meanIt = didYouMean.getSuggestions(timeout, count).iterator();
-        int meanCount = 0;
+        int c = 0;
         String suggestion;
-        StringBuilder suggestions = new StringBuilder(120);
-        while (meanCount < meanMax && meanIt.hasNext()) {
+        //[#[query]#,[#{suggestions}##[text]##(eol)#,::#(/eol)##{/suggestions}#]]
+        while (c < meanMax && meanIt.hasNext()) {
             suggestion = meanIt.next();
-            suggestions.append(',').append('"').append(suggestion).append('"');
-            meanCount++;
+            if (json) prop.putJSON("suggestions_" + c + "_text", suggestion);
+            else if (xml) prop.putXML("suggestions_" + c + "_text", suggestion);
+            else prop.putHTML("suggestions_" + c + "_text", suggestion);
+            prop.put("suggestions_" + c + "_eol", 0);
+            c++;
         }
+        if (c > 0) prop.put("suggestions_" + (c - 1) + "_eol", 1);
+        prop.put("suggestions", c);
+        if (json) prop.putJSON("query", originalquerystring);
+        else if (xml) prop.putXML("query", originalquerystring);
+        else prop.putHTML("query", originalquerystring);
 
-        prop.put("query", '"' + originalquerystring + '"');
-        prop.put("suggestions", suggestions.length() > 0 ? suggestions.substring(1) : "");
+        // Adding CORS Access header for xml output
+        if (xml) {
+            final ResponseHeader outgoingHeader = new ResponseHeader();
+            outgoingHeader.addHeader(HeaderFramework.CORS_ALLOW_ORIGIN, "*");
+            prop.setOutgoingHeader(outgoingHeader);
+        }
         
         // return rewrite properties
         return prop;
diff --git a/htroot/suggest.json b/htroot/suggest.json
index 70baa749c..fab9e4743 100644
--- a/htroot/suggest.json
+++ b/htroot/suggest.json
@@ -1 +1 @@
-[#[query]#,[#[suggestions]#]]
+["#[query]#",[#{suggestions}#"#[text]#"#(eol)#,::#(/eol)##{/suggestions}#]]
diff --git a/htroot/suggest.xml b/htroot/suggest.xml
new file mode 100644
index 000000000..2ac01fbd7
--- /dev/null
+++ b/htroot/suggest.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<SearchSuggestion xmlns ="http://schemas.microsoft.com/Search/2008/suggestions">
+<Query>#[query]#</Query>
+<Section>
+#{suggestions}#
+  <Item>
+    <Text>#[text]#</Text>
+  </Item>
+#{/suggestions}#
+</Section>
+</SearchSuggestion>