diff --git a/LCGparser/ENIAM_LCG_XMLof.ml b/LCGparser/ENIAM_LCG_XMLof.ml
new file mode 100644
index 0000000..1619e20
--- /dev/null
+++ b/LCGparser/ENIAM_LCG_XMLof.ml
@@ -0,0 +1,62 @@
+(*
+ *  ENIAM_LCGparser, a parser for Logical Categorial Grammar formalism
+ *  Copyright (C) 2016-2017 Wojciech Jaworski <wjaworski atSPAMfree mimuw dot edu dot pl>
+ *  Copyright (C) 2016-2017 Institute of Computer Science Polish Academy of Sciences
+ *
+ *  This library is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *)
+
+open ENIAM_LCGtypes
+
+let rec linear_term = function
+    Var v -> Xml.Element("Var",[],[Xml.PCData v])
+  | Tuple l -> Xml.Element("Tuple",[],Xlist.map l linear_term)
+  | Variant(e,l) ->
+      Xml.Element("Variant",["label",e],Xlist.map l (fun (i,t) ->
+        Xml.Element("option",["number",i],[linear_term t])))
+  | VariantVar(v,t) -> Xml.Element("VariantVar",["var",v],[linear_term t])
+  | ProjVar(v,t) -> Xml.Element("ProjVar",["var",v],[linear_term t])
+  | SubstVar v -> Xml.Element("SubstVar",[],[Xml.PCData v])
+  | Subst(s,v,t) -> Xml.Element("Subst",["var",v],[linear_term s;linear_term t])
+  | Inj(n,t) -> Xml.Element("Inj",["option",string_of_int n],[linear_term t])
+  | Case(t,l) ->
+      Xml.Element("Case",[],
+        Xml.Element("matched",[],[linear_term t]) ::
+        Xlist.map l (fun (v,t) ->  Xml.Element("option",["var",v],[linear_term t])))
+  | Lambda(v,t) -> Xml.Element("Lambda",["var",v],[linear_term t])
+  | LambdaSet(l,t) -> Xml.Element("LambdaSet",[],Xlist.map l (fun v -> Xml.Element("var",[],[Xml.PCData v])) @ [linear_term t])
+  | LambdaRot(n,t) -> Xml.Element("LambdaRot",["number",string_of_int n],[linear_term t])
+  | App(s,t) -> Xml.Element("App",[],[linear_term s;linear_term t])
+  | Dot -> Xml.Element("Dot",[],[])
+  | Val s -> Xml.Element("Val",[],[Xml.PCData s])
+  | SetAttr(e,s,t) -> Xml.Element("SetAttr",["label",v],[linear_term s;linear_term t])
+  | Fix(s,t) -> Xml.Element("Fix",[],[linear_term s;linear_term t])
+  | Empty t -> Xml.Element("Empty",[],[linear_term t])
+  | Apply t -> Xml.Element("Apply",[],[linear_term t])
+  | Insert(s,t) -> Xml.Element("Insert",[],[linear_term s;linear_term t])
+  | Node t ->
+      Xml.Element("Node",["orth",t.orth;"lemma",t.lemma;"pos",t.pos;
+        "weight",string_of_float t.weight;"id",string_of_int t.id;"arg_dir",t.arg_dir],
+        [Xml.Element("symbol",[],[linear_term t.symbol]);
+         Xml.Element("arg_symbol",[],[linear_term t.arg_symbol]);
+         Xml.Element("attrs",[],Xlist.map t.attrs (fun (k,v) -> Xml.Element("attr",["name",k],[linear_term v])));
+         Xml.Element("args",[],[linear_term t.args])])
+  | Ref i -> Xml.Element("Ref",["index",string_of_int i],[])
+  | Cut t -> Xml.Element("Cut",[],[linear_term t])
+
+let linear_term_array a =
+  let l = Int.fold 0 (Array.length a - 1) [] (fun l i ->
+    Xml.Element("element",["index",string_of_int i],[linear_term a.(i)]) :: l) in
+  Xml.Element("array",[],List.rev l)
+  
diff --git a/LCGparser/eniam-lcg-parser-2.2.tar.bz2 b/LCGparser/eniam-lcg-parser-2.2.tar.bz2
new file mode 100644
index 0000000..01114ba
--- /dev/null
+++ b/LCGparser/eniam-lcg-parser-2.2.tar.bz2
diff --git a/exec/ENIAMexecXMLof.ml b/exec/ENIAMexecXMLof.ml
new file mode 100644
index 0000000..904a02c
--- /dev/null
+++ b/exec/ENIAMexecXMLof.ml
@@ -0,0 +1,74 @@
+(*
+ *  ENIAMexec implements ENIAM processing stream
+ *  Copyright (C) 2016 Wojciech Jaworski <wjaworski atSPAMfree mimuw dot edu dot pl>
+ *  Copyright (C) 2016 Institute of Computer Science Polish Academy of Sciences
+ *
+ *  This library is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *)
+
+open ENIAMexecTypes
+open Printf
+
+let eniam_sentence (result : eniam_parse_result) =
+  match result.status with
+    Parsed -> [ENIAM_LCG_XMLof.linear_term_array result.dependency_tree6b]
+  | SemParsed -> [ENIAMsemXMLof.linear_term result.semantic_graph12]
+  | _ -> []
+
+let token_extarray t =
+  Xml.Element("tokens",[], List.rev (Int.fold 0 (ExtArray.size t - 1) [] (fun l id ->
+    ENIAMtokens.xml_of_token_env id (ExtArray.get t id) :: l)))
+
+let token_list paths msg =
+  if msg = "" then Xml.Element("tokens",[],Xlist.map paths (fun t -> ENIAMtokens.xml_of_token_env (-1) t))
+  else Xml.Element("error",[],[Xml.PCData msg])
+
+let xml_of_dep_sentence paths =
+  List.rev (Int.fold 0 (Array.length paths - 1) [] (fun l conll_id ->
+    let id,super,label = paths.(conll_id) in
+    Xml.Element("edge",["conll_id",string_of_int conll_id;"id",string_of_int id] @
+      (if super = (-1) then [] else ["super",string_of_int super]) @
+      (if label = "" then [] else ["label",label]),[]) :: l))
+
+let xml_of_edge (id,lnode,rnode) =
+    Xml.Element("edge",["id",string_of_int id;"lnode",string_of_int lnode;"rnode",string_of_int rnode],[])
+
+let set_mode m =
+  if m = "" then [] else ["mode",m]
+
+let rec sentence m = function
+    RawSentence s -> Xml.Element("RawSentence",set_mode m,[Xml.PCData s])
+  | StructSentence(paths,last) -> Xml.Element("StructSentence",(set_mode m) @ ["last",string_of_int last],Xlist.map paths xml_of_edge)
+  | DepSentence paths -> failwith "ENIAMsubsyntaxXMLof.sentence: ni" (*Xml.Element("DepSentence",
+          (set_mode m) @ ["size",string_of_int (Array.length paths)],xml_of_dep_sentence paths)*) (* FIXME *)
+  | ENIAMSentence result -> Xml.Element("ENIAMSentence",set_mode m @ ["status",ENIAMvisualization.string_of_status result.status],eniam_sentence result)
+  | QuotedSentences sentences ->
+      Xml.Element("QuotedSentences",set_mode m,Xlist.map sentences (fun p ->
+        Xml.Element("Sentence",["id",p.id;"beg",string_of_int p.beg;"len",string_of_int p.len;"next",string_of_int p.next],[sentence "" p.sentence])))
+  | AltSentence l -> Xml.Element("AltSentence",set_mode m,Xlist.map l (fun (m,t) -> sentence (ENIAMvisualization.string_of_mode m) t))
+
+let rec paragraph m = function
+    RawParagraph s -> Xml.Element("RawParagraph",set_mode m,[Xml.PCData s])
+  | StructParagraph sentences ->
+      Xml.Element("StructParagraph",set_mode m,Xlist.map sentences (fun p ->
+        Xml.Element("Sentence",["id",p.id;"beg",string_of_int p.beg;"len",string_of_int p.len;"next",string_of_int p.next],[sentence "" p.sentence])))
+  | AltParagraph l -> Xml.Element("AltParagraph",set_mode m,Xlist.map l (fun (m,t) -> paragraph (ENIAMvisualization.string_of_mode m) t))
+
+let rec text m = function
+    RawText s -> Xml.Element("RawText",set_mode m,[Xml.PCData s])
+  | StructText paragraphs -> Xml.Element("StructText",set_mode m,Xlist.map paragraphs (paragraph ""))
+  | AltText l -> Xml.Element("AltText",set_mode m,Xlist.map l (fun (m,t) -> text (ENIAMvisualization.string_of_mode m) t))
+
+let message msg =
+  Xml.Element("error",[],[Xml.PCData msg])
diff --git a/exec/makefile b/exec/makefile
index 671865d..429c5b6 100755
--- a/exec/makefile
+++ b/exec/makefile
@@ -9,21 +9,21 @@ OCAMLOPTFLAGS=$(INCLUDES) unix.cmxa xml-light.cmxa str.cmxa nums.cmxa zip.cmxa b
 	eniam-mst-disambiguation.cmxa eniam-lexSemantics.cmxa eniam-semantics.cmxa eniam-exec.cmxa
 INSTALLDIR=`ocamlc -where`/eniam
 
