diff --git a/src/fr/inrialpes/exmo/align/service/HTMLAServProfile.java b/src/fr/inrialpes/exmo/align/service/HTMLAServProfile.java
index ba185001f68e5ba280da34dfbc3563f07dc290fd..47b333cf9ca4a84be68216e46b5ca15efcfed98e 100644
--- a/src/fr/inrialpes/exmo/align/service/HTMLAServProfile.java
+++ b/src/fr/inrialpes/exmo/align/service/HTMLAServProfile.java
@@ -1,7 +1,7 @@
 /*
  * $Id$
  *
- * Copyright (C) INRIA Rhône-Alpes, 2006-2007.
+ * Copyright (C) INRIA Rh?e-Alpes, 2006-2007.
  * Copyright (C) 2001,2005,2006 Jarno Elonen (elonen@iki.fi, http://iki.fi/elonen/)
  *
  * This code is based on NanoHTTPD from Jarno Elonen
@@ -52,6 +52,7 @@ import org.semanticweb.owl.align.Alignment;
 import org.semanticweb.owl.align.Parameters;
 
 import java.io.File;
+import java.io.FileReader;
 import java.io.IOException;
 import java.io.FileInputStream;
 import java.io.PrintWriter;
@@ -114,6 +115,7 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
     public static final String
 	MIME_PLAINTEXT = "text/plain",
 	MIME_HTML = "text/html",
+	MIME_XML = "text/xml",
 	MIME_DEFAULT_BINARY = "application/octet-stream";
 
     public static final int MAX_FILE_SIZE = 10000;
@@ -146,6 +148,7 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
 	if ( params.getParameter( "wsdl" ) != null ){
 	    wsmanager = new WSAServProfile();
 	}
+	if(wsmanager != null) wsmanager.init(params, manager);
 	myId = "LocalHTMLInterface";
 	serverId = "dummy";
 	localId = 0;
@@ -216,7 +219,7 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
 	    start = uri.length();
 	}
 	if ( oper.equals( "aserv" ) ){
-	    if ( wsmanager != null ) {
+		if ( wsmanager != null ) {
 		return new Response( HTTP_OK, MIME_HTML, wsmanager.protocolAnswer( uri, uri.substring(start), header, params ) );
 	    } else {
 		// This is not correct: I shoud return an error
@@ -226,6 +229,8 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
 	    return adminAnswer( uri, uri.substring(start), header, params );
 	} else if ( oper.equals( "html" ) ){
 	    return htmlAnswer( uri, uri.substring(start), header, params );
+	} else if ( oper.equals( "wsdl" ) ){
+		return wsdlAnswer(uri, uri.substring(start), header, params);
 	} else {
 	    //return serveFile( uri, header, new File("."), true );
 	    return new Response( HTTP_OK, MIME_HTML, "<html><head></head><body>"+about()+"</body></html>" );
@@ -254,23 +259,25 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
 	    }
 	    msg += "</ul>";
 	} else if ( perf.equals("listmethods") ){
-	    msg = "<h1>Embedded classes</h1>\n<h2>Methods</h2><ul compact=\"1\">";
+	    msg = "<h1>Available methods</h1><ul compact=\"1\">";
 	    for( Iterator it = manager.listmethods().iterator(); it.hasNext(); ) {
 		msg += "<li>"+it.next()+"</li>";
 	    }
 	    msg += "</ul>";
-	    msg += "<h2>Renderers</h2><ul compact=\"1\">";
+	} else if ( perf.equals("listrenderers") ) {
+	    msg = "<h1>Available renderers</h1><ul compact=\"1\">";
 	    for( Iterator it = manager.listrenderers().iterator(); it.hasNext(); ) {
 		msg += "<li>"+it.next()+"</li>";
 	    }
 	    msg += "</ul>";
-	    msg += "<h2>Services</h2><ul compact=\"1\">";
+	} else if ( perf.equals("listservices") ) {
+	    msg = "<h1>Available services</h1><ul compact=\"1\">";
 	    for( Iterator it = manager.listservices().iterator(); it.hasNext(); ) {
 		msg += "<li>"+it.next()+"</li>";
 	    }
 	    msg += "</ul>";
 	} else if ( perf.equals("prmsqlquery") ){
-	    msg = "<h1>SQL query</h1><form action=\"sqlquery\">Query:<br /><textarea name=\"query\" rows=\"20\" cols=\"80\">SELECT \nFROM \nWHERE </textarea> (sql)<br /><small>An SQL SELECT query</small><br /><input type=\"submit\" value=\"Query\"/></form>";
+	    msg = "<h1>SQL query</h1><form action=\"sqlquery\">Query: <input type=\"textarea\" name=\"query\" rows=\"8\"size=\"60\"/> (sql)<br /><small>An SQL SELECT query</small><br /><input type=\"submit\" value=\"Query\"/></form>";
 	} else if ( perf.equals("sqlquery") ){
 	    String answer = manager.query( (String)params.getParameter("query") );
 	    msg = "<pre>"+answer+"</pre>";
@@ -294,7 +301,9 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
 	} else if ( perf.equals("") ) {
 	    msg = "<h1>Alignment server administration</h1><ul compact=\"1\">";
 	    msg += "<li><form action=\"listalignments\"><input type=\"submit\" value=\"Available alignments\"/></form></li>";
-	    msg += "<li><form action=\"listmethods\"><input type=\"submit\" value=\"Embedded classes\"/></form></li>";
+	    msg += "<li><form action=\"listmethods\"><input type=\"submit\" value=\"Available methods\"/></form></li>";
+	    msg += "<li><form action=\"listrenderers\"><input type=\"submit\" value=\"Available renderers\"/></form></li>";
+	    msg += "<li><form action=\"listservices\"><input type=\"submit\" value=\"Available services\"/></form></li>";
 	    msg += "<li><form action=\"prmsqlquery\"><input type=\"submit\" value=\"SQL Query\"/></form></li>";
 	    msg += "<li><form action=\"prmflush\"><input type=\"submit\" value=\"Flush caches\"/></form></li>";
 	    msg += "<li><form action=\"prmreset\"><input type=\"submit\" value=\"Reset server\"/></form></li>";
@@ -331,15 +340,15 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
 	} else if ( perf.equals("store") ) {
 	    // here should be done the switch between store and load/store
 	    String id = (String)params.getParameter("id");
-	    //String url = (String)params.getParameter("url");
-	    //if ( url != null && !url.equals("") ) { // Load the URL
-	    //Message answer = manager.load( new Message(newId(),(Message)null,myId,serverId,"", params) );
-	    //if ( answer instanceof ErrorMsg ) {
-	    //    msg = testErrorMessages( answer );
-	    //} else {
-	    //    id = answer.getContent();
-	    //}
-	    //}
+	    String url = (String)params.getParameter("url");
+	    if ( url != null && !url.equals("") ) { // Load the URL
+		Message answer = manager.load( new Message(newId(),(Message)null,myId,serverId,"", params) );
+		if ( answer instanceof ErrorMsg ) {
+		    msg = testErrorMessages( answer );
+		} else {
+		    id = answer.getContent();
+		}
+	    }
 	    if ( id != null ){ // Store it
 		Message answer = manager.store( new Message(newId(),(Message)null,myId,serverId,id, params) );
 		if ( answer instanceof ErrorMsg ) {
@@ -347,6 +356,7 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
 		} else {
 		    msg = "<h1>Alignment stored</h1>";
 		    msg += displayAnswer( answer );
+			System.out.println("msg ==== " + msg);
 		}
 	    }
 	} else if ( perf.equals("prmcut") ) {
@@ -426,26 +436,6 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
 		return new Response( HTTP_OK, MIME_HTML, answer.getContent() );
 	    }
 	    // Metadata not done yet
-	} else if ( perf.equals("prmtranslate") ) {
-	    msg = "<h1>Translate query</h1><form action=\"translate\">";
-	    msg += "Alignment id:  <select name=\"id\">";
-	    for( Enumeration e = manager.alignments(); e.hasMoreElements(); ){
-		String id = ((Alignment)e.nextElement()).getExtension("id");
-		msg += "<option value=\""+id+"\">"+id+"</option>";
-	    }
-	    msg += "</select><br />";
-	    msg += "SPARQL query:<br /> <textarea name=\"query\" rows=\"20\" cols=\"80\">PREFIX foaf: <http://xmlns.com/foaf/0.1/>\nSELECT *\nFROM <>\nWHERE {\n\n}</textarea> (SPARQL)<br /><small>A SPARQL query (PREFIX prefix: &lt;uri&gt; SELECT variables FROM &lt;url&gt; WHERE { triples })</small><br /><input type=\"submit\" value=\"Translate\"/></form>";
-	} else if ( perf.equals("translate") ) {
-	    Message answer = manager.translate( new Message(newId(),(Message)null,myId,serverId,"", params) );
-	    if ( answer instanceof ErrorMsg ) {
-		msg = testErrorMessages( answer );
-	    } else {
-		msg = "<h1>Message translation</h1>";
-		msg += "<h2>Initial message</h2><pre>"+((String)params.getParameter("query")).replaceAll("&", "&amp;").replaceAll("<", "&lt;")+"</pre>";
-		msg += "<h2>Translated message</h2><pre>";
-		msg += answer.HTMLString().replaceAll("&", "&amp;").replaceAll("<", "&lt;");
-		msg += "</pre>";
-	    }
 	} else if ( perf.equals("prmmetadata") ) {
 	    msg = "<h1>Retrieve alignment metadata</h1><form action=\"metadata\">";
 	    msg += "Alignment id:  <select name=\"id\">";
@@ -473,7 +463,7 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
 	    msg += "Alignment file: <form enctype=\"multipart/form-data\" action=\"loadfile\" method=\"POST\">";
 	    msg += " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\""+MAX_FILE_SIZE+"\"/>";
 	    msg += "<input name=\"content\" type=\"file\" size=\"35\">";
-	    msg += "<br /><small>NOTE: Max file size is "+(MAX_FILE_SIZE/1024)+"KB</small><br />";
+	    msg += "<br /><small>NOTE: Max file size is"+(MAX_FILE_SIZE/1024)+"KB</small><br />";
 	    msg += " <input type=\"submit\" Value=\"Upload\">";
 	    msg +=  " </form>";
 	} else if ( perf.equals("load") ) {
@@ -494,15 +484,17 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
 		msg = "<h1>Alignment loaded</h1>";
 		msg += displayAnswer( answer );
 	    }
+	} else if ( perf.equals("prmtranslate") ) {
+	} else if ( perf.equals("translate") ) {
+	    // translate( mess )
 	} else if ( perf.equals("") ) {
-	    msg = "<h1>Alignment Server commands</h1><ul compact=\"1\">";
+	    msg = "<h1>Available commands</h1><ul compact=\"1\">";
 	    msg += "<li><form action=\"prmfind\"><input type=\"submit\" value=\"Find an alignment for ontologies\"/></form></li>";
 	    msg += "<li><form action=\"prmalign\"><input type=\"submit\" value=\"Match ontologies\"/></form></li>";
 	    msg += "<li><form action=\"prmcut\"><input type=\"submit\" value=\"Trim an alignment above some threshold\"/></form></li>";
 	    msg += "<li><form action=\"prmload\"><input type=\"submit\" value=\"Load alignments\"/></form></li>";
 	    msg += "<li><form action=\"prmstore\"><input type=\"submit\" value=\"Store an alignment in the server\"/></form></li>";
-	    msg += "<li><form action=\"prmretrieve\"><input type=\"submit\" value=\"Retrieve an alignment from id\"/></form></li>";
-	    msg += "<li><form action=\"prmtranslate\"><input type=\"submit\" value=\"Translate a query\"/></form></li>";
+	    msg += "<li><form action=\"prmretrieve\"><input type=\"submit\" value=\"Retrieve an alignment from its id\"/></form></li>";
 	    msg += "<li><form action=\"../admin/\"><input type=\"submit\" value=\"Server management\"/></form></li>";
 	    msg += "</ul>";
 	} else {
@@ -514,6 +506,28 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
     // ===============================================
     // Util
 
+	public Response wsdlAnswer(String uri, String perf, Properties header, Parameters params  ) {
+		String msg = "";
+		try
+		{
+			FileReader fr = null;
+			String temp;
+			fr = new FileReader ("WSAlignSVC.wsdl");
+			BufferedReader inFile = new BufferedReader( fr );
+			while ((temp = inFile.readLine()) != null) {
+				//msg = msg + line + "\n";
+				msg =msg + temp;
+			}
+			if (fr != null)  fr.close();
+		}
+		catch (IOException e)
+		{
+			System.err.println(e.toString());
+		}
+		return new Response( HTTP_OK, MIME_XML, msg );
+	}	 
+
+
     private String testErrorMessages( Message answer ) {
 	return "<h1>Alignment error</h1>"+answer.HTMLString();
     }
@@ -1026,6 +1040,5 @@ public class HTMLAServProfile implements AlignmentServiceProfile {
 	 */
 	public Properties header = new Properties();
     }
