diff --git a/lexSemantics/ENIAMadjuncts.ml b/lexSemantics/ENIAMadjuncts.ml
index f4dc733..c3d4487 100644
--- a/lexSemantics/ENIAMadjuncts.ml
+++ b/lexSemantics/ENIAMadjuncts.ml
@@ -268,19 +268,21 @@ let add_adjuncts preps compreps compars pos2 (selectors,schema) =
   | "adv" -> [selectors,schema @ ENIAMwalRenderer.adv_adjuncts_simp @ compars]
   | _ -> []
 
-let add_connected_adjuncts preps compreps compars pos2 (selectors,meanings,schema) =
+open ENIAMlexSemanticsTypes
+
+let add_connected_adjuncts preps compreps compars pos2 frame =
   let compreps = Xlist.rev_map compreps ENIAMwalRenderer.render_connected_comprep in
   let prepnps = Xlist.rev_map preps (fun (prep,cases) -> ENIAMwalRenderer.render_connected_prepnp prep cases) in
   let prepadjps = Xlist.rev_map preps (fun (prep,cases) -> ENIAMwalRenderer.render_connected_prepadjp prep cases) in
   let compars = Xlist.rev_map compars ENIAMwalRenderer.render_connected_compar in
   match pos2 with
-    "verb" -> [selectors,meanings,schema @ ENIAMwalRenderer.verb_connected_adjuncts_simp @ prepnps @ prepadjps @ compreps @ compars]
+    "verb" -> [{frame with positions=frame.positions @ ENIAMwalRenderer.verb_connected_adjuncts_simp @ prepnps @ prepadjps @ compreps @ compars}]
   | "noun" -> [
-      [Nsyn,Eq,["proper"]] @ selectors,meanings,ENIAMwalRenderer.proper_noun_connected_adjuncts_simp @ prepnps @ compreps @ compars;
-      [Nsyn,Eq,["common"];Nsem,Eq,["measure"]] @ selectors,meanings,ENIAMwalRenderer.measure_noun_connected_adjuncts_simp @ prepnps @ compreps @ compars;
-      [Nsyn,Eq,["common"];Nsem,Neq,["measure"]] @ selectors,meanings,ENIAMwalRenderer.common_noun_connected_adjuncts_simp @ prepnps @ compreps @ compars]
-  | "adj" -> [selectors,meanings,schema @ ENIAMwalRenderer.adj_connected_adjuncts_simp @ compars]
-  | "adv" -> [selectors,meanings,schema @ ENIAMwalRenderer.adv_connected_adjuncts_simp @ compars]
+      {frame with selectors=[Nsyn,Eq,["proper"]] @ frame.selectors; positions=ENIAMwalRenderer.proper_noun_connected_adjuncts_simp @ prepnps @ compreps @ compars};
+      {frame with selectors=[Nsyn,Eq,["common"];Nsem,Eq,["measure"]] @ frame.selectors; positions=ENIAMwalRenderer.measure_noun_connected_adjuncts_simp @ prepnps @ compreps @ compars};
+      {frame with selectors=[Nsyn,Eq,["common"];Nsem,Neq,["measure"]] @ frame.selectors; positions=frame.positions @ ENIAMwalRenderer.common_noun_connected_adjuncts_simp @ prepnps @ compreps @ compars}]
+  | "adj" -> [{frame with positions=frame.positions @ ENIAMwalRenderer.adj_connected_adjuncts_simp @ compars}]
+  | "adv" -> [{frame with positions=frame.positions @ ENIAMwalRenderer.adv_connected_adjuncts_simp @ compars}]
   | _ -> []
 
 (* let _ =
diff --git a/lexSemantics/ENIAMlexSemantics.ml b/lexSemantics/ENIAMlexSemantics.ml
index 3c96d8b..0eef1b6 100644
--- a/lexSemantics/ENIAMlexSemantics.ml
+++ b/lexSemantics/ENIAMlexSemantics.ml
@@ -32,8 +32,8 @@ let find_meaning m =
 let lex_sie = LCG (ENIAMwalRenderer.render_morf (SimpleLexArg("się",QUB)))
 
 let find_senses t s = (* FIXME: sensy zawierające 'się' *)
-  let set = Xlist.fold s.frames StringSet.empty (fun set (selectors,meanings,positions) ->
-    Xlist.fold meanings set (fun set (name,hipero,weight) ->
+  let set = Xlist.fold s.frames StringSet.empty (fun set frame ->
+    Xlist.fold frame.meanings set (fun set (name,hipero,weight) ->
       StringSet.add set name)) in
   let senses = match t.token with
       Lemma(lemma,pos,_) -> ENIAMplWordnet.find_senses lemma pos
@@ -47,9 +47,9 @@ let find_senses t s = (* FIXME: sensy zawierające 'się' *)
     | _ -> [] in
   let senses_sie = Xlist.fold senses_sie [] (fun senses_sie (name,hipero,weight) ->
     if StringSet.mem set name then senses_sie else (name,hipero,weight) :: senses_sie) in
-  let frames = if senses = [] then s.frames else ([],senses,[]) :: s.frames in
-  let frames = if senses_sie = [] then frames else ([],senses_sie,
-    [{empty_position with role="Lemma"; mode=["lemma"]; morfs=[lex_sie]}]) :: frames in
+  let frames = if senses = [] then s.frames else {empty_frame with meanings=senses} :: s.frames in
+  let frames = if senses_sie = [] then frames else {empty_frame with meanings=senses_sie;
+    positions=[{empty_position with role="Lemma"; mode=["lemma"]; morfs=[lex_sie]}]} :: frames in (* FIXME: czy to nie usuwa elementów z ramy? *)
   {s with frames=frames}
 
 let find_selprefs schema = (* FIXME: RelationRole *)
@@ -165,13 +165,12 @@ let assign_valence tokens lex_sems group =
           selectors,ENIAMwalRenderer.render_lex_entry entry) in
       let connected = List.flatten (Xlist.map connected (fun (sopinion,fopinion,meanings,neg,pred,aspect,schema) ->
           Xlist.rev_map (ENIAMvalence.transform_entry pos lemma neg pred aspect schema) (fun (selectors,schema) ->
-              selectors,meanings,schema))) in (* FIXME: gubię opinię *)
-      let connected = Xlist.fold connected [] (fun connected (selectors,meanings,schema) ->
-          if ENIAMadjuncts.check_selector_lex_constraints lexemes pos selectors then (selectors,meanings,schema) :: connected else connected) in
-      let connected = Xlist.rev_map connected (fun (selectors,meanings,schema) ->
-          selectors,
-          Xlist.map meanings find_meaning,
-          find_selprefs (ENIAMwalRenderer.render_connected_schema (ENIAMwalReduce.set_necessary schema))) in
+              {empty_frame with selectors=selectors; meanings= Xlist.map meanings find_meaning; positions=schema}))) in (* FIXME: gubię opinię *)
+      let connected = Xlist.fold connected [] (fun connected frame ->
+          if ENIAMadjuncts.check_selector_lex_constraints lexemes pos frame.selectors then frame :: connected else connected) in
+      let connected = Xlist.rev_map connected (fun frame ->
+          {frame with
+            positions = find_selprefs (ENIAMwalRenderer.render_connected_schema (ENIAMwalReduce.set_necessary frame.positions))}) in
       let connected = List.flatten (Xlist.rev_map connected (ENIAMadjuncts.add_connected_adjuncts preps compreps compars pos2)) in
       ExtArray.set lex_sems id {(ExtArray.get lex_sems id) with
                                 schemata=schemata; lex_entries=entries; frames=connected})