-SOURCES= ENIAMexecTypes.ml ENIAMexec.ml ENIAMselectSent.ml ENIAMvisualization.ml
+SOURCES= ENIAMexecTypes.ml ENIAMexec.ml ENIAMselectSent.ml ENIAMvisualization.ml ENIAMexecXMLof.ml
 
 all: eniam-exec.cma eniam-exec.cmxa
 
 install: all
 	mkdir -p $(INSTALLDIR)
 	cp eniam-exec.cmxa eniam-exec.a eniam-exec.cma $(INSTALLDIR)
-	cp ENIAMexecTypes.cmi ENIAMexec.cmi ENIAMselectSent.cmi ENIAMvisualization.cmi $(INSTALLDIR)
-	cp ENIAMexecTypes.cmx ENIAMexec.cmx ENIAMselectSent.cmx ENIAMvisualization.cmx $(INSTALLDIR)
+	cp ENIAMexecTypes.cmi ENIAMexec.cmi ENIAMselectSent.cmi ENIAMexecXMLof.cmi ENIAMvisualization.cmi $(INSTALLDIR)
+	cp ENIAMexecTypes.cmx ENIAMexec.cmx ENIAMselectSent.cmx ENIAMexecXMLof.cmx ENIAMvisualization.cmx $(INSTALLDIR)
 
 install-local: all
 	mkdir -p $(INSTALLDIR)
 	cp eniam-exec.cmxa eniam-exec.a eniam-exec.cma $(INSTALLDIR)