-
 }
 
diff --git a/src/fr/inrialpes/exmo/align/service/Message.java b/src/fr/inrialpes/exmo/align/service/Message.java
index 231a0c50f7c8f81bf7cddb7b405198696c026f18..6b45049f24fc745efa8dc38fb5d666aad4c05a43 100644
--- a/src/fr/inrialpes/exmo/align/service/Message.java
+++ b/src/fr/inrialpes/exmo/align/service/Message.java
@@ -1,7 +1,7 @@
 /*
  * $Id$
  *
- * Copyright (C) INRIA Rhône-Alpes, 2006-2007
+ * Copyright (C) INRIA Rh?e-Alpes, 2006-2007
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -48,6 +48,10 @@ public class Message {
 	return "<h1>Message</h1><dl><dt>id:</dt><dd>"+surrogate+"</dd><dt>sender:</dt><dd>"+sender+"</dd><dt>receiver:</dt><dd>"+receiver+"</dd><dt>in-reply-to:</dt><dd>"+inReplyTo+"</dd><dt>content:</dt><dd>"+content+"</dd></dl>";
     }
 
+	public String SOAPString(){
+	return "<id>"+surrogate+"</id>"+"<sender>"+sender+"</sender>" + "<receiver>"+receiver+"</receiver>" + "<in-reply-to>" + inReplyTo+ "</in-reply-to>" + "<content>" + content + "</content>";	
+	}
+
     public int getId () {
 	return surrogate;
     }
diff --git a/src/fr/inrialpes/exmo/align/service/OntologyURI.java b/src/fr/inrialpes/exmo/align/service/OntologyURI.java
index b537c2ee05850ed719ddad72829a6a85d67bfb0c..1b20c27496d4f3980ccbb0fc75dd9018aa3c3093 100644
--- a/src/fr/inrialpes/exmo/align/service/OntologyURI.java
+++ b/src/fr/inrialpes/exmo/align/service/OntologyURI.java
@@ -1,7 +1,7 @@
 /*
  * $Id$
  *
- * Copyright (C) INRIA Rhône-Alpes, 2006-2007
+ * Copyright (C) INRIA Rh?e-Alpes, 2006-2007
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -34,4 +34,8 @@ public class OntologyURI extends Success {
     public String HTMLString(){
 	return "Ontology URI: "+content;
     }
+    public String SOAPString(){
+	return "<uri>"+content+"</uri>";
+    }
+
 }
diff --git a/src/fr/inrialpes/exmo/align/service/WSAServProfile.java b/src/fr/inrialpes/exmo/align/service/WSAServProfile.java
index 510d98948dc819377b125d739dd1246cdd3d4edc..9360a51560e45437f771fa5f90226c309f93cfa8 100644
--- a/src/fr/inrialpes/exmo/align/service/WSAServProfile.java
+++ b/src/fr/inrialpes/exmo/align/service/WSAServProfile.java
@@ -1,7 +1,7 @@
 /*
  * $Id$
  *
- * Copyright (C) INRIA Rhône-Alpes, 2007.
+ * Copyright (C) INRIA Rh?e-Alpes, 2007.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -20,9 +20,12 @@
 
 package fr.inrialpes.exmo.align.service;
 
-/*import org.semanticweb.owl.align.Alignment;
+import fr.inrialpes.exmo.align.impl.BasicParameters;
+
+import org.semanticweb.owl.align.Alignment;
 import org.semanticweb.owl.align.Parameters;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.FileInputStream;
 import java.io.PrintWriter;
@@ -36,6 +39,7 @@ import java.util.StringTokenizer;
 import java.util.Locale;
 import java.util.TimeZone;
 import java.util.Hashtable;
+import java.util.Properties;
 import java.util.Date;
 import java.util.Enumeration;
 import java.util.Iterator;
@@ -46,25 +50,6 @@ import java.net.URLEncoder;
 import java.net.URLDecoder;
 
 import java.lang.Integer;
-*/
-
-import java.io.File;
-import java.util.Properties;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Element;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-import org.semanticweb.owl.align.Parameters;
-
-import fr.inrialpes.exmo.align.impl.BasicParameters;
 
 /**
  * HTMLAServProfile: an HTML provile for the Alignment server
@@ -111,7 +96,10 @@ public class WSAServProfile implements AlignmentServiceProfile {
     public void init( Parameters params, AServProtocolManager manager ) throws AServException {
 	this.manager = manager;
 	// This may register the WSDL file to some directory
-    }
+	myId = "LocalHTMLInterface";
+	serverId = "dummy";
+	localId = 0;	
+	}
 
     public void close(){
 	// This may unregister the WSDL file to some directory
@@ -128,70 +116,251 @@ public class WSAServProfile implements AlignmentServiceProfile {
      * Not implemented yet
      * but reserved if appears useful
      */