@@ -218,8 +217,8 @@ let assign_valence tokens lex_sems group =
 
 let disambiguate_senses lex_sems group =
   let prefs = Xlist.fold group (StringSet.singleton "ALL") (fun prefs id ->
-    Xlist.fold (ExtArray.get lex_sems id).frames prefs (fun prefs (_,_,schema) ->
-      Xlist.fold schema prefs (fun prefs t ->
+    Xlist.fold (ExtArray.get lex_sems id).frames prefs (fun prefs frame ->
+      Xlist.fold frame.positions prefs (fun prefs t ->
         Xlist.fold t.sel_prefs prefs (fun prefs -> function
           SynsetName s -> StringSet.add prefs s
         | _ -> failwith "disambiguate_senses")))) in
@@ -231,12 +230,12 @@ let disambiguate_senses lex_sems group =
   let senses = if is_zero then StringSet.add senses "0" else senses in*)
   Xlist.iter group (fun id ->
     let t = ExtArray.get lex_sems id in
-    ExtArray.set lex_sems id {t with frames=Xlist.map t.frames (fun (selectors,meanings,positions) ->
-      let meanings = Xlist.map meanings (fun (name,hipero,weight) ->
+    ExtArray.set lex_sems id {t with frames=Xlist.map t.frames (fun frame ->
+      let meanings = Xlist.map frame.meanings (fun (name,hipero,weight) ->
         let hipero = Xlist.fold hipero ["ALL",0] (fun hipero (name,cost) ->
           if StringSet.mem prefs name then (name,cost) :: hipero else hipero) in
         name,hipero,weight) in
-      selectors,meanings,positions)})
+      {frame with meanings=meanings})})
 
 let remove_unused_tokens tokens groups =
   let set = Xlist.fold groups IntSet.empty (fun set group ->
diff --git a/lexSemantics/ENIAMlexSemanticsStringOf.ml b/lexSemantics/ENIAMlexSemanticsStringOf.ml
index 2728d5b..24f07af 100644
--- a/lexSemantics/ENIAMlexSemanticsStringOf.ml
+++ b/lexSemantics/ENIAMlexSemanticsStringOf.ml
@@ -27,6 +27,11 @@ let lex_sems t =
     let t2 = ExtArray.get t id in
     (Printf.sprintf "%3d %s" id (lex_sem t2)) :: l)))*)
 
