diff --git a/src/fr/inrialpes/exmo/QueryProcessor/QueryProcessor.java b/src/fr/inrialpes/exmo/QueryProcessor/QueryProcessor.java
new file mode 100644
index 0000000000000000000000000000000000000000..063e170a97acb8177fc9fa75cdd79b5e19248cc1
--- /dev/null
+++ b/src/fr/inrialpes/exmo/QueryProcessor/QueryProcessor.java
@@ -0,0 +1,41 @@
+/*
+ * QueryProcessor.java
+ *
+ * Created on March 20, 2006, 10:29 AM
+ *
+ */
+
+package fr.inrialpes.exmo.QueryProcessor;
+
+/**
+ *
+ * @author Arun Sharma
+ */
+public interface QueryProcessor {
+    /**
+     * @param query -- The query string
+     * @param type -- The query type, can be one of SELECT, ASK, CONSTRUCT, or DESCRIBE
+     * @returns Result, result form depends on type
+     */
+    public Result query(String query, Type type);
+    
+    /**
+     *@param query  -- The query string
+     */
+    public Result query(String query);
+
+    /**
+     *@param query -- The query string
+     *@returns query results as string
+     */
+    public String queryWithStringResults(String query);
+    
+    /**
+     *@param query -- the query string
+     *@returns the type of the query
+     */
+    public int getType(String query);
+    
+    public void loadOntology(String uri);
+    
+}
diff --git a/src/fr/inrialpes/exmo/QueryProcessor/QueryTypeMismatchException.java b/src/fr/inrialpes/exmo/QueryProcessor/QueryTypeMismatchException.java
new file mode 100644
index 0000000000000000000000000000000000000000..99acb79925b2e312e9365079dd58a981fdc599d2
--- /dev/null
+++ b/src/fr/inrialpes/exmo/QueryProcessor/QueryTypeMismatchException.java
@@ -0,0 +1,43 @@
+/*
+ * QueryTypeMismatchException.java
+ *
+ * Created on March 20, 2006, 11:03 AM
+ * 
+ */
+
+package fr.inrialpes.exmo.QueryProcessor;
+
+/**
+ *
+ * @author Arun Sharma
+ */
+public class QueryTypeMismatchException extends Exception {
+    /**
+     * Create a new <code>QueryTypeMismatchException</code> with no
+     * detail mesage.
+     */
+    public QueryTypeMismatchException() {
+    	super();
+    }
+
+    /**
+     * Create a new <code>QueryTypeMismatchException</code> with
+     * the <code>String</code> specified as an error message.
+     *
+     * @param message The error message for the exception.
+     */
+    public QueryTypeMismatchException(String message) {
+    	super(message);
+    }
+
+    /**
+     * Create a new <code>QueryTypeMismatchException</code> with
+     * the <code>String</code> specified as an error message and the
+     * <code>Throwable</code> that caused this exception to be raised.
+     * @param message The error message for the exception
+     * @param cause The cause of the exception
+     */
+    public QueryTypeMismatchException(String message, Throwable cause) {
+    	super(message, cause);
+    }
+}
diff --git a/src/fr/inrialpes/exmo/QueryProcessor/RDFGraph.java b/src/fr/inrialpes/exmo/QueryProcessor/RDFGraph.java
new file mode 100644
index 0000000000000000000000000000000000000000..3cdf2ea9a4d4be877a445f508270b9aa0d3cc50d
--- /dev/null
+++ b/src/fr/inrialpes/exmo/QueryProcessor/RDFGraph.java
@@ -0,0 +1,26 @@
+/*
+ * RDFGraph.java
+ *
+ * Created on March 20, 2006, 11:10 AM
+ *
+ */
+
+package fr.inrialpes.exmo.QueryProcessor;
+
+/**
+ *
+ * @author Arun Sharma
+ */
+public interface RDFGraph {
+    /**
+     *@returns RDF/XML representation of the graph
+     */
+    public String getXML();
+    
+    /**@returns rdf triples
+     */
+    public Triple[] getTriples();
+    
+    //TODO: getN3();
+    //TODO: some JenaRepresentation
+}
diff --git a/src/fr/inrialpes/exmo/QueryProcessor/Result.java b/src/fr/inrialpes/exmo/QueryProcessor/Result.java
new file mode 100644
index 0000000000000000000000000000000000000000..bd130438efa63063c12be4864bc159a3d4dfc3a4
--- /dev/null
+++ b/src/fr/inrialpes/exmo/QueryProcessor/Result.java
@@ -0,0 +1,38 @@
+/*
+ * Result.java
+ *
+ * Created on March 20, 2006, 10:55 AM
+ *
+ */
+
+package fr.inrialpes.exmo.QueryProcessor;
+
+import java.util.Collection;
+
+/**
+ *
+ * @author Arun Sharma
+ */
+public interface Result {
+    /**@returns the type of the result set
+     */
+    public int getType();
+    
+    /**@returns the reslut for ASK type queries
+     */
+    public boolean getAskResult() throws QueryTypeMismatchException;
+    
+    /**
+     *@returns the RDF graph for construct queries
+     */
+    public RDFGraph getConstructResult() throws QueryTypeMismatchException;
+    
+    /**@returns a collection set for SELECT queries
+     */
+    public Collection getSelectResult() throws QueryTypeMismatchException;
+
+    /**@returns an XML string for the SELECT queries
+     */
+    public String getSelectResultasXML() throws QueryTypeMismatchException;
+
+}
diff --git a/src/fr/inrialpes/exmo/QueryProcessor/Triple.java b/src/fr/inrialpes/exmo/QueryProcessor/Triple.java
new file mode 100644
index 0000000000000000000000000000000000000000..8cd0e88555ce797777ab23a3c5f2f5576344d865
--- /dev/null
+++ b/src/fr/inrialpes/exmo/QueryProcessor/Triple.java
@@ -0,0 +1,31 @@
+/*
+ * Triple.java
+ *
+ * Created on March 20, 2006, 11:12 AM
+ *
+ */
+
+package fr.inrialpes.exmo.QueryProcessor;
+
+/**
+ *
+ * @author Arun Sharma
+ */
+public interface Triple {
+    
+    public String subject = "";
+    public String object = "";
+    public String predicate = "";
+        
+    public String getObject();
+    
+    public void setObject(String obj);
+    
+    public String getPredicate() ;
+    
+    public void setPredicate(String pred);
+    
+    public String getSubject();
+    
+    public void setSubject(String sub);
+}
diff --git a/src/fr/inrialpes/exmo/QueryProcessor/Type.java b/src/fr/inrialpes/exmo/QueryProcessor/Type.java
new file mode 100644
index 0000000000000000000000000000000000000000..9fb06c5e6eef46a2bbe7f20ca7c50a15f6a7c956
--- /dev/null
+++ b/src/fr/inrialpes/exmo/QueryProcessor/Type.java
@@ -0,0 +1,26 @@
+/*
+ * Type.java
+ *
+ * Created on March 20, 2006, 11:20 AM
+ *
+ * 
+ */
+
+package fr.inrialpes.exmo.QueryProcessor;
+
+/**
+ *
+ * @author Arun Sharma
+ */
+public class Type {
+    
+    public static int SELECT = 1;
+    public static int ASK = 2;
+    public static int CONSTRUCT = 3;
+    public static int DESCRIBE = 4;
+    
+    /** Creates a new instance of Type */
+    public Type() {
+    }
+    
+}
diff --git a/src/fr/inrialpes/exmo/QueryProcessor/impl/QueryProcessorImpl.java b/src/fr/inrialpes/exmo/QueryProcessor/impl/QueryProcessorImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..71309df485ae2d2e7ae484a929afc6fcbdaa08c9
--- /dev/null
+++ b/src/fr/inrialpes/exmo/QueryProcessor/impl/QueryProcessorImpl.java
@@ -0,0 +1,233 @@
+package fr.inrialpes.exmo.QueryProcessor.impl;
+
+/**
+ * @author Arun Sharma
+ */
+
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Vector;
+import java.net.URL;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.DataInputStream;
+import java.io.PrintStream;
+import java.io.FileOutputStream;
+import java.io.StringWriter;
+
+import org.mindswap.pellet.output.TableData;
+import org.mindswap.pellet.output.OutputFormatter;
+import fr.inrialpes.exmo.elster.picster.markup.Razor;
+import fr.inrialpes.exmo.elster.picster.markup.MarkupModel;
+import org.mindswap.pellet.output.ATermAbstractSyntaxRenderer;
+import fr.inrialpes.exmo.elster.picster.*;
+import org.mindswap.pellet.output.ATermRenderer;
+
+import com.hp.hpl.jena.query.ARQ;
+import com.hp.hpl.jena.query.Query;
+import com.hp.hpl.jena.query.QuerySolution;
+import com.hp.hpl.jena.query.QueryExecutionFactory;
+import com.hp.hpl.jena.query.ResultSet;
+import com.hp.hpl.jena.query.QueryFactory;
+import com.hp.hpl.jena.query.QueryExecution;
+import com.hp.hpl.jena.query.ResultSetFormatter;
+
+import com.hp.hpl.jena.ontology.OntModel;
+import com.hp.hpl.jena.rdf.model.Property;
+import com.hp.hpl.jena.rdf.model.Statement;
+import com.hp.hpl.jena.rdf.model.StmtIterator;
+import com.hp.hpl.jena.rdf.model.Resource;
+import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.RDFNode;
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.rdf.model.ModelFactory;
+import org.mindswap.markup.media.MarkupImageModel;
+
+import fr.inrialpes.exmo.QueryProcessor.Result;
+import fr.inrialpes.exmo.QueryProcessor.Type;
+import fr.inrialpes.exmo.QueryProcessor.QueryProcessor;
+import fr.inrialpes.exmo.QueryProcessor.impl.ResultImpl;
+/**
+ *
+ * @author Arun Sharma
+ */
+public class QueryProcessorImpl implements QueryProcessor {
+    
+    String query;
+    Model aModel;
+    ResultSet aResultSet;
+    Set aResults = new HashSet();
+    Hashtable annotation = new Hashtable();
+    
+    public QueryProcessorImpl()  {
+        
+    }
+    public QueryProcessorImpl(Model m) {        
+        aModel = m;    
+    }
+    
+    public Result query(String aQuery)  {
+        query = aQuery;
+        Query myquery = QueryFactory.create(query);
+	QueryExecution qe = QueryExecutionFactory.create(myquery, aModel);		
+        System.err.println("Executing  query:   " + query);               
+        aResultSet = qe.execSelect();
+        
+         while (aResultSet.hasNext())
+                {
+                    QuerySolution aSolution = aResultSet.nextSolution();
+                    Resource aRes = (Resource)aSolution.get("uri");
+                    aResults.add(aRes.getURI());
+                    getAnnotations(aRes, aRes.getURI());
+                    Property p = aModel.getProperty("http://www.mindswap.org/~glapizco/technical.owl#", "depiction");
+                    StmtIterator stmtr = aRes.listProperties(p);
+                    //String imguri = "";
+                    String imaAnnos = "";
+                    while(stmtr.hasNext())  {
+                        Statement st = stmtr.nextStatement();
+                        String imguri = st.getObject().toString();
+                        System.out.println("Depiction URI = " + imguri);
+                        if(!aResults.contains(imguri))
+                            aResults.add(imguri);
+                        String thisImgAnno = getAnnotations(aRes, imguri);
+                        imaAnnos = imaAnnos + thisImgAnno + "<image>";
+                    }
+                    //getAnnotations(aRes, imguri);
+                    annotation.put(aRes.getURI(), imaAnnos);
+                }
+        
+        qe.close();        
+        ResultImpl res = new ResultImpl(aResults);
+        return res;
+    }
+    
+   
+    public ResultSet performQuery()  {
+        Query myquery = QueryFactory.create(query);
+	QueryExecution qe = QueryExecutionFactory.create(myquery, aModel);		
+        System.err.println("Executing  query:   " + query);               
+        aResultSet = qe.execSelect();
+        
+         while (aResultSet.hasNext())
+                {
+                    QuerySolution aSolution = aResultSet.nextSolution();
+                    Resource aRes = (Resource)aSolution.get("uri");
+                    aResults.add(aRes.getURI());
+                    getAnnotations(aRes, aRes.getURI());
+                    Property p = aModel.getProperty("http://www.mindswap.org/~glapizco/technical.owl#", "depiction");
+                    StmtIterator stmtr = aRes.listProperties(p);
+                    //String imguri = "";
+                    String imaAnnos = "";
+                    while(stmtr.hasNext())  {
+                        Statement st = stmtr.nextStatement();
+                        String imguri = st.getObject().toString();
+                        System.out.println("Depiction URI = " + imguri);
+                        if(!aResults.contains(imguri))
+                            aResults.add(imguri);
+                        String thisImgAnno = getAnnotations(aRes, imguri);
+                        imaAnnos = imaAnnos + thisImgAnno + "<image>";
+                    }
+                    //getAnnotations(aRes, imguri);
+                    annotation.put(aRes.getURI(), imaAnnos);
+                }
+        
+        qe.close();
+        return aResultSet;
+    }
+    
+    public String getAnnotations(Resource res, String mediaUri)  {
+        String queryAnno = "";
+        String uri = res.getURI();
+        String instanceFileName = uri.substring(uri.lastIndexOf('/')+1, uri.lastIndexOf('.')) + ".rdf";
+        String annoFileName = "";
+        if(!uri.equals(mediaUri))  {
+            if(mediaUri.contains("region"))  {
+             String temp = mediaUri.substring(0, mediaUri.indexOf("region")-1);
+             annoFileName = temp.substring(temp.lastIndexOf('/')+1, temp.length() ) + ".rdf";
+             }
+             else
+               annoFileName = mediaUri.substring(mediaUri.lastIndexOf('/')+1, mediaUri.length()) + ".rdf";
+        }
+        System.out.println("\n\n\nInstanceFileName = " + instanceFileName);
+        System.out.println("\n\n\nAnnotationFileName = " + annoFileName);
+        
+        try  {
+        FileInputStream in = new FileInputStream(new File("annotations/" + annoFileName));
+        DataInputStream ds = new DataInputStream(in);
+        String annotations = "";
+        while(ds.available() != 0) {
+            annotations = annotations + ds.readLine();
+            annotations = annotations + "\n";
+        }       
+        OntModel m = ModelFactory.createOntologyModel();
+        StmtIterator stms = res.listProperties();
+        m.add(stms);
+        StringWriter sr  = new StringWriter();
+        m.write(sr, "RDF/XML-ABBREV");
+        String instance = sr.toString();        
+      /*  queryAnno = "<" + annoFileName + ">" + annotations + "</" + annoFileName + ">"
+                                + "<" + instanceFileName + ">" + instance + "</" + instanceFileName + ">";               
+        */        
+        queryAnno = annoFileName + "<divider>" +annotations + "<divider>"+ instanceFileName + "<divider>" + instance;
+        } catch(Exception e)  {
+            System.err.println("Annotation found not found");
+        }
+         //annotation.put(mediaUri, queryAnno);
+        return queryAnno;
+    }
+    
+    public String getAnnotationforUri(String uri)  {
+        String aAnno = (String) annotation.get(uri);
+        return aAnno;
+    }
+    
+    public Set getResourceUrisAsSet(ResultSet aResultSet)  {
+       /* Set aResults = new HashSet();
+        while (aResultSet.hasNext())
+                {
+                }*/
+        return aResults;
+    }
+        
+    public void showImages(Set mResults, Razor myApp)  {
+        System.out.println("Reached show Images");
+        Vector imgUrls = new Vector();
+        Iterator itr = mResults.iterator();
+        while(itr.hasNext())  {
+            String uri = (String) itr.next();
+            String imageLocation = (String)MarkupImageModel.getUriMap().get(uri);
+            if(imageLocation == null)
+                imageLocation = (String)MarkupImageModel.getRegUriMap().get(uri);
+            imgUrls.add(imageLocation);
+        }
+        
+        for(int j = 0; j < imgUrls.size(); j++)  {
+            try  {
+                String url = (String) imgUrls.get(j);
+                System.out.println("Image Location = " + url);
+                URL aUrl = new URL(url);
+                myApp.loadURL(aUrl);
+            } catch(Exception e)  {
+                System.out.println("Error in image location");
+            }
+        }
+    }
+    
+        public Result query(String query, Type type)  {
+        return null;
+    }
+    
+    public String queryWithStringResults(String query)  {
+        return null;
+    }
+    
+    public int getType(String query)  {
+        return 0;
+    }
+    
+    public void loadOntology(String uri)  {
+        
+    }
+}
diff --git a/src/fr/inrialpes/exmo/QueryProcessor/impl/ResultImpl.java b/src/fr/inrialpes/exmo/QueryProcessor/impl/ResultImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..d61356b74c0979e24281e0c0fa2166a235547cdc
--- /dev/null
+++ b/src/fr/inrialpes/exmo/QueryProcessor/impl/ResultImpl.java
@@ -0,0 +1,44 @@
+/*
+ * ResultImpl.java
+ *
+ * Created on May 21, 2006, 10:49 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package fr.inrialpes.exmo.QueryProcessor.impl;
+
+import fr.inrialpes.exmo.QueryProcessor.*;
+import java.util.*;
+/**
+ *
+ * @author Arun Sharma
+ */
+public class ResultImpl implements Result{
+    
+    Set aSet = new HashSet();
+    
+    public ResultImpl(Set set) {
+        aSet = set;
+    }
+    
+    /**@returns a collection set for SELECT queries
+     */
+    public Collection getSelectResult() throws QueryTypeMismatchException  {
+        return aSet;
+    }
+    
+     public int getType()  {
+         return 0;
+     }
+    public boolean getAskResult() throws QueryTypeMismatchException  {
+        return false;
+    }
+    public RDFGraph getConstructResult() throws QueryTypeMismatchException  {
+        return null;
+    }
+    public String getSelectResultasXML() throws QueryTypeMismatchException  {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/src/fr/inrialpes/exmo/align/service/QueryMediator.java b/src/fr/inrialpes/exmo/align/service/QueryMediator.java
new file mode 100644
index 0000000000000000000000000000000000000000..720e2f41d57c4391f917151796ae20c19b413626
--- /dev/null
+++ b/src/fr/inrialpes/exmo/align/service/QueryMediator.java
@@ -0,0 +1,67 @@
+/*
+ * QueryMediator.java
+ *
+ * Created on May 20, 2006, 12:15 AM
+ *
+ */
+
+package fr.inrialpes.exmo.align.service;
+
+import fr.inrialpes.exmo.QueryProcessor.impl.QueryProcessorImpl;
+import org.semanticweb.owl.align.Alignment;
+
+/**
+ *
+ * @author Arun Sharma
+ */
+public class QueryMediator extends QueryProcessorImpl {
+    
+    private String query;
+    private Alignment alignment;
+    
+    public QueryMediator(String aQuery) {
+        query = aQuery;
+    }
+    
+    public QueryMediator(Alignment a, String aQuery)  {
+        query = aQuery;
+        alignment = a;
+    }
+    
+    /**
+     * @aQuery query to be re-written
+     * @ a Alignment
+     * @ return -- rewritten query, Current code just replaces all the prefix namespaces, if present, in the query by actual IRIs
+     * TODO: rewrite the mainQuery variable (which is currently returned) to a query based on the given alignment     
+     */    
+    public String rewriteQuery(String aQuery, Alignment a)  {               
+        String mainQuery = ""; 
+        if(aQuery.contains("prefix"))  {
+            String[] pref = aQuery.split("prefix");               
+            for(int j =0; j < pref.length; j++)  {
+                String str = "";
+                if(!pref[0].equals(""))   
+                    str = pref[0];
+                else
+                    str = pref[pref.length-1];
+                mainQuery = str.substring(str.indexOf('>') +1, str.length());
+            }
+                
+            for(int i = 0; i < pref.length; i++)  {       
+                String currPrefix = pref[i].trim();       
+                if(!currPrefix.equals("") && currPrefix.indexOf('<') != -1 && currPrefix.indexOf('>') != -1)  {
+                    int begin = currPrefix.indexOf('<');
+                    int end = currPrefix.indexOf('>');
+                    String ns = currPrefix.substring(0, begin).trim();
+                    String iri = currPrefix.substring(begin+1, end).trim();         
+                    mainQuery = mainQuery.replaceAll(ns, iri);            
+                }
+            }
+        }
+        
+        else
+            mainQuery = aQuery;
+        return mainQuery;
+    }
+    
+}