-	cp ENIAMexecTypes.cmi ENIAMexec.cmi ENIAMselectSent.cmi ENIAMvisualization.cmi $(INSTALLDIR)
-	cp ENIAMexecTypes.cmx ENIAMexec.cmx ENIAMselectSent.cmx ENIAMvisualization.cmx $(INSTALLDIR)
+	cp ENIAMexecTypes.cmi ENIAMexec.cmi ENIAMselectSent.cmi ENIAMexecXMLof.cmi ENIAMvisualization.cmi $(INSTALLDIR)
+	cp ENIAMexecTypes.cmx ENIAMexec.cmx ENIAMselectSent.cmx ENIAMexecXMLof.cmx ENIAMvisualization.cmx $(INSTALLDIR)
 
 eniam-exec.cma: $(SOURCES)
 	ocamlc -linkall -a -o eniam-exec.cma $(OCAMLFLAGS) $^
diff --git a/exec/parser.ml b/exec/parser.ml
index c5f3070..27cb5d7 100644
--- a/exec/parser.ml
+++ b/exec/parser.ml
@@ -23,7 +23,7 @@ open Xstd
 let rules = ENIAM_LCGlexicon.make_rules false ENIAM_LCGlexiconTypes.rules_filename
 let dep_rules = ENIAM_LCGlexicon.make_rules true ENIAM_LCGlexiconTypes.rules_filename
 
-type output = (*Text | Xml |*) Html | Marsh (*| Graphviz*)
+type output = (*Text |*) Xml | Html | Marsh (*| Yaml | Graphviz*)
 
 let output = ref Html
 let comm_stdio = ref true