+let arole f =
+  (if f.arole = "" then "" else "," ^ f.arole) ^
+  (if f.arole_attr = "" then "" else "," ^ f.arole_attr) ^
+  (if f.arev then ",rev"  else "")
+
 let string_of_lex_sems tokens lex_sems =
   String.concat "\n" (List.rev (Int.fold 0 (ExtArray.size lex_sems - 1) [] (fun l id ->
     let t = ExtArray.get lex_sems id in
@@ -44,9 +49,9 @@ let string_of_lex_sems tokens lex_sems =
         String.concat "," (Xlist.map meanings (fun m -> ENIAMwalStringOf.meaning m))) in
     let senses = Xlist.map t.senses (fun (sense,hipero,weight) ->
         Printf.sprintf "%s[%s]%.2f" sense (String.concat "," (Xlist.map hipero (fun (s,n) -> s ^ " " ^ string_of_int n))) weight) in*)
-    let frames = Xlist.map t.frames (fun (selectors,meanings,schema) ->
-        "*[" ^ ENIAMcategoriesPL.string_of_selectors selectors ^ "] {" ^ ENIAMwalStringOf.schema schema ^ "} " ^
-        String.concat "," (Xlist.map meanings (fun (sense,hipero,weight) ->
+    let frames = Xlist.map t.frames (fun f ->
+        "*" ^ arole f ^ "[" ^ ENIAMcategoriesPL.string_of_selectors f.selectors ^ "] {" ^ ENIAMwalStringOf.schema f.positions ^ "} " ^
+        String.concat "," (Xlist.map f.meanings (fun (sense,hipero,weight) ->
         Printf.sprintf "%s[%s]%.2f" sense (String.concat "," (Xlist.map hipero (fun (s,n) -> s ^ " " ^ string_of_int n))) weight))) in
     (String.concat "\n    " ([core] @ (*senses @*) schemata @ frames @ lex_entries)) :: l)))
     (* let lroles = if snd t.lroles = "" then fst t.lroles else fst t.lroles ^ " " ^ snd t.lroles in
diff --git a/lexSemantics/ENIAMlexSemanticsTypes.ml b/lexSemantics/ENIAMlexSemanticsTypes.ml
index 2ae0c51..20fab60 100644
--- a/lexSemantics/ENIAMlexSemanticsTypes.ml
+++ b/lexSemantics/ENIAMlexSemanticsTypes.ml
@@ -36,20 +36,30 @@ type semantics =
   | SpecialMod of string * (type_arg list * type_term)*)
   | PrepSemantics of (string * string * string * StringSet.t * string list) list (* case,role,role_attr,hipero,sel_prefs *)
 
+type frame = {
+  selectors: (ENIAM_LCGlexiconTypes.selector * ENIAM_LCGlexiconTypes.selector_relation * string list) list;
+  meanings: ((*ENIAMwalTypes.meaning **) string * (string * int) list * float) list;
+  positions: ENIAMwalTypes.position list;
+  arole: string;
+  arole_attr: string;
+  arev: bool;
+  }
+
+let empty_frame = {selectors=[]; meanings=[]; positions=[]; arole=""; arole_attr=""; arev=false}
+
 type lex_sem = {
   schemata: ((ENIAM_LCGlexiconTypes.selector * ENIAM_LCGlexiconTypes.selector_relation * string list) list *
              (ENIAM_LCGtypes.direction * ENIAM_LCGtypes.grammar_symbol) list) list;
   lex_entries: ((ENIAM_LCGlexiconTypes.selector * ENIAM_LCGlexiconTypes.selector_relation * string list) list *
                 ENIAM_LCGtypes.grammar_symbol) list;
-  frames: ((ENIAM_LCGlexiconTypes.selector * ENIAM_LCGlexiconTypes.selector_relation * string list) list *
-             ((*ENIAMwalTypes.meaning **) string * (string * int) list * float) list * ENIAMwalTypes.position list) list;
+  frames: frame list;
   cats: string list;
   (* e: labels; *)
   (* valence: (int * ENIAMwalTypes.frame) list;
   simple_valence: (int * ENIAMwalTypes.frame) list;
   very_simple_valence: ((ENIAM_LCGgrammarPLtypes.cat * ENIAM_LCGgrammarPLtypes.selector_relation * string list) list * ENIAM_LCGtypes.grammar_symbol) list; *)
   (* senses: (string * (string * int) list * float) list; *)
-  lroles: string * string;
+  (* lroles: string * string; *)
   semantics: semantics;
   }
 
@@ -64,7 +74,7 @@ type lex_sem = {
 let empty_lex_sem = {
   schemata=[]; lex_entries=[]; frames=[]; cats=["X"];
   (*e=empty_labels;*) (*valence=[]; simple_valence=[]; very_simple_valence=[];*) (*senses=[];*)
-  lroles="",""; semantics=Normal}
+  (*lroles="","";*) semantics=Normal}
 
 (* FIXME: poprawić katalog *)
 (*let subst_uncountable_lexemes_filename = resource_path ^ "/lexSemantics/subst_uncountable.dat"
diff --git a/lexSemantics/makefile b/lexSemantics/makefile
index 8a5a6f0..2b16e15 100644
--- a/lexSemantics/makefile
+++ b/lexSemantics/makefile
@@ -6,8 +6,8 @@ OCAMLFLAGS=$(INCLUDES) -g
 OCAMLOPTFLAGS=$(INCLUDES) unix.cmxa xml-light.cmxa str.cmxa nums.cmxa zip.cmxa bz2.cmxa xlib.cmxa eniam-tokenizer.cmxa eniam-morphology.cmxa eniam-subsyntax.cmxa eniam-lcg-parser.cmxa eniam-lcg-lexicon.cmxa eniam-lexSemantics.cmxa
 INSTALLDIR=`ocamlc -where`/eniam
 
-SOURCES= entries.ml ENIAMwalTypes.ml ENIAMwalStringOf.ml ENIAMwalParser.ml ENIAMwalReduce.ml ENIAMvalence.ml ENIAMwalRenderer.ml ENIAMadjuncts.ml \
-    ENIAMlexSemanticsTypes.ml ENIAMlexSemanticsStringOf.ml ENIAMlexSemanticsHTMLof.ml ENIAMlexSemanticsXMLof.ml ENIAMplWordnet.ml ENIAMlexSemantics.ml #ENIAMlexSemanticsData.ml
+SOURCES= entries.ml ENIAMwalTypes.ml ENIAMwalStringOf.ml ENIAMwalParser.ml ENIAMwalReduce.ml ENIAMvalence.ml ENIAMwalRenderer.ml ENIAMlexSemanticsTypes.ml ENIAMadjuncts.ml \
+    ENIAMlexSemanticsStringOf.ml ENIAMlexSemanticsHTMLof.ml ENIAMlexSemanticsXMLof.ml ENIAMplWordnet.ml ENIAMlexSemantics.ml #ENIAMlexSemanticsData.ml
 
 all: eniam-lexSemantics.cma eniam-lexSemantics.cmxa