-    public String protocolAnswer( String uri, String perf, Properties header, Parameters params ) {
-	// The posted SOAP message is in the "content" parameter
-	System.err.println("SOAP MESSAGE [ "+perf+" ]\n"+params.getParameter("content"));
+    public String protocolAnswer( String uri, String perf, Properties header, Parameters param ) {
+	String method;
+	String message;
+//	System.err.println("SOAP MESSAGE [ "+perf+" ]\n"+params.getParameter("content"));
+	method = header.getProperty("SOAPAction");
+	message = (String) param.getParameter("content");
+
 	String msg = "<SOAP-ENV:Envelope   xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'   xmlns:xsi='http://www.w3.org/1999/XMLSchema-instance'   xmlns:xsd='http://www.w3.org/1999/XMLSchema'>  <SOAP-ENV:Body>";
-	Parameters p = params;
-	if ( params.getParameter("content") != null )
-	    p = read( (String)params.getParameter("content"), params );
-	if ( perf.equals("WSDL") ) { // -> WSDL 
-	} else if ( perf.equals("listalignment") ) { // -> List of URI
-	} else if ( perf.equals("listmethods") ) { // -> List of String
-	} else if ( perf.equals("listrenderers") ) { // -> List of String
-	} else if ( perf.equals("listservices") ) { // -> List of String
-	} else if ( perf.equals("store") ) { // URI -> URI
-	} else if ( perf.equals("cut") ) { // URI * string * float -> URI
-	} else if ( perf.equals("align") ) { // URL * URL * URI * String * boolean * (params) -> URI
-	} else if ( perf.equals("find") ) { // URI * URI -> List of URI
-	} else if ( perf.equals("retrieve") ) { // URI -> XML
-	} else if ( perf.equals("metadata") ) { // URI -> XML
-	} else if ( perf.equals("load") ) { // URL -> URI
-	} else if ( perf.equals("loadfile") ) { // XML -> URI
-	} else if ( perf.equals("translate") ) { // XML * URI -> XML
+	if ( perf.equals("WSDL") ) {
+	} else if ( method.equals("listalignment") ) {
+		for( Enumeration e = manager.alignments(); e.hasMoreElements(); ){
+		String id = ((Alignment)e.nextElement()).getExtension("id");
+		msg += "<uri>"+id+"</uri>";
+	    }
+		// -> List of URI
+	} else if ( method.equals("listmethods") ) { // -> List of String
+	    for( Iterator it = manager.listmethods().iterator(); it.hasNext(); ) {
+		msg += "<method>"+it.next()+"</method>";
+	    }
+	} else if ( method.equals("listrenderers") ) { // -> List of String
+	    for( Iterator it = manager.listrenderers().iterator(); it.hasNext(); ) {
+		msg += "<renderer>"+it.next()+"</renderer>";
+	    }
+	} else if ( method.equals("listservices") ) { // -> List of String
+	    for( Iterator it = manager.listservices().iterator(); it.hasNext(); ) {
+		msg += "<service>"+it.next()+"</service>";
+	    }
+	} else if ( method.equals("store") ) { // URI -> URI
+		int start;
+		int end;
+		String request_id;
+		String request_uri;
+		Parameters params;
+
+		params = new BasicParameters();
+
+		start = message.indexOf("<id>");
+		end = message.indexOf("</id>");
+		request_id = message.substring(start+4, end);
+		start = message.indexOf("<uri>");
+		end = message.indexOf("</uri>");
+		request_uri = message.substring(start+5, end);
+
+		params.setParameter("id", request_id);
+		params.setParameter("uri", request_uri);
+
+	    if ( request_uri != null && !request_uri.equals("") ) { // Load the URL
+		Message answer = manager.load( new Message(newId(),(Message)null,myId,serverId,"", params) );
+		if ( answer instanceof ErrorMsg ) {
+		    msg = testErrorMessagesSOAP( answer );
+		} else {
+		    request_id = answer.getContent();
+		}
+	    }
+	    if ( request_id != null ){ // Store it
+		Message answer = manager.store( new Message(newId(),(Message)null,myId,serverId, request_id, params) );
+		
+		if ( answer instanceof ErrorMsg ) {
+		    msg += testErrorMessagesSOAP( answer );
+		} else {
+			msg += displayAnswerSOAP( answer );
+		}
+	    }
+	} else if ( method.equals("cut") ) { // URI * string * float -> URI
+		int start;
+		int end;
+		String request_id;
+		String request_uri;
+		String request_threshold;
+		Parameters params;
+
+		params = new BasicParameters();
+
+		start = message.indexOf("<id>");
+		end = message.indexOf("</id>");
+		request_id = message.substring(start+4, end);
+		start = message.indexOf("<uri>");
+		end = message.indexOf("</uri>");
+		request_uri = message.substring(start+5, end);
+		start = message.indexOf("<threshold>");
+		end = message.indexOf("</threshold>");
+		request_threshold = message.substring(start+10, end);
+		
+		params.setParameter("id", request_id);
+		params.setParameter("uri", request_uri);
+		params.setParameter("threshold", request_threshold);
+
+	    if ( request_id != null && !request_id.equals("") && request_threshold != null && !request_threshold.equals("") ){ // Trim it
+		Message answer = manager.cut( new Message(newId(),(Message)null,myId,serverId, request_id, params) );
+		if ( answer instanceof ErrorMsg ) {
+		    msg = testErrorMessagesSOAP( answer );
+		} else {
+		    msg += displayAnswerSOAP( answer );
+		}
+	    }
+	} else if ( method.equals("align") ) { // URL * URL * URI * String * boolean * (params) -> URI
+		int start;
+		int end;
+
+		String request_url1;
+		String request_url2;
+		String request_method;
+		String request_force;
+		Parameters params;
+
+		params = new BasicParameters();
+
+		start = message.indexOf("<url1>");
+		end = message.indexOf("</url1>");
+		request_url1 = message.substring(start+6, end);
+
+		start = message.indexOf("<url2>");
+		end = message.indexOf("</url2>");
+		request_url2 = message.substring(start+6, end);
+
+		start = message.indexOf("<method>");
+		end = message.indexOf("</method>");
+		request_method = message.substring(start+5, end);
+
+		start = message.indexOf("<force>");
+		end = message.indexOf("</force>");
+		request_force = message.substring(start+7, end);
+		
+		params.setParameter("onto1", request_url1);
+		params.setParameter("onto2", request_url2);
+		params.setParameter("method", request_method);
+		params.setParameter("force", request_force);
+
+		Message answer = manager.align( new Message(newId(),(Message)null,myId,serverId,"", params) );
+	    if ( answer instanceof ErrorMsg ) {
+		msg = testErrorMessagesSOAP( answer );
+	    } else {
+		msg += displayAnswerSOAP( answer );
+	    }
+	} else if ( method.equals("find") ) { // URI * URI -> List of URI
+		int start;
+		int end;
+
+		String request_url1;
+		String request_url2;
+		Parameters params;
+
+		params = new BasicParameters();
+
+		start = message.indexOf("<url1>");
+		end = message.indexOf("</url1>");
+		request_url1 = message.substring(start+6, end);
+
+		start = message.indexOf("<url2>");
+		end = message.indexOf("</url2>");
+		request_url2 = message.substring(start+6, end);
+
+		params.setParameter("onto1", request_url1);
+		params.setParameter("onto2", request_url2);
+
+	    
+		Message answer = manager.existingAlignments( new Message(newId(),(Message)null,myId,serverId,"", params) );
+	    if ( answer instanceof ErrorMsg ) {
+		msg = testErrorMessagesSOAP( answer );
+	    } else {
+		msg += displayAnswerSOAP( answer );
+	    }
+	} else if ( method.equals("retrieve") ) { // URI -> XML
+		int start;
+		int end;
+		String request_id;
+		Parameters params;
+
+		params = new BasicParameters();
+
+		start = message.indexOf("<id>");
+		end = message.indexOf("</id>");
+		request_id = message.substring(start+4, end);
+	
+		params.setParameter("id", request_id);
+	
+		Message answer = manager.render( new Message(newId(),(Message)null,myId,serverId,"", params) );
+	    if ( answer instanceof ErrorMsg ) {
+		msg += testErrorMessagesSOAP( answer );
+	    } else {
+		// Depending on the type we should change the MIME type
+		// This should be returned in answer.getParameters()
+		msg += "<result>" + answer.getContent() + "</result>";
+		}
+	} else if ( method.equals("metadata") ) { // URI -> XML
+		int start;
+		int end;
+		String request_id;
+		Parameters params;
+
+		params = new BasicParameters();
+
+		start = message.indexOf("<id>");
+		end = message.indexOf("</id>");
+		request_id = message.substring(start+4, end);
+	
+		params.setParameter("id", request_id);
+	
+		Message answer = manager.render( new Message(newId(),(Message)null,myId,serverId,"", params) );
+	    if ( answer instanceof ErrorMsg ) {
+		msg += testErrorMessagesSOAP( answer );
+	    } else {
+		// Depending on the type we should change the MIME type
+		// This should be returned in answer.getParameters()
+		msg += "<result>" + answer.getContent() + "</result>";
+		}
+	} else if ( method.equals("load") ) { // URL -> URI
+		int start;
+		int end;
+		String request_url;
+		Parameters params;
+
+		params = new BasicParameters();
+
+		start = message.indexOf("<url>");
+		end = message.indexOf("</url>");
+		request_url = message.substring(start+5, end);
+
+		params.setParameter("url", request_url);
+
+		Message answer = manager.load( new Message(newId(),(Message)null,myId,serverId,"", params) );
+	    if ( answer instanceof ErrorMsg ) {
+		msg = testErrorMessagesSOAP( answer );
+	    } else {
+		msg += displayAnswerSOAP( answer );
+	    }
+	} else if ( method.equals("loadfile") ) { // XML -> URI
+	    Message answer = manager.loadfile( new Message(newId(),(Message)null,myId,serverId,"", param) );
+	    if ( answer instanceof ErrorMsg ) {
+		msg = testErrorMessagesSOAP( answer );
+	    } else {
+		msg += displayAnswerSOAP( answer );
+	    }
+	} else if ( method.equals("translate") ) { // XML * URI -> XML
 	} else {
 	    msg += "<UnRecognizedAction />";
 	}
 	msg += "  </SOAP-ENV:Body></SOAP-ENV:Envelope>";
 	return msg;
     }
-
-    // JE//This would be supposed to read the SOAP message
-    // and add the read values as paramenters
-    public static Parameters read( String soapMessage, Parameters p ){
-	try {
-	    // open the stream
-	    DocumentBuilderFactory docBuilderFactory =
-		DocumentBuilderFactory.newInstance();
-	    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
-	    // JE// We should parse the string here
-	    // JE: I assume that
-	    //     docBuilder.parse(new InputSource( new StringReader(soapMessage)));
-	    // would work
-	    Document doc = docBuilder.parse(new File(soapMessage));
-
-	    // normalize text representation
-	    doc.getDocumentElement().normalize();
-
-	    // Get the params
-	    NodeList paramList = doc.getElementsByTagName("param");
-	    int totalParams = paramList.getLength();
-	    for (int s = 0; s < totalParams; s++) {
-		Element paramElement = (Element)paramList.item(s);
-		String paramName = paramElement.getAttribute("name");
-		NodeList paramContent = paramElement.getChildNodes();
-		String paramValue =((Node)paramContent.item(0)).getNodeValue().trim();
-		p.setParameter(paramName, paramValue); 
-	    }
-	} catch (SAXParseException err) {
-	    System.err.println("** Parsing error: ["+ err.getLineNumber()+"]: "+err.getSystemId()); 
-	    System.err.println(" " + err.getMessage());
-	} catch (SAXException e) {
-	    Exception x = e.getException();
-	    ((x == null) ? e : x).printStackTrace();
-	} catch (Throwable t) {	t.printStackTrace(); }
-
-	return p;
+	private String displayAnswerSOAP ( Message answer ) {
+	return answer.SOAPString();
+	}
+	private String testErrorMessagesSOAP( Message answer ) {
+	return answer.SOAPString();
     }
-
+    private int newId() { return localId++; }
 }