@@ -43,10 +43,11 @@ let perform_integration = ref false
 let spec_list = [
   "-i", Arg.Unit (fun () -> comm_stdio:=true), "Communication using stdio (default)";
   "-p", Arg.Int (fun p -> comm_stdio:=false; port:=p), "<port> Communication using sockets on given port number";
-  (*"-t", Arg.Unit (fun () -> output:=Text), "Output as plain text (default)";
-  "-x", Arg.Unit (fun () -> output:=Xml), "Output as XML";*)
+  (*"-t", Arg.Unit (fun () -> output:=Text), "Output as plain text (default)";*)
+  "-x", Arg.Unit (fun () -> output:=Xml), "Output as XML";
   "-m", Arg.Unit (fun () -> output:=Marsh), "Output as marshalled Ocaml data structure";
   "-h", Arg.Unit (fun () -> output:=Html), "Output as HTML (default)";
+  (* "-y", Arg.Unit (fun () -> output:=Yaml), "Output as YAML"; *)
   (*"-g", Arg.Unit (fun () -> output:=Graphviz; sentence_split:=false), "Output as graphviz dot file; turns sentence split off";*)
   (* "-r", Arg.String (fun p ->
         ENIAMtokenizerTypes.set_resource_path p;
@@ -124,6 +125,7 @@ let rec main_loop sub_in sub_out in_chan out_chan =
     if msg <> "" then
       (match !output with
       | Html -> Printf.fprintf out_chan "%s\n%!" msg
+      | Xml -> Printf.fprintf out_chan "%s\n%!" (Xml.to_string_fmt (ENIAMexecXMLof.message msg))
       | Marsh -> Marshal.to_channel out_chan (text,tokens,lex_sems,msg) []; flush out_chan) else (
     let text = ENIAMexec.translate_text text in
     let text = ENIAMexec.parse !timeout !verbosity rules dep_rules tokens lex_sems text in
@@ -132,6 +134,7 @@ let rec main_loop sub_in sub_out in_chan out_chan =
     let text = if !semantic_processing_flag then ENIAMexec.semantic_processing !verbosity tokens lex_sems text else text in
     (match !output with
     | Html -> ENIAMvisualization.print_html_text !output_dir "parsed_text" text !img !verbosity tokens
+    | Xml -> Printf.fprintf out_chan "%s\n%!" (Xml.to_string_fmt (ENIAMexecXMLof.text "" text))
     | Marsh -> Marshal.to_channel out_chan (text,tokens,lex_sems,msg) []; flush out_chan));
     prerr_endline "Done!";
     main_loop sub_in sub_out in_chan out_chan)
diff --git a/integration/opis_do_dzieła.txt b/integration/opis_do_dzieła.txt
new file mode 100644
index 0000000..a2bc38a
--- /dev/null
+++ b/integration/opis_do_dzieła.txt
@@ -0,0 +1,2 @@
+W katalogach exec oraz integration zawarte są moduły ENIAMexec oraz ENIAMintegration, które w ramach wykonania dzieła zostały rozszerzone do postaci umożliwiającej integrację z gramatyką POLFIE. Uruchamiany jest parser XLE wraz z gramatyką POLFIE-OT, będącą rezultatem projektu Clarin-pl 1, poszczególne zdania przetwarzanego tekstu przekazywane są do tego parsera, w wyniku czego powstają pliki z wygenerowanymi na ich podstawie c-strukturami i f-strukturami, które następnie wczytywane są przez parser zintegrowany. 
+Parsowanie za pomocą POLFIE można włączać bądź wyłączać za pomocą parametrów uruchomieniowych parsera. Kiedy parsowanie za pomocą POLFIE jest włączone powyższe moduły do swojego działania wymagają zainstalowanego parsera XLE. 
diff --git a/semantics/ENIAMsemXMLof.ml b/semantics/ENIAMsemXMLof.ml
new file mode 100644
index 0000000..c93cab0
--- /dev/null
+++ b/semantics/ENIAMsemXMLof.ml
@@ -0,0 +1,70 @@
+(*
+ *  ENIAMsemantics implements semantic processing for ENIAM
+ *  Copyright (C) 2016-2017 Wojciech Jaworski <wjaworski atSPAMfree mimuw dot edu dot pl>
+ *  Copyright (C) 2016-2017 Institute of Computer Science Polish Academy of Sciences
+ *
+ *  This library is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *)
+
+open ENIAMsemTypes
+
+let rec linear_term = function
+  | Tuple l -> Xml.Element("Tuple",[],Xlist.map l linear_term)
+  | Variant(e,l) ->
+      Xml.Element("Variant",["label",e],Xlist.map l (fun (i,t) ->
+        Xml.Element("option",["number",i],[linear_term t])))
+  | Dot -> Xml.Element("Dot",[],[])
+  | Val s -> Xml.Element("Val",[],[Xml.PCData s])
+  | Node t ->
+      Xml.Element("Node",["orth",t.orth;"lemma",t.lemma;"pos",t.pos;
+        "weight",string_of_float t.weight;"id",string_of_int t.id;"arg_dir",t.arg_dir;"gf",t.gf;
+        "role",t.role;"role_attr",t.role_attr;"arole",t.arole;"arole_attr",t.arole_attr;
+        "arev",string_of_bool t.arev;"label",t.label;"def_label",t.def_label],
+        [Xml.Element("symbol",[],[linear_term t.symbol]);
+         Xml.Element("arg_symbol",[],[linear_term t.arg_symbol]);
+         Xml.Element("attrs",[],Xlist.map t.attrs (fun (k,v) -> Xml.Element("attr",["name",k],[linear_term v])));
+         Xml.Element("args",[],[linear_term t.args]);
+         Xml.Element("selprefs",[],[linear_term t.selprefs]);
+         Xml.Element("meaning",[],[linear_term t.meaning]);
+         Xml.Element("sem_args",[],[linear_term t.sem_args])])
+  | Ref i -> Xml.Element("Ref",["index",string_of_int i],[])
+  | Concept c ->
+      Xml.Element("Concept",["local_quant",string_of_bool c.c_local_quant;
+        "label",c.c_label;"def_label",c.c_def_label;
+        "variable",fst c.c_variable ^ "_" ^ snd c.c_variable;"pos",string_of_int c.c_pos],
+        [Xml.Element("sense",[],[linear_term c.c_sense]);
+         Xml.Element("name",[],[linear_term c.c_name]);
+         Xml.Element("quant",[],[linear_term c.c_quant]);
+         Xml.Element("relations",[],[linear_term c.c_relations]);
+         Xml.Element("cat",[],[linear_term c.c_cat])])
+  | Context c ->
+      Xml.Element("Context",
+        ["variable",fst c.cx_variable ^ "_" ^ snd c.cx_variable;"pos",string_of_int c.cx_pos],
+        [Xml.Element("sense",[],[linear_term c.cx_sense]);
+         Xml.Element("contents",[],[linear_term c.cx_contents]);
+         Xml.Element("relations",[],[linear_term c.cx_relations]);
+         Xml.Element("cat",[],[linear_term c.cx_cat])])
+  | Relation(r,a,c) -> Xml.Element("Relation",["role",r;"role_attribute",a],[linear_term c])
+  | RevRelation(r,a,c) -> Xml.Element("RevRelation",["role",r;"role_attribute",a],[linear_term c])
+  | SingleRelation r -> Xml.Element("SingleRelation",[],[linear_term r])
+  | AddRelation(t,r,a,s) ->
+      Xml.Element("AddRelation",["role",r;"role_attribute",a],
+        [Xml.Element("",[],[linear_term t]);Xml.Element("",[],[linear_term s])])
+  | RemoveRelation(r,a,t) -> Xml.Element("RemoveRelation",["role",r;"role_attribute",a],[linear_term t])
+  | SetContextName(s,t) ->
+      Xml.Element("SetContextName",[],[linear_term s;linear_term t])
+  | CreateContext(s,t) ->
+      Xml.Element("CreateContext",[],[linear_term (Context s);linear_term t])
+  | ManageCoordination(t,r) ->
+      Xml.Element("ManageCoordination",[],[linear_term (Node t);linear_term r])
diff --git a/semantics/makefile b/semantics/makefile
index 7bad6ac..6f1ccb4 100755
--- a/semantics/makefile
+++ b/semantics/makefile
@@ -9,23 +9,23 @@ OCAMLOPTFLAGS=$(INCLUDES) unix.cmxa xml-light.cmxa str.cmxa nums.cmxa zip.cmxa b
 	eniam-lexSemantics.cmxa #eniam-semantics.cmxa
 INSTALLDIR=`ocamlc -where`/eniam
 
-SOURCES= ENIAMsemTypes.ml ENIAMsemLexicon.ml ENIAMsemValence.ml ENIAMdisambiguation.ml ENIAMcoreference.ml ENIAMsemStringOf.ml ENIAMsemGraph.ml ENIAMsemLatexOf.ml ENIAMsemGraphOf.ml
+SOURCES= ENIAMsemTypes.ml ENIAMsemLexicon.ml ENIAMsemValence.ml ENIAMdisambiguation.ml ENIAMcoreference.ml ENIAMsemStringOf.ml ENIAMsemXMLof.ml ENIAMsemGraph.ml ENIAMsemLatexOf.ml ENIAMsemGraphOf.ml
 
 all: eniam-semantics.cma eniam-semantics.cmxa
 
 install: all
 	mkdir -p $(INSTALLDIR)
 	cp eniam-semantics.cmxa eniam-semantics.a eniam-semantics.cma $(INSTALLDIR)
-	cp ENIAMsemTypes.cmi ENIAMsemLexicon.cmi ENIAMsemValence.cmi ENIAMdisambiguation.cmi ENIAMcoreference.cmi ENIAMsemStringOf.cmi ENIAMsemGraph.cmi ENIAMsemLatexOf.cmi ENIAMsemGraphOf.cmi $(INSTALLDIR)
-	cp ENIAMsemTypes.cmx ENIAMsemLexicon.cmx ENIAMsemValence.cmx ENIAMdisambiguation.cmx ENIAMcoreference.cmx ENIAMsemStringOf.cmx ENIAMsemGraph.cmx ENIAMsemLatexOf.cmx ENIAMsemGraphOf.cmx $(INSTALLDIR)
+	cp ENIAMsemTypes.cmi ENIAMsemLexicon.cmi ENIAMsemValence.cmi ENIAMdisambiguation.cmi ENIAMcoreference.cmi ENIAMsemStringOf.cmi ENIAMsemGraph.cmi ENIAMsemXMLof.cmi ENIAMsemLatexOf.cmi ENIAMsemGraphOf.cmi $(INSTALLDIR)
+	cp ENIAMsemTypes.cmx ENIAMsemLexicon.cmx ENIAMsemValence.cmx ENIAMdisambiguation.cmx ENIAMcoreference.cmx ENIAMsemStringOf.cmx ENIAMsemGraph.cmx ENIAMsemXMLof.cmx ENIAMsemLatexOf.cmx ENIAMsemGraphOf.cmx $(INSTALLDIR)
 	mkdir -p /usr/share/eniam/semantics
 	cp resources/*  /usr/share/eniam/semantics
 
 install-local: all
 	mkdir -p $(INSTALLDIR)
 	cp eniam-semantics.cmxa eniam-semantics.a eniam-semantics.cma $(INSTALLDIR)
-	cp ENIAMsemTypes.cmi ENIAMsemLexicon.cmi ENIAMsemValence.cmi ENIAMdisambiguation.cmi ENIAMcoreference.cmi ENIAMsemStringOf.cmi ENIAMsemGraph.cmi ENIAMsemLatexOf.cmi ENIAMsemGraphOf.cmi $(INSTALLDIR)
-	cp ENIAMsemTypes.cmx ENIAMsemLexicon.cmx ENIAMsemValence.cmx ENIAMdisambiguation.cmx ENIAMcoreference.cmx ENIAMsemStringOf.cmx ENIAMsemGraph.cmx ENIAMsemLatexOf.cmx ENIAMsemGraphOf.cmx $(INSTALLDIR)
+	cp ENIAMsemTypes.cmi ENIAMsemLexicon.cmi ENIAMsemValence.cmi ENIAMdisambiguation.cmi ENIAMcoreference.cmi ENIAMsemStringOf.cmi ENIAMsemGraph.cmi ENIAMsemXMLof.cmi ENIAMsemLatexOf.cmi ENIAMsemGraphOf.cmi $(INSTALLDIR)
+	cp ENIAMsemTypes.cmx ENIAMsemLexicon.cmx ENIAMsemValence.cmx ENIAMdisambiguation.cmx ENIAMcoreference.cmx ENIAMsemStringOf.cmx ENIAMsemGraph.cmx ENIAMsemXMLof.cmx ENIAMsemLatexOf.cmx ENIAMsemGraphOf.cmx $(INSTALLDIR)
 	mkdir -p /usr/local/share/eniam/semantics
 	cp resources/*  /usr/local/share/eniam/semantics