diff --git a/src/plugins/aorai/aorai_utils.ml b/src/plugins/aorai/aorai_utils.ml
index dd533767fdd535a18e210bab631c394adf7946af..7f82b59785afe69677c1c8ab78cbf79ac6056e26 100644
--- a/src/plugins/aorai/aorai_utils.ml
+++ b/src/plugins/aorai/aorai_utils.ml
@@ -1982,8 +1982,45 @@ let mk_transitions_stmt generated_kf loc f st res trans =
     trans
     ([],[],Cil_datatype.Varinfo.Set.empty, Cil.zero ~loc, [])
 
+let mk_goto loc b =
+  let ghost = true in
+  match b.bstmts with
+  | [] -> Cil.mkBlock []
+  | [ { skind = Instr i } ] ->
+    let s = mkStmtOneInstr ~ghost i in
+    Cil.mkBlock [s]
+  | [ { skind = Goto (s,_) }] ->
+    let s' = mkStmt ~ghost (Goto (ref !s,loc)) in
+    Cil.mkBlock [s']
+  | s::_ ->
+    s.labels <-
+      (Label(Data_for_aorai.get_fresh "__aorai_label",loc,false)):: s.labels;
+    let s' = mkStmt ~ghost (Goto (ref s,loc)) in
+    Cil.mkBlock [s']
+
+let normalize_condition loc cond block1 block2 =
+  let rec aux cond b1 b2 =
+    match cond.enode with
+    | UnOp(LNot,e,_) -> aux e b2 b1
+    | BinOp(LAnd,e1,e2,_) ->
+      let b2' = mk_goto loc b2 in
+      let b1'= Cil.mkBlock [aux e2 b1 b2'] in
+      aux e1 b1' b2
+    | BinOp(LOr,e1,e2,_) ->
+      let b1' = mk_goto loc b1 in
+      let b2' = Cil.mkBlock [aux e2 b1' b2] in
+      aux e1 b1 b2'
+    | _ ->
+      Cil.mkStmt ~ghost:true (If(cond,b1,b2,loc))
+  in
+  aux cond block1 block2
+
 let mkIfStmt loc exp1 block1 block2 =
-  Cil.mkStmt ~ghost:true (If (exp1, block1, block2, loc))
+  if Kernel.LogicalOperators.get() then
+    Cil.mkStmt ~ghost:true (If (exp1, block1, block2, loc))
+  else
+    normalize_condition loc exp1 block1 block2
+
 
 let mk_deterministic_stmt
     generated_kf loc auto f fst status ret state
diff --git a/src/plugins/aorai/tests/Aorai_test.ml b/src/plugins/aorai/tests/Aorai_test.ml
index 2e55921a891feb5ab63598f1d24a2778f5210587..5a1e9fb9bc0c7402697be6f1d92c3e6ad0155ca9 100644
--- a/src/plugins/aorai/tests/Aorai_test.ml
+++ b/src/plugins/aorai/tests/Aorai_test.ml
@@ -111,6 +111,8 @@ let extend () =
       if ProveAuxSpec.get () then begin
         if InternalWpShare.is_set() then
           Wp.Wp_parameters.Share.set (InternalWpShare.get());
+        Wp.Wp_parameters.Split.on();
+        Wp.Wp_parameters.SplitMax.set 32;
         Wp.Wp_parameters.Verbose.set 0;
         Globals.Functions.iter check_auto_func;
       end else begin
diff --git a/src/plugins/aorai/tests/ltl/oracle/test_boucle.res.oracle b/src/plugins/aorai/tests/ltl/oracle/test_boucle.res.oracle
index 04174d4018a865d5e854376f9bd0a5aca035c5fe..c73da4393f558e64393afa9a6454a8f4abfb7f73 100644
--- a/src/plugins/aorai/tests/ltl/oracle/test_boucle.res.oracle
+++ b/src/plugins/aorai/tests/ltl/oracle/test_boucle.res.oracle
@@ -52,8 +52,9 @@ extern int call_to_an_undefined_function(void);
     T0_S2_tmp = T0_S2;
     T0_init_tmp = T0_init;
     accept_S1_tmp = accept_S1;
-    if (T0_S2 == 1 || accept_S1 == 1) accept_S1_tmp = 1;
-    else accept_S1_tmp = 0;
+    if (T0_S2 == 1) accept_S1_tmp = 1;
+    else 
+      if (accept_S1 == 1) accept_S1_tmp = 1; else accept_S1_tmp = 0;
     T0_init_tmp = 0;
     T0_S2_tmp = 0;
     T0_S2 = T0_S2_tmp;
@@ -160,7 +161,9 @@ int a(void)
     accept_S1_tmp = accept_S1;
     accept_S1_tmp = 0;
     T0_init_tmp = 0;
-    if (T0_S2 == 1 || accept_S1 == 1) T0_S2_tmp = 1; else T0_S2_tmp = 0;
+    if (T0_S2 == 1) T0_S2_tmp = 1;
+    else 
+      if (accept_S1 == 1) T0_S2_tmp = 1; else T0_S2_tmp = 0;
     T0_S2 = T0_S2_tmp;
     T0_init = T0_init_tmp;
     accept_S1 = accept_S1_tmp;
diff --git a/src/plugins/aorai/tests/ltl/oracle/test_boucle1.res.oracle b/src/plugins/aorai/tests/ltl/oracle/test_boucle1.res.oracle
index aed1c6cbbf0e5f8c0333d3b2038f72c2d1e6412f..380098d2be6df47bfad67f24d8de850dee8dfae4 100644
--- a/src/plugins/aorai/tests/ltl/oracle/test_boucle1.res.oracle
+++ b/src/plugins/aorai/tests/ltl/oracle/test_boucle1.res.oracle
@@ -274,10 +274,12 @@ int commit_trans(void)
     accept_S4_tmp = accept_S4;
     accept_init_tmp = accept_init;
     accept_init_tmp = 0;
-    if (accept_S2 == 1 && status != 0) accept_S4_tmp = 1;
+    if (accept_S2 == 1) 
+      if (status != 0) accept_S4_tmp = 1; else accept_S4_tmp = 0;
     else accept_S4_tmp = 0;
     accept_S3_tmp = 0;
-    if (accept_S2 == 1 && status == 0) accept_S2_tmp = 1;
+    if (accept_S2 == 1) 
+      if (status == 0) accept_S2_tmp = 1; else accept_S2_tmp = 0;
     else accept_S2_tmp = 0;
     accept_S1_tmp = 0;
     accept_S1 = accept_S1_tmp;
diff --git a/src/plugins/aorai/tests/ltl/oracle/test_boucle2.res.oracle b/src/plugins/aorai/tests/ltl/oracle/test_boucle2.res.oracle
index 9ab4d87d9cc4fec37cb7161c6985fbba348376e2..53bd6b3751c7e1c995c8b53d2f12fa3a9776191e 100644
--- a/src/plugins/aorai/tests/ltl/oracle/test_boucle2.res.oracle
+++ b/src/plugins/aorai/tests/ltl/oracle/test_boucle2.res.oracle
@@ -145,7 +145,9 @@ int rr = 1;
     accept_all_tmp = 0;
     accept_S5_tmp = 0;
     accept_S4_tmp = 0;
-    if (T0_S2 == 1 && rr == 51) accept_S3_tmp = 1; else accept_S3_tmp = 0;
+    if (T0_S2 == 1) 
+      if (rr == 51) accept_S3_tmp = 1; else accept_S3_tmp = 0;
+    else accept_S3_tmp = 0;
     T0_init_tmp = 0;
     if (T0_S2 == 1) T0_S2_tmp = 1; else T0_S2_tmp = 0;
     T0_S2 = T0_S2_tmp;
diff --git a/src/plugins/aorai/tests/ltl/oracle/test_boucle3.res.oracle b/src/plugins/aorai/tests/ltl/oracle/test_boucle3.res.oracle
index 8b2d1dbb5f25e9a5e7ce4f93d939320ceff7e03c..3a2a6c4f72338186ea42486373370530ef384072 100644
--- a/src/plugins/aorai/tests/ltl/oracle/test_boucle3.res.oracle
+++ b/src/plugins/aorai/tests/ltl/oracle/test_boucle3.res.oracle
@@ -238,7 +238,9 @@ void opa(void)
     accept_S3_tmp = accept_S3;
     accept_all_tmp = accept_all;
     accept_all_tmp = 0;
-    if (T1_S2 == 1 && rr == 51) accept_S3_tmp = 1; else accept_S3_tmp = 0;
+    if (T1_S2 == 1) 
+      if (rr == 51) accept_S3_tmp = 1; else accept_S3_tmp = 0;
+    else accept_S3_tmp = 0;
     T1_S2_tmp = 0;
     T0_init_tmp = 0;
     T0_S4_tmp = 0;
diff --git a/src/plugins/aorai/tests/ltl/oracle/test_factorial.res.oracle b/src/plugins/aorai/tests/ltl/oracle/test_factorial.res.oracle
index 4a0a9031b26157edb32bc4646da67494a4734c6d..12e9c8f60dc291511217340bc30fafb366f2f3fb 100644
--- a/src/plugins/aorai/tests/ltl/oracle/test_factorial.res.oracle
+++ b/src/plugins/aorai/tests/ltl/oracle/test_factorial.res.oracle
@@ -219,8 +219,9 @@ int decode_int(char *s)
     accept_S2_tmp = accept_S2;
     accept_init_tmp = accept_init;
     accept_init_tmp = 0;
-    if (accept_S1 == 1 || accept_S2 == 1) accept_S2_tmp = 1;
-    else accept_S2_tmp = 0;
+    if (accept_S1 == 1) accept_S2_tmp = 1;
+    else 
+      if (accept_S2 == 1) accept_S2_tmp = 1; else accept_S2_tmp = 0;
     accept_S1_tmp = 0;
     accept_S1 = accept_S1_tmp;
     accept_S2 = accept_S2_tmp;
@@ -268,10 +269,12 @@ int decode_int(char *s)
     accept_S2_tmp = accept_S2;
     accept_init_tmp = accept_init;
     accept_init_tmp = 0;
-    if (accept_S1 == 1 || accept_S2 == 1) accept_S2_tmp = 1;
-    else accept_S2_tmp = 0;
-    if (accept_S1 == 1 || accept_S2 == 1) accept_S1_tmp = 1;
-    else accept_S1_tmp = 0;
+    if (accept_S1 == 1) accept_S2_tmp = 1;
+    else 
+      if (accept_S2 == 1) accept_S2_tmp = 1; else accept_S2_tmp = 0;
+    if (accept_S1 == 1) accept_S1_tmp = 1;
+    else 
+      if (accept_S2 == 1) accept_S1_tmp = 1; else accept_S1_tmp = 0;
     accept_S1 = accept_S1_tmp;
     accept_S2 = accept_S2_tmp;
     accept_init = accept_init_tmp;
diff --git a/src/plugins/aorai/tests/ltl/oracle/test_recursion2.0.res.oracle b/src/plugins/aorai/tests/ltl/oracle/test_recursion2.0.res.oracle
index 6dda5c9d85b5c4ff6209a1347863c8efd0b1838b..472c3f9634c29c43ec8273961105b4c878899557 100644
--- a/src/plugins/aorai/tests/ltl/oracle/test_recursion2.0.res.oracle
+++ b/src/plugins/aorai/tests/ltl/oracle/test_recursion2.0.res.oracle
@@ -106,7 +106,11 @@ int global_argc = 0;
     accept_T2_tmp = 0;
     T1_tmp = 0;
     T0_init_tmp = 0;
-    if (S1 == 1 || T1 == 1 && global_argc > 0) S1_tmp = 1; else S1_tmp = 0;
+    if (S1 == 1) S1_tmp = 1;
+    else 
+      if (T1 == 1) 
+        if (global_argc > 0) S1_tmp = 1; else S1_tmp = 0;
+      else S1_tmp = 0;
     S1 = S1_tmp;
     T0_init = T0_init_tmp;
     T1 = T1_tmp;
diff --git a/src/plugins/aorai/tests/ltl/oracle/test_recursion2.1.res.oracle b/src/plugins/aorai/tests/ltl/oracle/test_recursion2.1.res.oracle
index aabed966d5a0f114ae66bb87c5b263bab35d8e27..e2146d41412e9144e1265cbb91f6f41e68582095 100644
--- a/src/plugins/aorai/tests/ltl/oracle/test_recursion2.1.res.oracle
+++ b/src/plugins/aorai/tests/ltl/oracle/test_recursion2.1.res.oracle
@@ -106,7 +106,11 @@ int global_argc = 0;
     accept_T2_tmp = 0;
     T1_tmp = 0;
     T0_init_tmp = 0;
-    if (S1 == 1 || T1 == 1 && global_argc > 0) S1_tmp = 1; else S1_tmp = 0;
+    if (S1 == 1) S1_tmp = 1;
+    else 
+      if (T1 == 1) 
+        if (global_argc > 0) S1_tmp = 1; else S1_tmp = 0;
+      else S1_tmp = 0;
     S1 = S1_tmp;
     T0_init = T0_init_tmp;
     T1 = T1_tmp;
@@ -420,7 +424,9 @@ int sumOne(char *t, int length)
     T0_init_tmp = T0_init;
     T1_tmp = T1;
     accept_T2_tmp = accept_T2;
-    if (T1 == 1 && res == 1) accept_T2_tmp = 1; else accept_T2_tmp = 0;
+    if (T1 == 1) 
+      if (res == 1) accept_T2_tmp = 1; else accept_T2_tmp = 0;
+    else accept_T2_tmp = 0;
     if (T1 == 1) T1_tmp = 1; else T1_tmp = 0;
     T0_init_tmp = 0;
     S1_tmp = 0;
diff --git a/src/plugins/aorai/tests/ltl/oracle/test_switch3.res.oracle b/src/plugins/aorai/tests/ltl/oracle/test_switch3.res.oracle
index 3b0822025db85b3f78f088c4147467d42c4385fc..5d44a348df90c22551cf1d62388fede7e482438b 100644
--- a/src/plugins/aorai/tests/ltl/oracle/test_switch3.res.oracle
+++ b/src/plugins/aorai/tests/ltl/oracle/test_switch3.res.oracle
@@ -58,7 +58,9 @@ enum aorai_OpStatusList {
     accept_S2_tmp = 0;
     accept_S1_tmp = 0;
     T0_init_tmp = 0;
-    if (T0_S2 == 1 || accept_S2 == 1) T0_S2_tmp = 1; else T0_S2_tmp = 0;
+    if (T0_S2 == 1) T0_S2_tmp = 1;
+    else 
+      if (accept_S2 == 1) T0_S2_tmp = 1; else T0_S2_tmp = 0;
     T0_S2 = T0_S2_tmp;
     T0_init = T0_init_tmp;
     accept_S1 = accept_S1_tmp;
@@ -250,10 +252,14 @@ int countOne(char *argv)
     T0_init_tmp = T0_init;
     accept_S1_tmp = accept_S1;
     accept_S2_tmp = accept_S2;
-    if (T0_S2 == 1 || accept_S2 == 1) accept_S2_tmp = 1;
-    else accept_S2_tmp = 0;
-    if ((T0_S2 == 1 || accept_S1 == 1) || accept_S2 == 1) accept_S1_tmp = 1;
-    else accept_S1_tmp = 0;
+    if (T0_S2 == 1) accept_S2_tmp = 1;
+    else 
+      if (accept_S2 == 1) accept_S2_tmp = 1; else accept_S2_tmp = 0;
+    if (T0_S2 == 1) accept_S1_tmp = 1;
+    else 
+      if (accept_S1 == 1) accept_S1_tmp = 1;
+      else 
+        if (accept_S2 == 1) accept_S1_tmp = 1; else accept_S1_tmp = 0;
     T0_init_tmp = 0;
     if (accept_S1 == 1) T0_S2_tmp = 1; else T0_S2_tmp = 0;
     T0_S2 = T0_S2_tmp;
diff --git a/src/plugins/aorai/tests/ltl/oracle/test_switch3_if.res.oracle b/src/plugins/aorai/tests/ltl/oracle/test_switch3_if.res.oracle
index 74f48874eb313e191b4918e670f2126e8843de58..64fcb6cad31a3fd1d0edcfd1e41dc6472e8e270e 100644
--- a/src/plugins/aorai/tests/ltl/oracle/test_switch3_if.res.oracle
+++ b/src/plugins/aorai/tests/ltl/oracle/test_switch3_if.res.oracle
@@ -58,7 +58,9 @@ enum aorai_OpStatusList {
     accept_S2_tmp = 0;
     accept_S1_tmp = 0;
     T0_init_tmp = 0;
-    if (T0_S2 == 1 || accept_S2 == 1) T0_S2_tmp = 1; else T0_S2_tmp = 0;
+    if (T0_S2 == 1) T0_S2_tmp = 1;
+    else 
+      if (accept_S2 == 1) T0_S2_tmp = 1; else T0_S2_tmp = 0;
     T0_S2 = T0_S2_tmp;
     T0_init = T0_init_tmp;
     accept_S1 = accept_S1_tmp;
@@ -248,10 +250,14 @@ int countOne(char *argv)
     T0_init_tmp = T0_init;
     accept_S1_tmp = accept_S1;
     accept_S2_tmp = accept_S2;
-    if (T0_S2 == 1 || accept_S2 == 1) accept_S2_tmp = 1;
-    else accept_S2_tmp = 0;
-    if ((T0_S2 == 1 || accept_S1 == 1) || accept_S2 == 1) accept_S1_tmp = 1;
-    else accept_S1_tmp = 0;
+    if (T0_S2 == 1) accept_S2_tmp = 1;
+    else 
+      if (accept_S2 == 1) accept_S2_tmp = 1; else accept_S2_tmp = 0;
+    if (T0_S2 == 1) accept_S1_tmp = 1;
+    else 
+      if (accept_S1 == 1) accept_S1_tmp = 1;
+      else 
+        if (accept_S2 == 1) accept_S1_tmp = 1; else accept_S1_tmp = 0;
     T0_init_tmp = 0;
     if (accept_S1 == 1) T0_S2_tmp = 1; else T0_S2_tmp = 0;
     T0_S2 = T0_S2_tmp;
diff --git a/src/plugins/aorai/tests/ltl/oracle/test_switch3_return.res.oracle b/src/plugins/aorai/tests/ltl/oracle/test_switch3_return.res.oracle
index e4f973d66d554a0ac72c98aca30e5600442a4cc3..e3db4bca9bbca6c70ccb238ce9743beef46f94f4 100644
--- a/src/plugins/aorai/tests/ltl/oracle/test_switch3_return.res.oracle
+++ b/src/plugins/aorai/tests/ltl/oracle/test_switch3_return.res.oracle
@@ -58,7 +58,9 @@ enum aorai_OpStatusList {
     accept_S2_tmp = 0;
     accept_S1_tmp = 0;
     T0_init_tmp = 0;
-    if (T0_S2 == 1 || accept_S2 == 1) T0_S2_tmp = 1; else T0_S2_tmp = 0;
+    if (T0_S2 == 1) T0_S2_tmp = 1;
+    else 
+      if (accept_S2 == 1) T0_S2_tmp = 1; else T0_S2_tmp = 0;
     T0_S2 = T0_S2_tmp;
     T0_init = T0_init_tmp;
     accept_S1 = accept_S1_tmp;
@@ -255,10 +257,14 @@ int countOne(char *argv)
     T0_init_tmp = T0_init;
     accept_S1_tmp = accept_S1;
     accept_S2_tmp = accept_S2;
-    if (T0_S2 == 1 || accept_S2 == 1) accept_S2_tmp = 1;
-    else accept_S2_tmp = 0;
-    if ((T0_S2 == 1 || accept_S1 == 1) || accept_S2 == 1) accept_S1_tmp = 1;
-    else accept_S1_tmp = 0;
+    if (T0_S2 == 1) accept_S2_tmp = 1;
+    else 
+      if (accept_S2 == 1) accept_S2_tmp = 1; else accept_S2_tmp = 0;
+    if (T0_S2 == 1) accept_S1_tmp = 1;
+    else 
+      if (accept_S1 == 1) accept_S1_tmp = 1;
+      else 
+        if (accept_S2 == 1) accept_S1_tmp = 1; else accept_S1_tmp = 0;
     T0_init_tmp = 0;
     if (accept_S1 == 1) T0_S2_tmp = 1; else T0_S2_tmp = 0;
     T0_S2 = T0_S2_tmp;
diff --git a/src/plugins/aorai/tests/ltl/oracle_prove/test_boucle.res.oracle b/src/plugins/aorai/tests/ltl/oracle_prove/test_boucle.res.oracle
index e3d5ec00773c630fcd03a506eaec86aa0b0777ee..db979fdb7c87c7b1d15c858c8fe51e570b729a72 100644
--- a/src/plugins/aorai/tests/ltl/oracle_prove/test_boucle.res.oracle
+++ b/src/plugins/aorai/tests/ltl/oracle_prove/test_boucle.res.oracle
@@ -3,5 +3,5 @@
   Calling undeclared function call_to_an_undefined_function. Old style K&R code?
 [kernel] Parsing TMPDIR/aorai_test_boucle_0.i (no preprocessing)
 [wp] Warning: Missing RTE guards
-[kernel:annot:missing-spec] TMPDIR/aorai_test_boucle_0.i:86: Warning: 
+[kernel:annot:missing-spec] TMPDIR/aorai_test_boucle_0.i:87: Warning: 
   Neither code nor specification for function call_to_an_undefined_function, generating default assigns from the prototype
diff --git a/src/plugins/aorai/tests/ya/logical_operators.i b/src/plugins/aorai/tests/ya/logical_operators.i
new file mode 100644
index 0000000000000000000000000000000000000000..1dcbba59346f608a433691d0d549058a6d6a22f8
--- /dev/null
+++ b/src/plugins/aorai/tests/ya/logical_operators.i
@@ -0,0 +1,9 @@
+/* run.config*
+   OPT: -aorai-automata @PTEST_DIR@/@PTEST_NAME@.ya -load-module tests/Aorai_test.cmxs -aorai-test-number @PTEST_NUMBER@ @PROVE_OPTIONS@
+*/
+
+void f(int x) {}
+
+void main(int x) {
+  f(x);
+}
diff --git a/src/plugins/aorai/tests/ya/logical_operators.ya b/src/plugins/aorai/tests/ya/logical_operators.ya
new file mode 100644
index 0000000000000000000000000000000000000000..5baf089d910caa355d0abaecda90f3ea3fd1410e
--- /dev/null
+++ b/src/plugins/aorai/tests/ya/logical_operators.ya
@@ -0,0 +1,3 @@
+%init : I;
+
+I: { f().x == 1 } -> I | other -> I;
diff --git a/src/plugins/aorai/tests/ya/oracle/aorai_ptr_field.res.oracle b/src/plugins/aorai/tests/ya/oracle/aorai_ptr_field.res.oracle
index d8cb4fbaee53d3fb52af093090ef0d12c43002b7..1c1744e5f85a9dd5177e9d97d6bab2884fdbce64 100644
--- a/src/plugins/aorai/tests/ya/oracle/aorai_ptr_field.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/aorai_ptr_field.res.oracle
@@ -42,8 +42,15 @@ enum aorai_OpStatusList {
     aorai_CurOperation = op_main;
     S0_tmp = S0;
     S1_tmp = S1;
-    if (S0 == 1 && s->x >= 0 || S0 == 1 && s->x < 0) S1_tmp = 1;
-    else S1_tmp = 0;
+    if (S0 == 1) {
+      if (s->x >= 0) S1_tmp = 1; else goto __aorai_label;
+    }
+    else {
+      __aorai_label: ;
+      if (S0 == 1) 
+        if (s->x < 0) S1_tmp = 1; else S1_tmp = 0;
+      else S1_tmp = 0;
+    }
     S0_tmp = 0;
     S0 = S0_tmp;
     S1 = S1_tmp;
diff --git a/src/plugins/aorai/tests/ya/oracle/deterministic.res.oracle b/src/plugins/aorai/tests/ya/oracle/deterministic.res.oracle
index 7982cfe7c164fba8bf8e9d1f82290612f4c4ac4c..a48b55abef97f7cbdafffbffb7101d900aa056e5 100644
--- a/src/plugins/aorai/tests/ya/oracle/deterministic.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/deterministic.res.oracle
@@ -112,10 +112,16 @@ check lemma S0_deterministic_trans{L}:
     /@ slevel full; @/
     aorai_CurOpStatus = aorai_Called;
     aorai_CurOperation = op_g;
-    if (3 == aorai_CurStates && x == 4) aorai_CurStates = S4;
-    else 
-      if (3 == aorai_CurStates && x == 5) aorai_CurStates = S5;
+    if (3 == aorai_CurStates) {
+      if (x == 4) aorai_CurStates = S4; else goto __aorai_label;
+    }
+    else {
+      __aorai_label: ;
+      if (3 == aorai_CurStates) 
+        if (x == 5) aorai_CurStates = S5;
+        else aorai_CurStates = aorai_reject;
       else aorai_CurStates = aorai_reject;
+    }
     return;
   }
 
@@ -241,7 +247,8 @@ void g(int x)
     /@ slevel full; @/
     aorai_CurOpStatus = aorai_Called;
     aorai_CurOperation = op_f;
-    if (1 == aorai_CurStates && x == 4) aorai_CurStates = S3;
+    if (1 == aorai_CurStates) 
+      if (x == 4) aorai_CurStates = S3; else aorai_CurStates = aorai_reject;
     else aorai_CurStates = aorai_reject;
     return;
   }
@@ -292,7 +299,11 @@ void g(int x)
     /@ slevel full; @/
     aorai_CurOpStatus = aorai_Terminated;
     aorai_CurOperation = op_f;
-    if (1 == aorai_CurStates && (res == 0 && X == 5)) aorai_CurStates = S2;
+    if (1 == aorai_CurStates) 
+      if (res == 0) 
+        if (X == 5) aorai_CurStates = S2;
+        else aorai_CurStates = aorai_reject;
+      else aorai_CurStates = aorai_reject;
     else aorai_CurStates = aorai_reject;
     return;
   }
@@ -368,10 +379,16 @@ int f(int x)
     /@ slevel full; @/
     aorai_CurOpStatus = aorai_Called;
     aorai_CurOperation = op_real_main;
-    if (0 == aorai_CurStates && c != 0) aorai_CurStates = S1;
-    else 
-      if (0 == aorai_CurStates && c == 0) aorai_CurStates = S2;
+    if (0 == aorai_CurStates) {
+      if (c != 0) aorai_CurStates = S1; else goto __aorai_label_0;
+    }
+    else {
+      __aorai_label_0: ;
+      if (0 == aorai_CurStates) 
+        if (c == 0) aorai_CurStates = S2;
+        else aorai_CurStates = aorai_reject;
       else aorai_CurStates = aorai_reject;
+    }
     return;
   }
 
diff --git a/src/plugins/aorai/tests/ya/oracle/formals.res.oracle b/src/plugins/aorai/tests/ya/oracle/formals.res.oracle
index 2d0f4d7bd8a2b0705c729447d09852dccb1f85e3..7e1393cfc29594234a1d203fb323b5cdd1906330 100644
--- a/src/plugins/aorai/tests/ya/oracle/formals.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/formals.res.oracle
@@ -131,16 +131,23 @@ check lemma aorai_intermediate_state_deterministic_trans{L}:
     /@ slevel full; @/
     aorai_CurOpStatus = aorai_Called;
     aorai_CurOperation = op_f;
-    if (7 == aorai_CurStates && x == 1) {
-      aorai_CurStates = aorai_intermediate_state;
-      aorai_x = x;
-    }
-    else 
-      if (7 == aorai_CurStates && x == 3) {
-        aorai_CurStates = aorai_intermediate_state_2;
-        aorai_x_0 = x;
+    if (7 == aorai_CurStates) {
+      if (x == 1) {
+        aorai_CurStates = aorai_intermediate_state;
+        aorai_x = x;
       }
+      else goto __aorai_label;
+    }
+    else {
+      __aorai_label: ;
+      if (7 == aorai_CurStates) 
+        if (x == 3) {
+          aorai_CurStates = aorai_intermediate_state_2;
+          aorai_x_0 = x;
+        }
+        else aorai_CurStates = aorai_reject;
       else aorai_CurStates = aorai_reject;
+    }
     return;
   }
 
@@ -214,14 +221,30 @@ check lemma aorai_intermediate_state_deterministic_trans{L}:
     /@ slevel full; @/
     aorai_CurOpStatus = aorai_Terminated;
     aorai_CurOperation = op_f;
-    if (4 == aorai_CurStates && aorai_x_0 == 3) aorai_CurStates = OK;
-    else 
-      if (1 == aorai_CurStates && aorai_x == 1) aorai_CurStates = aorai_intermediate_state_0;
-      else 
-        if (4 == aorai_CurStates && aorai_x_0 != 3) aorai_CurStates = aorai_reject;
-        else 
-          if (1 == aorai_CurStates && aorai_x != 1) aorai_CurStates = aorai_reject;
+    if (4 == aorai_CurStates) {
+      if (aorai_x_0 == 3) aorai_CurStates = OK; else goto __aorai_label_2;
+    }
+    else {
+      __aorai_label_2: ;
+      if (1 == aorai_CurStates) {
+        if (aorai_x == 1) aorai_CurStates = aorai_intermediate_state_0;
+        else goto __aorai_label_1;
+      }
+      else {
+        __aorai_label_1: ;
+        if (4 == aorai_CurStates) {
+          if (aorai_x_0 != 3) aorai_CurStates = aorai_reject;
+          else goto __aorai_label_0;
+        }
+        else {
+          __aorai_label_0: ;
+          if (1 == aorai_CurStates) 
+            if (aorai_x != 1) aorai_CurStates = aorai_reject;
+            else aorai_CurStates = aorai_reject;
           else aorai_CurStates = aorai_reject;
+        }
+      }
+    }
     return;
   }
 
@@ -422,14 +445,20 @@ int f(int x)
     /@ slevel full; @/
     aorai_CurOpStatus = aorai_Terminated;
     aorai_CurOperation = op_g;
-    if (3 == aorai_CurStates && aorai_y == 2) aorai_CurStates = OK;
-    else 
+    if (3 == aorai_CurStates) {
+      if (aorai_y == 2) aorai_CurStates = OK; else goto __aorai_label_3;
+    }
+    else {
+      __aorai_label_3: ;
       if (0 == aorai_CurStates) aorai_CurStates = OK;
       else 
         if (5 == aorai_CurStates) aorai_CurStates = aorai_reject;
         else 
-          if (3 == aorai_CurStates && aorai_y != 2) aorai_CurStates = aorai_reject;
+          if (3 == aorai_CurStates) 
+            if (aorai_y != 2) aorai_CurStates = aorai_reject;
+            else aorai_CurStates = aorai_reject;
           else aorai_CurStates = aorai_reject;
+    }
     return;
   }
 
diff --git a/src/plugins/aorai/tests/ya/oracle/hoare_seq.res.oracle b/src/plugins/aorai/tests/ya/oracle/hoare_seq.res.oracle
index 29ffb1ff422b6b31e10952122c05b1f1ff1d650c..e12c959752873c4d604e10d17aab160fa76caab2 100644
--- a/src/plugins/aorai/tests/ya/oracle/hoare_seq.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/hoare_seq.res.oracle
@@ -317,10 +317,14 @@ int main_bhv_bhv(int c); */
     aorai_reject_tmp = 0;
     aorai_intermediate_state_2_tmp = 0;
     aorai_intermediate_state_1_tmp = 0;
-    if (S0 == 1 && c <= 0) aorai_intermediate_state_0_tmp = 1;
+    if (S0 == 1) 
+      if (c <= 0) aorai_intermediate_state_0_tmp = 1;
+      else aorai_intermediate_state_0_tmp = 0;
     else aorai_intermediate_state_0_tmp = 0;
     bhv_aux = main_bhv_bhv(c);
-    if (S0 == 1 && bhv_aux) aorai_intermediate_state_tmp = 1;
+    if (S0 == 1) 
+      if (bhv_aux) aorai_intermediate_state_tmp = 1;
+      else aorai_intermediate_state_tmp = 0;
     else aorai_intermediate_state_tmp = 0;
     Sf_tmp = 0;
     S0_tmp = 0;
@@ -409,17 +413,25 @@ int main_bhv_bhv(int c); */
     aorai_intermediate_state_1_tmp = aorai_intermediate_state_1;
     aorai_intermediate_state_2_tmp = aorai_intermediate_state_2;
     aorai_reject_tmp = aorai_reject;
-    if ((aorai_intermediate_state_0 == 1 || aorai_intermediate_state_2 == 1 && 
-                                            res != 0) || aorai_reject == 1) 
-      aorai_reject_tmp = 1;
-    else aorai_reject_tmp = 0;
+    if (aorai_intermediate_state_0 == 1) aorai_reject_tmp = 1;
+    else 
+      if (aorai_intermediate_state_2 == 1) {
+        if (res != 0) aorai_reject_tmp = 1; else goto __aorai_label;
+      }
+      else {
+        __aorai_label: ;
+        if (aorai_reject == 1) aorai_reject_tmp = 1;
+        else aorai_reject_tmp = 0;
+      }
     aorai_intermediate_state_2_tmp = 0;
     aorai_intermediate_state_1_tmp = 0;
     aorai_intermediate_state_0_tmp = 0;
     aorai_intermediate_state_tmp = 0;
-    if (aorai_intermediate_state == 1 || aorai_intermediate_state_2 == 1 && 
-                                         res == 0) Sf_tmp = 1;
-    else Sf_tmp = 0;
+    if (aorai_intermediate_state == 1) Sf_tmp = 1;
+    else 
+      if (aorai_intermediate_state_2 == 1) 
+        if (res == 0) Sf_tmp = 1; else Sf_tmp = 0;
+      else Sf_tmp = 0;
     S0_tmp = 0;
     S0 = S0_tmp;
     Sf = Sf_tmp;
diff --git a/src/plugins/aorai/tests/ya/oracle/logical_operators.res.oracle b/src/plugins/aorai/tests/ya/oracle/logical_operators.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..ceb4a227b1d51c000271a29f18529f2f427b3e0b
--- /dev/null
+++ b/src/plugins/aorai/tests/ya/oracle/logical_operators.res.oracle
@@ -0,0 +1,164 @@
+[kernel] Parsing tests/ya/logical_operators.i (no preprocessing)
+[kernel] Parsing TMPDIR/aorai_logical_operators_0.i (no preprocessing)
+/* Generated by Frama-C */
+enum aorai_ListOper {
+    op_f = 1,
+    op_main = 0
+};
+enum aorai_OpStatusList {
+    aorai_Terminated = 1,
+    aorai_Called = 0
+};
+/*@ ghost enum aorai_ListOper aorai_CurOperation; */
+/*@ ghost enum aorai_OpStatusList aorai_CurOpStatus; */
+/*@ ghost int I = 1; */
+/*@ ghost
+  /@ requires 1 ≡ I;
+     requires 1 ≡ I ⇒ x ≡ 1 ∨ x ≢ 1;
+     ensures aorai_CurOpStatus ≡ aorai_Called;
+     ensures aorai_CurOperation ≡ op_f;
+     assigns aorai_CurOpStatus, aorai_CurOperation, I;
+     
+     behavior buch_state_I_in:
+       assumes 1 ≡ I ∧ (x ≡ 1 ∨ x ≢ 1);
+       ensures 1 ≡ I;
+     
+     behavior buch_state_I_out:
+       assumes 0 ≡ I ∨ (¬(x ≡ 1) ∧ ¬(x ≢ 1));
+       ensures 0 ≡ I;
+   @/
+  void f_pre_func(int x)
+  {
+    int I_tmp;
+    /@ slevel full; @/
+    aorai_CurOpStatus = aorai_Called;
+    aorai_CurOperation = op_f;
+    I_tmp = I;
+    if (I == 1) {
+      if (x != 1) I_tmp = 1; else goto __aorai_label;
+    }
+    else {
+      __aorai_label: ;
+      if (I == 1) 
+        if (x == 1) I_tmp = 1; else I_tmp = 0;
+      else I_tmp = 0;
+    }
+    I = I_tmp;
+    return;
+  }
+
+*/
+
+/*@ ghost
+  /@ requires 1 ≡ I;
+     ensures aorai_CurOpStatus ≡ aorai_Terminated;
+     ensures aorai_CurOperation ≡ op_f;
+     assigns aorai_CurOpStatus, aorai_CurOperation, I;
+     
+     behavior buch_state_I_in:
+       assumes 1 ≡ I;
+       ensures 1 ≡ I;
+     
+     behavior buch_state_I_out:
+       assumes 0 ≡ I;
+       ensures 0 ≡ I;
+   @/
+  void f_post_func(void)
+  {
+    int I_tmp;
+    /@ slevel full; @/
+    aorai_CurOpStatus = aorai_Terminated;
+    aorai_CurOperation = op_f;
+    I_tmp = I;
+    if (I == 1) I_tmp = 1; else I_tmp = 0;
+    I = I_tmp;
+    return;
+  }
+
+*/
+
+/*@ requires 1 ≡ I;
+    requires 1 ≡ I ⇒ x ≡ 1 ∨ x ≢ 1;
+    
+    behavior Buchi_property_behavior:
+      ensures \true;
+      ensures 1 ≡ I;
+ */
+void f(int x)
+{
+  /*@ ghost f_pre_func(x); */
+  /*@ ghost f_post_func(); */
+  return;
+}
+
+/*@ ghost
+  /@ requires 1 ≡ I;
+     ensures aorai_CurOpStatus ≡ aorai_Called;
+     ensures aorai_CurOperation ≡ op_main;
+     assigns aorai_CurOpStatus, aorai_CurOperation, I;
+     
+     behavior buch_state_I_in:
+       assumes 1 ≡ I;
+       ensures 1 ≡ I;
+     
+     behavior buch_state_I_out:
+       assumes 0 ≡ I;
+       ensures 0 ≡ I;
+   @/
+  void main_pre_func(int x)
+  {
+    int I_tmp;
+    /@ slevel full; @/
+    aorai_CurOpStatus = aorai_Called;
+    aorai_CurOperation = op_main;
+    I_tmp = I;
+    if (I == 1) I_tmp = 1; else I_tmp = 0;
+    I = I_tmp;
+    return;
+  }
+
+*/
+
+/*@ ghost
+  /@ requires 1 ≡ I;
+     ensures aorai_CurOpStatus ≡ aorai_Terminated;
+     ensures aorai_CurOperation ≡ op_main;
+     assigns aorai_CurOpStatus, aorai_CurOperation, I;
+     
+     behavior buch_state_I_in:
+       assumes 1 ≡ I;
+       ensures 1 ≡ I;
+     
+     behavior buch_state_I_out:
+       assumes 0 ≡ I;
+       ensures 0 ≡ I;
+   @/
+  void main_post_func(void)
+  {
+    int I_tmp;
+    /@ slevel full; @/
+    aorai_CurOpStatus = aorai_Terminated;
+    aorai_CurOperation = op_main;
+    I_tmp = I;
+    if (I == 1) I_tmp = 1; else I_tmp = 0;
+    I = I_tmp;
+    return;
+  }
+
+*/
+
+/*@ requires 1 ≡ I;
+    
+    behavior Buchi_property_behavior:
+      ensures \true;
+      ensures 1 ≡ I;
+ */
+void main(int x)
+{
+  /*@ ghost main_pre_func(x); */
+  f(x);
+  /*@ ghost main_post_func(); */
+  return;
+}
+
+
diff --git a/src/plugins/aorai/tests/ya/oracle/loop_bts1050.res.oracle b/src/plugins/aorai/tests/ya/oracle/loop_bts1050.res.oracle
index 6569b67175a8280471a8c3cb305840c14053e5e4..a841b2ae6cb354b8356ef6085aed341366e607fb 100644
--- a/src/plugins/aorai/tests/ya/oracle/loop_bts1050.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/loop_bts1050.res.oracle
@@ -95,10 +95,14 @@ enum aorai_OpStatusList {
     aorai_intermediate_state_3_tmp = aorai_intermediate_state_3;
     aorai_intermediate_state_3_tmp = 0;
     aorai_intermediate_state_2_tmp = 0;
-    if (aorai_intermediate_state == 1 || aorai_intermediate_state_0 == 1 && 
-                                         aorai_counter < 5) aorai_intermediate_state_1_tmp = 1;
-    else aorai_intermediate_state_1_tmp = 0;
-    if (aorai_intermediate_state_0 == 1 && aorai_counter < 5) aorai_counter ++;
+    if (aorai_intermediate_state == 1) aorai_intermediate_state_1_tmp = 1;
+    else 
+      if (aorai_intermediate_state_0 == 1) 
+        if (aorai_counter < 5) aorai_intermediate_state_1_tmp = 1;
+        else aorai_intermediate_state_1_tmp = 0;
+      else aorai_intermediate_state_1_tmp = 0;
+    if (aorai_intermediate_state_0 == 1) 
+      if (aorai_counter < 5) aorai_counter ++;
     if (aorai_intermediate_state == 1) aorai_counter = 1;
     aorai_intermediate_state_0_tmp = 0;
     aorai_intermediate_state_tmp = 0;
@@ -544,9 +548,9 @@ void g(void)
     aorai_intermediate_state_1_tmp = 0;
     aorai_intermediate_state_0_tmp = 0;
     aorai_intermediate_state_tmp = 0;
-    if (aorai_intermediate_state == 1 || aorai_intermediate_state_0 == 1) 
-      Sf_tmp = 1;
-    else Sf_tmp = 0;
+    if (aorai_intermediate_state == 1) Sf_tmp = 1;
+    else 
+      if (aorai_intermediate_state_0 == 1) Sf_tmp = 1; else Sf_tmp = 0;
     S0_tmp = 0;
     S0 = S0_tmp;
     Sf = Sf_tmp;
diff --git a/src/plugins/aorai/tests/ya/oracle/metavariables-right.res.oracle b/src/plugins/aorai/tests/ya/oracle/metavariables-right.res.oracle
index 1ad02912fd111f3df968455278a5dfbb2ae8e8f7..e0f52649ef1a85e9ed3156cee2d3546c0a0834b6 100644
--- a/src/plugins/aorai/tests/ya/oracle/metavariables-right.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/metavariables-right.res.oracle
@@ -363,7 +363,9 @@ void g(void)
     /@ slevel full; @/
     aorai_CurOpStatus = aorai_Called;
     aorai_CurOperation = op_h;
-    if (5 == aorai_CurStates && aorai_x > 0) aorai_CurStates = f_0;
+    if (5 == aorai_CurStates) 
+      if (aorai_x > 0) aorai_CurStates = f_0;
+      else aorai_CurStates = aorai_reject;
     else aorai_CurStates = aorai_reject;
     return;
   }
diff --git a/src/plugins/aorai/tests/ya/oracle/not_prm.res.oracle b/src/plugins/aorai/tests/ya/oracle/not_prm.res.oracle
index 79d8cc18058df72e85381c46d1d59f80ff09f81d..e730bc38477b677a248a6e25f010b818ccb37633 100644
--- a/src/plugins/aorai/tests/ya/oracle/not_prm.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/not_prm.res.oracle
@@ -39,7 +39,9 @@ enum aorai_OpStatusList {
     aorai_CurOperation = op_f;
     S0_tmp = S0;
     Sf_tmp = Sf;
-    if (S0 == 1 && x >= 4) Sf_tmp = 1; else Sf_tmp = 0;
+    if (S0 == 1) 
+      if (x >= 4) Sf_tmp = 1; else Sf_tmp = 0;
+    else Sf_tmp = 0;
     S0_tmp = 0;
     S0 = S0_tmp;
     Sf = Sf_tmp;
diff --git a/src/plugins/aorai/tests/ya/oracle/other.res.oracle b/src/plugins/aorai/tests/ya/oracle/other.res.oracle
index d7146144fdf2901adb66b6a09f4c2a019c0cd8fb..2e3147482222b4e9f67b5b2e832507fa156434cc 100644
--- a/src/plugins/aorai/tests/ya/oracle/other.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/other.res.oracle
@@ -65,13 +65,42 @@ int x = 0;
     init_tmp = init;
     last_tmp = last;
     step1_tmp = step1;
-    if ((init == 1 && x == 3 || last == 1 && x == 3) || step1 == 1 && x != 4) 
-      step1_tmp = 1;
-    else step1_tmp = 0;
-    if (last == 1 && (x != 4 && x != 3) || step1 == 1 && x == 4) last_tmp = 1;
-    else last_tmp = 0;
-    if (init == 1 && x != 3 || last == 1 && x == 4) init_tmp = 1;
-    else init_tmp = 0;
+    if (init == 1) {
+      if (x == 3) step1_tmp = 1; else goto __aorai_label_2;
+    }
+    else {
+      __aorai_label_2: ;
+      if (last == 1) {
+        if (x == 3) step1_tmp = 1; else goto __aorai_label_1;
+      }
+      else {
+        __aorai_label_1: ;
+        if (step1 == 1) 
+          if (x != 4) step1_tmp = 1; else step1_tmp = 0;
+        else step1_tmp = 0;
+      }
+    }
+    if (last == 1) {
+      if (x != 4) {
+        if (x != 3) last_tmp = 1; else goto __aorai_label_0;
+      }
+      else goto __aorai_label_0;
+    }
+    else {
+      __aorai_label_0: ;
+      if (step1 == 1) 
+        if (x == 4) last_tmp = 1; else last_tmp = 0;
+      else last_tmp = 0;
+    }
+    if (init == 1) {
+      if (x != 3) init_tmp = 1; else goto __aorai_label;
+    }
+    else {
+      __aorai_label: ;
+      if (last == 1) 
+        if (x == 4) init_tmp = 1; else init_tmp = 0;
+      else init_tmp = 0;
+    }
     init = init_tmp;
     last = last_tmp;
     step1 = step1_tmp;
@@ -129,13 +158,42 @@ int x = 0;
     init_tmp = init;
     last_tmp = last;
     step1_tmp = step1;
-    if ((init == 1 && x == 3 || last == 1 && x == 3) || step1 == 1 && x != 4) 
-      step1_tmp = 1;
-    else step1_tmp = 0;
-    if (last == 1 && (x != 4 && x != 3) || step1 == 1 && x == 4) last_tmp = 1;
-    else last_tmp = 0;
-    if (init == 1 && x != 3 || last == 1 && x == 4) init_tmp = 1;
-    else init_tmp = 0;
+    if (init == 1) {
+      if (x == 3) step1_tmp = 1; else goto __aorai_label_6;
+    }
+    else {
+      __aorai_label_6: ;
+      if (last == 1) {
+        if (x == 3) step1_tmp = 1; else goto __aorai_label_5;
+      }
+      else {
+        __aorai_label_5: ;
+        if (step1 == 1) 
+          if (x != 4) step1_tmp = 1; else step1_tmp = 0;
+        else step1_tmp = 0;
+      }
+    }
+    if (last == 1) {
+      if (x != 4) {
+        if (x != 3) last_tmp = 1; else goto __aorai_label_4;
+      }
+      else goto __aorai_label_4;
+    }
+    else {
+      __aorai_label_4: ;
+      if (step1 == 1) 
+        if (x == 4) last_tmp = 1; else last_tmp = 0;
+      else last_tmp = 0;
+    }
+    if (init == 1) {
+      if (x != 3) init_tmp = 1; else goto __aorai_label_3;
+    }
+    else {
+      __aorai_label_3: ;
+      if (last == 1) 
+        if (x == 4) init_tmp = 1; else init_tmp = 0;
+      else init_tmp = 0;
+    }
     init = init_tmp;
     last = last_tmp;
     step1 = step1_tmp;
@@ -257,13 +315,42 @@ void f(void)
     init_tmp = init;
     last_tmp = last;
     step1_tmp = step1;
-    if ((init == 1 && x == 3 || last == 1 && x == 3) || step1 == 1 && x != 4) 
-      step1_tmp = 1;
-    else step1_tmp = 0;
-    if (last == 1 && (x != 4 && x != 3) || step1 == 1 && x == 4) last_tmp = 1;
-    else last_tmp = 0;
-    if (init == 1 && x != 3 || last == 1 && x == 4) init_tmp = 1;
-    else init_tmp = 0;
+    if (init == 1) {
+      if (x == 3) step1_tmp = 1; else goto __aorai_label_10;
+    }
+    else {
+      __aorai_label_10: ;
+      if (last == 1) {
+        if (x == 3) step1_tmp = 1; else goto __aorai_label_9;
+      }
+      else {
+        __aorai_label_9: ;
+        if (step1 == 1) 
+          if (x != 4) step1_tmp = 1; else step1_tmp = 0;
+        else step1_tmp = 0;
+      }
+    }
+    if (last == 1) {
+      if (x != 4) {
+        if (x != 3) last_tmp = 1; else goto __aorai_label_8;
+      }
+      else goto __aorai_label_8;
+    }
+    else {
+      __aorai_label_8: ;
+      if (step1 == 1) 
+        if (x == 4) last_tmp = 1; else last_tmp = 0;
+      else last_tmp = 0;
+    }
+    if (init == 1) {
+      if (x != 3) init_tmp = 1; else goto __aorai_label_7;
+    }
+    else {
+      __aorai_label_7: ;
+      if (last == 1) 
+        if (x == 4) init_tmp = 1; else init_tmp = 0;
+      else init_tmp = 0;
+    }
     init = init_tmp;
     last = last_tmp;
     step1 = step1_tmp;
@@ -321,13 +408,42 @@ void f(void)
     init_tmp = init;
     last_tmp = last;
     step1_tmp = step1;
-    if ((init == 1 && x == 3 || last == 1 && x == 3) || step1 == 1 && x != 4) 
-      step1_tmp = 1;
-    else step1_tmp = 0;
-    if (last == 1 && (x != 4 && x != 3) || step1 == 1 && x == 4) last_tmp = 1;
-    else last_tmp = 0;
-    if (init == 1 && x != 3 || last == 1 && x == 4) init_tmp = 1;
-    else init_tmp = 0;
+    if (init == 1) {
+      if (x == 3) step1_tmp = 1; else goto __aorai_label_14;
+    }
+    else {
+      __aorai_label_14: ;
+      if (last == 1) {
+        if (x == 3) step1_tmp = 1; else goto __aorai_label_13;
+      }
+      else {
+        __aorai_label_13: ;
+        if (step1 == 1) 
+          if (x != 4) step1_tmp = 1; else step1_tmp = 0;
+        else step1_tmp = 0;
+      }
+    }
+    if (last == 1) {
+      if (x != 4) {
+        if (x != 3) last_tmp = 1; else goto __aorai_label_12;
+      }
+      else goto __aorai_label_12;
+    }
+    else {
+      __aorai_label_12: ;
+      if (step1 == 1) 
+        if (x == 4) last_tmp = 1; else last_tmp = 0;
+      else last_tmp = 0;
+    }
+    if (init == 1) {
+      if (x != 3) init_tmp = 1; else goto __aorai_label_11;
+    }
+    else {
+      __aorai_label_11: ;
+      if (last == 1) 
+        if (x == 4) init_tmp = 1; else init_tmp = 0;
+      else init_tmp = 0;
+    }
     init = init_tmp;
     last = last_tmp;
     step1 = step1_tmp;
@@ -436,9 +552,13 @@ void g(void)
     init_tmp = init;
     last_tmp = last;
     step1_tmp = step1;
-    if (init == 1 && x == 3) step1_tmp = 1; else step1_tmp = 0;
+    if (init == 1) 
+      if (x == 3) step1_tmp = 1; else step1_tmp = 0;
+    else step1_tmp = 0;
     last_tmp = 0;
-    if (init == 1 && x != 3) init_tmp = 1; else init_tmp = 0;
+    if (init == 1) 
+      if (x != 3) init_tmp = 1; else init_tmp = 0;
+    else init_tmp = 0;
     init = init_tmp;
     last = last_tmp;
     step1 = step1_tmp;
@@ -496,13 +616,42 @@ void g(void)
     init_tmp = init;
     last_tmp = last;
     step1_tmp = step1;
-    if ((init == 1 && x == 3 || last == 1 && x == 3) || step1 == 1 && x != 4) 
-      step1_tmp = 1;
-    else step1_tmp = 0;
-    if (last == 1 && (x != 4 && x != 3) || step1 == 1 && x == 4) last_tmp = 1;
-    else last_tmp = 0;
-    if (init == 1 && x != 3 || last == 1 && x == 4) init_tmp = 1;
-    else init_tmp = 0;
+    if (init == 1) {
+      if (x == 3) step1_tmp = 1; else goto __aorai_label_18;
+    }
+    else {
+      __aorai_label_18: ;
+      if (last == 1) {
+        if (x == 3) step1_tmp = 1; else goto __aorai_label_17;
+      }
+      else {
+        __aorai_label_17: ;
+        if (step1 == 1) 
+          if (x != 4) step1_tmp = 1; else step1_tmp = 0;
+        else step1_tmp = 0;
+      }
+    }
+    if (last == 1) {
+      if (x != 4) {
+        if (x != 3) last_tmp = 1; else goto __aorai_label_16;
+      }
+      else goto __aorai_label_16;
+    }
+    else {
+      __aorai_label_16: ;
+      if (step1 == 1) 
+        if (x == 4) last_tmp = 1; else last_tmp = 0;
+      else last_tmp = 0;
+    }
+    if (init == 1) {
+      if (x != 3) init_tmp = 1; else goto __aorai_label_15;
+    }
+    else {
+      __aorai_label_15: ;
+      if (last == 1) 
+        if (x == 4) init_tmp = 1; else init_tmp = 0;
+      else init_tmp = 0;
+    }
     init = init_tmp;
     last = last_tmp;
     step1 = step1_tmp;
diff --git a/src/plugins/aorai/tests/ya/oracle/seq.res.oracle b/src/plugins/aorai/tests/ya/oracle/seq.res.oracle
index 92b8136c6f9ff6db57d75f729389cec00afcbff5..f138130a17043ef5c0dfc68304ce9c0e1c1a03ba 100644
--- a/src/plugins/aorai/tests/ya/oracle/seq.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/seq.res.oracle
@@ -280,10 +280,16 @@ void f(void)
     aorai_intermediate_state_1_tmp = aorai_intermediate_state_1;
     aorai_intermediate_state_2_tmp = aorai_intermediate_state_2;
     aorai_intermediate_state_3_tmp = aorai_intermediate_state_3;
-    if ((aorai_intermediate_state == 1 || aorai_intermediate_state_0 == 1) || 
-        aorai_intermediate_state_2 == 1 && aorai_counter < 2) aorai_intermediate_state_3_tmp = 1;
-    else aorai_intermediate_state_3_tmp = 0;
-    if (aorai_intermediate_state_2 == 1 && aorai_counter < 2) aorai_counter ++;
+    if (aorai_intermediate_state == 1) aorai_intermediate_state_3_tmp = 1;
+    else 
+      if (aorai_intermediate_state_0 == 1) aorai_intermediate_state_3_tmp = 1;
+      else 
+        if (aorai_intermediate_state_2 == 1) 
+          if (aorai_counter < 2) aorai_intermediate_state_3_tmp = 1;
+          else aorai_intermediate_state_3_tmp = 0;
+        else aorai_intermediate_state_3_tmp = 0;
+    if (aorai_intermediate_state_2 == 1) 
+      if (aorai_counter < 2) aorai_counter ++;
     if (aorai_intermediate_state_0 == 1) aorai_counter = 1;
     if (aorai_intermediate_state == 1) aorai_counter = 1;
     aorai_intermediate_state_2_tmp = 0;
@@ -567,7 +573,8 @@ void g(void)
     aorai_intermediate_state_1_tmp = 0;
     aorai_intermediate_state_0_tmp = 0;
     aorai_intermediate_state_tmp = 0;
-    if (aorai_intermediate_state_2 == 1 && 1 <= aorai_counter) Sf_tmp = 1;
+    if (aorai_intermediate_state_2 == 1) 
+      if (1 <= aorai_counter) Sf_tmp = 1; else Sf_tmp = 0;
     else Sf_tmp = 0;
     S0_tmp = 0;
     S0 = S0_tmp;
diff --git a/src/plugins/aorai/tests/ya/oracle/seq_loop.res.oracle b/src/plugins/aorai/tests/ya/oracle/seq_loop.res.oracle
index ea66b1d2bf754868b2a05efbd8b9c8dc413a61bc..eca76ebee16395bc7760001c98e2c849a29754b6 100644
--- a/src/plugins/aorai/tests/ya/oracle/seq_loop.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/seq_loop.res.oracle
@@ -95,10 +95,14 @@ enum aorai_OpStatusList {
     aorai_intermediate_state_3_tmp = aorai_intermediate_state_3;
     aorai_intermediate_state_3_tmp = 0;
     aorai_intermediate_state_2_tmp = 0;
-    if (aorai_intermediate_state == 1 || aorai_intermediate_state_0 == 1 && 
-                                         aorai_counter < 5) aorai_intermediate_state_1_tmp = 1;
-    else aorai_intermediate_state_1_tmp = 0;
-    if (aorai_intermediate_state_0 == 1 && aorai_counter < 5) aorai_counter ++;
+    if (aorai_intermediate_state == 1) aorai_intermediate_state_1_tmp = 1;
+    else 
+      if (aorai_intermediate_state_0 == 1) 
+        if (aorai_counter < 5) aorai_intermediate_state_1_tmp = 1;
+        else aorai_intermediate_state_1_tmp = 0;
+      else aorai_intermediate_state_1_tmp = 0;
+    if (aorai_intermediate_state_0 == 1) 
+      if (aorai_counter < 5) aorai_counter ++;
     if (aorai_intermediate_state == 1) aorai_counter = 1;
     aorai_intermediate_state_0_tmp = 0;
     aorai_intermediate_state_tmp = 0;
@@ -544,9 +548,9 @@ void g(void)
     aorai_intermediate_state_1_tmp = 0;
     aorai_intermediate_state_0_tmp = 0;
     aorai_intermediate_state_tmp = 0;
-    if (aorai_intermediate_state == 1 || aorai_intermediate_state_0 == 1) 
-      Sf_tmp = 1;
-    else Sf_tmp = 0;
+    if (aorai_intermediate_state == 1) Sf_tmp = 1;
+    else 
+      if (aorai_intermediate_state_0 == 1) Sf_tmp = 1; else Sf_tmp = 0;
     S0_tmp = 0;
     S0 = S0_tmp;
     Sf = Sf_tmp;
diff --git a/src/plugins/aorai/tests/ya/oracle/serial.res.oracle b/src/plugins/aorai/tests/ya/oracle/serial.res.oracle
index dbf366abac3bc1121b9765732ddf45aecf90f3e7..8d2600bdb03f86874f050d4b8a2b1d5dc568afbd 100644
--- a/src/plugins/aorai/tests/ya/oracle/serial.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/serial.res.oracle
@@ -276,7 +276,7 @@
 [eva:summary] ====== ANALYSIS SUMMARY ======
   ----------------------------------------------------------------------------
   11 functions analyzed (out of 11): 100% coverage.
-  In these functions, 206 statements reached (out of 261): 78% coverage.
+  In these functions, 273 statements reached (out of 339): 80% coverage.
   ----------------------------------------------------------------------------
   Some errors and warnings have been raised during the analysis:
     by the Eva analyzer:      0 errors    0 warnings
@@ -576,46 +576,123 @@ int n = 0;
     aorai_CurOperation = op_input_status;
     aorai_StatesHistory_2 = aorai_StatesHistory_1;
     aorai_StatesHistory_1 = aorai_CurStates;
-    if (18 == aorai_CurStates && ((res & 15) != 1 && (res & 1) != 0)) 
-      aorai_CurStates = StatusError;
-    else 
-      if (17 == aorai_CurStates && ((res & 15) != 1 && (res & 1) != 0)) 
-        aorai_CurStates = StatusError;
-      else 
-        if (16 == aorai_CurStates && ((res & 15) != 1 && (res & 1) != 0)) 
-          aorai_CurStates = StatusError;
-        else 
-          if (15 == aorai_CurStates && ((res & 15) != 1 && (res & 1) != 0)) 
-            aorai_CurStates = StatusError;
-          else 
-            if (14 == aorai_CurStates && ((res & 15) != 1 && (res & 1) != 0)) 
-              aorai_CurStates = StatusError;
-            else 
-              if (14 == aorai_CurStates && (res & 15) == 1) aorai_CurStates = StatusOk1;
-              else 
-                if (15 == aorai_CurStates && (res & 15) == 1) aorai_CurStates = StatusOk2;
-                else 
-                  if (16 == aorai_CurStates && (res & 15) == 1) aorai_CurStates = StatusOk3;
-                  else 
-                    if (17 == aorai_CurStates && (res & 15) == 1) aorai_CurStates = StatusOk4;
-                    else 
-                      if (18 == aorai_CurStates && (res & 15) == 1) aorai_CurStates = StatusOk5;
-                      else 
-                        if (14 == aorai_CurStates && (res & 1) == 0) 
-                          aorai_CurStates = Wait1;
-                        else 
-                          if (15 == aorai_CurStates && (res & 1) == 0) 
-                            aorai_CurStates = Wait2;
-                          else 
-                            if (16 == aorai_CurStates && (res & 1) == 0) 
-                              aorai_CurStates = Wait3;
-                            else 
-                              if (17 == aorai_CurStates && (res & 1) == 0) 
-                                aorai_CurStates = Wait4;
-                              else 
-                                if (18 == aorai_CurStates && (res & 1) == 0) 
-                                  aorai_CurStates = Wait5;
+    if (18 == aorai_CurStates) {
+      if ((res & 15) != 1) {
+        if ((res & 1) != 0) aorai_CurStates = StatusError;
+        else goto __aorai_label_12;
+      }
+      else goto __aorai_label_12;
+    }
+    else {
+      __aorai_label_12: ;
+      if (17 == aorai_CurStates) {
+        if ((res & 15) != 1) {
+          if ((res & 1) != 0) aorai_CurStates = StatusError;
+          else goto __aorai_label_11;
+        }
+        else goto __aorai_label_11;
+      }
+      else {
+        __aorai_label_11: ;
+        if (16 == aorai_CurStates) {
+          if ((res & 15) != 1) {
+            if ((res & 1) != 0) aorai_CurStates = StatusError;
+            else goto __aorai_label_10;
+          }
+          else goto __aorai_label_10;
+        }
+        else {
+          __aorai_label_10: ;
+          if (15 == aorai_CurStates) {
+            if ((res & 15) != 1) {
+              if ((res & 1) != 0) aorai_CurStates = StatusError;
+              else goto __aorai_label_9;
+            }
+            else goto __aorai_label_9;
+          }
+          else {
+            __aorai_label_9: ;
+            if (14 == aorai_CurStates) {
+              if ((res & 15) != 1) {
+                if ((res & 1) != 0) aorai_CurStates = StatusError;
+                else goto __aorai_label_8;
+              }
+              else goto __aorai_label_8;
+            }
+            else {
+              __aorai_label_8: ;
+              if (14 == aorai_CurStates) {
+                if ((res & 15) == 1) aorai_CurStates = StatusOk1;
+                else goto __aorai_label_7;
+              }
+              else {
+                __aorai_label_7: ;
+                if (15 == aorai_CurStates) {
+                  if ((res & 15) == 1) aorai_CurStates = StatusOk2;
+                  else goto __aorai_label_6;
+                }
+                else {
+                  __aorai_label_6: ;
+                  if (16 == aorai_CurStates) {
+                    if ((res & 15) == 1) aorai_CurStates = StatusOk3;
+                    else goto __aorai_label_5;
+                  }
+                  else {
+                    __aorai_label_5: ;
+                    if (17 == aorai_CurStates) {
+                      if ((res & 15) == 1) aorai_CurStates = StatusOk4;
+                      else goto __aorai_label_4;
+                    }
+                    else {
+                      __aorai_label_4: ;
+                      if (18 == aorai_CurStates) {
+                        if ((res & 15) == 1) aorai_CurStates = StatusOk5;
+                        else goto __aorai_label_3;
+                      }
+                      else {
+                        __aorai_label_3: ;
+                        if (14 == aorai_CurStates) {
+                          if ((res & 1) == 0) aorai_CurStates = Wait1;
+                          else goto __aorai_label_2;
+                        }
+                        else {
+                          __aorai_label_2: ;
+                          if (15 == aorai_CurStates) {
+                            if ((res & 1) == 0) aorai_CurStates = Wait2;
+                            else goto __aorai_label_1;
+                          }
+                          else {
+                            __aorai_label_1: ;
+                            if (16 == aorai_CurStates) {
+                              if ((res & 1) == 0) aorai_CurStates = Wait3;
+                              else goto __aorai_label_0;
+                            }
+                            else {
+                              __aorai_label_0: ;
+                              if (17 == aorai_CurStates) {
+                                if ((res & 1) == 0) aorai_CurStates = Wait4;
+                                else goto __aorai_label;
+                              }
+                              else {
+                                __aorai_label: ;
+                                if (18 == aorai_CurStates) 
+                                  if ((res & 1) == 0) aorai_CurStates = Wait5;
+                                  else aorai_CurStates = aorai_reject;
                                 else aorai_CurStates = aorai_reject;
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
     /@ assert Aorai: aorai_smoke_test: aorai_CurStates ≢ aorai_reject; @/
     ;
     return;
@@ -682,54 +759,121 @@ int input_status(void)
     aorai_CurOperation = op_input_data;
     aorai_StatesHistory_2 = aorai_StatesHistory_1;
     aorai_StatesHistory_1 = aorai_CurStates;
-    if (5 == aorai_CurStates && (res & 128) == 0) {
-      aorai_CurStates = Complete;
-      aorai_y2 = res;
+    if (5 == aorai_CurStates) {
+      if ((res & 128) == 0) {
+        aorai_CurStates = Complete;
+        aorai_y2 = res;
+      }
+      else goto __aorai_label_26;
     }
     else 
+      __aorai_label_26:
       if (6 == aorai_CurStates) aorai_CurStates = Wait1;
       else 
-        if (5 == aorai_CurStates && (res & 192) == 192) aorai_CurStates = Wait1;
-        else 
-          if (4 == aorai_CurStates && (res & 192) == 192) aorai_CurStates = Wait1;
-          else 
-            if (3 == aorai_CurStates && (res & 192) == 192) aorai_CurStates = Wait1;
-            else 
-              if (2 == aorai_CurStates && (res & 192) == 192) aorai_CurStates = Wait1;
-              else 
-                if (1 == aorai_CurStates && (res & 128) == 0) aorai_CurStates = Wait1;
-                else 
-                  if (1 == aorai_CurStates && (res & 192) == 192) aorai_CurStates = Wait1;
-                  else 
-                    if (5 == aorai_CurStates && (res & 192) == 128) aorai_CurStates = Wait2;
-                    else 
-                      if (4 == aorai_CurStates && (res & 192) == 128) 
-                        aorai_CurStates = Wait2;
-                      else 
-                        if (3 == aorai_CurStates && (res & 192) == 128) 
-                          aorai_CurStates = Wait2;
-                        else 
-                          if (2 == aorai_CurStates && (res & 192) == 128) 
-                            aorai_CurStates = Wait2;
-                          else 
-                            if (1 == aorai_CurStates && (res & 192) == 128) 
-                              aorai_CurStates = Wait2;
-                            else 
-                              if (2 == aorai_CurStates && (res & 128) == 0) {
-                                aorai_CurStates = Wait3;
-                                aorai_x1 = res;
-                              }
-                              else 
-                                if (3 == aorai_CurStates && (res & 128) == 0) {
-                                  aorai_CurStates = Wait4;
-                                  aorai_x2 = res;
+        if (5 == aorai_CurStates) {
+          if ((res & 192) == 192) aorai_CurStates = Wait1;
+          else goto __aorai_label_25;
+        }
+        else {
+          __aorai_label_25: ;
+          if (4 == aorai_CurStates) {
+            if ((res & 192) == 192) aorai_CurStates = Wait1;
+            else goto __aorai_label_24;
+          }
+          else {
+            __aorai_label_24: ;
+            if (3 == aorai_CurStates) {
+              if ((res & 192) == 192) aorai_CurStates = Wait1;
+              else goto __aorai_label_23;
+            }
+            else {
+              __aorai_label_23: ;
+              if (2 == aorai_CurStates) {
+                if ((res & 192) == 192) aorai_CurStates = Wait1;
+                else goto __aorai_label_22;
+              }
+              else {
+                __aorai_label_22: ;
+                if (1 == aorai_CurStates) {
+                  if ((res & 128) == 0) aorai_CurStates = Wait1;
+                  else goto __aorai_label_21;
+                }
+                else {
+                  __aorai_label_21: ;
+                  if (1 == aorai_CurStates) {
+                    if ((res & 192) == 192) aorai_CurStates = Wait1;
+                    else goto __aorai_label_20;
+                  }
+                  else {
+                    __aorai_label_20: ;
+                    if (5 == aorai_CurStates) {
+                      if ((res & 192) == 128) aorai_CurStates = Wait2;
+                      else goto __aorai_label_19;
+                    }
+                    else {
+                      __aorai_label_19: ;
+                      if (4 == aorai_CurStates) {
+                        if ((res & 192) == 128) aorai_CurStates = Wait2;
+                        else goto __aorai_label_18;
+                      }
+                      else {
+                        __aorai_label_18: ;
+                        if (3 == aorai_CurStates) {
+                          if ((res & 192) == 128) aorai_CurStates = Wait2;
+                          else goto __aorai_label_17;
+                        }
+                        else {
+                          __aorai_label_17: ;
+                          if (2 == aorai_CurStates) {
+                            if ((res & 192) == 128) aorai_CurStates = Wait2;
+                            else goto __aorai_label_16;
+                          }
+                          else {
+                            __aorai_label_16: ;
+                            if (1 == aorai_CurStates) {
+                              if ((res & 192) == 128) aorai_CurStates = Wait2;
+                              else goto __aorai_label_15;
+                            }
+                            else {
+                              __aorai_label_15: ;
+                              if (2 == aorai_CurStates) {
+                                if ((res & 128) == 0) {
+                                  aorai_CurStates = Wait3;
+                                  aorai_x1 = res;
                                 }
-                                else 
-                                  if (4 == aorai_CurStates && (res & 128) == 0) {
-                                    aorai_CurStates = Wait5;
-                                    aorai_y1 = res;
+                                else goto __aorai_label_14;
+                              }
+                              else {
+                                __aorai_label_14: ;
+                                if (3 == aorai_CurStates) {
+                                  if ((res & 128) == 0) {
+                                    aorai_CurStates = Wait4;
+                                    aorai_x2 = res;
                                   }
+                                  else goto __aorai_label_13;
+                                }
+                                else {
+                                  __aorai_label_13: ;
+                                  if (4 == aorai_CurStates) 
+                                    if ((res & 128) == 0) {
+                                      aorai_CurStates = Wait5;
+                                      aorai_y1 = res;
+                                    }
+                                    else aorai_CurStates = aorai_reject;
                                   else aorai_CurStates = aorai_reject;
+                                }
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
     /@ assert Aorai: aorai_smoke_test: aorai_CurStates ≢ aorai_reject; @/
     ;
     return;
@@ -781,18 +925,21 @@ int input_data(void)
                       else 
                         if (8 == aorai_CurStates) aorai_CurStates = Error;
                         else 
-                          if (0 == aorai_CurStates && (y != aorai_y1 + 
-                                                            128 * aorai_y2 || 
-                                                       x != aorai_x1 + 
-                                                            128 * aorai_x2)) 
-                            aorai_CurStates = Error;
-                          else 
-                            if (0 == aorai_CurStates && (x == aorai_x1 + 
-                                                              128 * aorai_x2 && 
-                                                         y == aorai_y1 + 
-                                                              128 * aorai_y2)) 
-                              aorai_CurStates = Wait1;
+                          if (0 == aorai_CurStates) {
+                            if (y != aorai_y1 + 128 * aorai_y2) aorai_CurStates = Error;
+                            else 
+                              if (x != aorai_x1 + 128 * aorai_x2) aorai_CurStates = Error;
+                              else goto __aorai_label_27;
+                          }
+                          else {
+                            __aorai_label_27: ;
+                            if (0 == aorai_CurStates) 
+                              if (x == aorai_x1 + 128 * aorai_x2) 
+                                if (y == aorai_y1 + 128 * aorai_y2) aorai_CurStates = Wait1;
+                                else aorai_CurStates = aorai_reject;
+                              else aorai_CurStates = aorai_reject;
                             else aorai_CurStates = aorai_reject;
+                          }
     /@ assert Aorai: aorai_smoke_test: aorai_CurStates ≢ aorai_reject; @/
     ;
     return;
diff --git a/src/plugins/aorai/tests/ya/oracle/stack.res.oracle b/src/plugins/aorai/tests/ya/oracle/stack.res.oracle
index 1c87bd335767554b3c662d504f66f15913c08133..07be92bb84c1e913883720f6526540093c92c847 100644
--- a/src/plugins/aorai/tests/ya/oracle/stack.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/stack.res.oracle
@@ -219,7 +219,9 @@ void push(void)
     /@ slevel full; @/
     aorai_CurOpStatus = aorai_Called;
     aorai_CurOperation = op_pop;
-    if (4 == aorai_CurStates && aorai_n > 0) aorai_CurStates = emptying_stack;
+    if (4 == aorai_CurStates) 
+      if (aorai_n > 0) aorai_CurStates = emptying_stack;
+      else aorai_CurStates = aorai_reject;
     else aorai_CurStates = aorai_reject;
     return;
   }
@@ -277,16 +279,23 @@ void push(void)
     /@ slevel full; @/
     aorai_CurOpStatus = aorai_Terminated;
     aorai_CurOperation = op_pop;
-    if (3 == aorai_CurStates && aorai_n == 1) {
-      aorai_CurStates = empty_stack;
-      aorai_n --;
-    }
-    else 
-      if (3 == aorai_CurStates && aorai_n > 1) {
-        aorai_CurStates = filled_stack;
+    if (3 == aorai_CurStates) {
+      if (aorai_n == 1) {
+        aorai_CurStates = empty_stack;
         aorai_n --;
       }
+      else goto __aorai_label;
+    }
+    else {
+      __aorai_label: ;
+      if (3 == aorai_CurStates) 
+        if (aorai_n > 1) {
+          aorai_CurStates = filled_stack;
+          aorai_n --;
+        }
+        else aorai_CurStates = aorai_reject;
       else aorai_CurStates = aorai_reject;
+    }
     return;
   }
 
diff --git a/src/plugins/aorai/tests/ya/oracle/test_acces_params.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_acces_params.res.oracle
index 72d1dbd1b7087f20168713e8811b6529fe5047c3..612b29ad3f47dd7c69c00b06d430c8e92ce23b48 100644
--- a/src/plugins/aorai/tests/ya/oracle/test_acces_params.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/test_acces_params.res.oracle
@@ -76,7 +76,9 @@ int rr = 1;
     SF_tmp = 0;
     S4_tmp = 0;
     S3_tmp = 0;
-    if (S1 == 1 && i >= 0) S2_tmp = 1; else S2_tmp = 0;
+    if (S1 == 1) 
+      if (i >= 0) S2_tmp = 1; else S2_tmp = 0;
+    else S2_tmp = 0;
     S1_tmp = 0;
     S1 = S1_tmp;
     S2 = S2_tmp;
@@ -294,7 +296,9 @@ void opa(int i, int j)
     SF_tmp = SF;
     mainst_tmp = mainst;
     mainst_tmp = 0;
-    if (S4 == 1 && res > 0) SF_tmp = 1; else SF_tmp = 0;
+    if (S4 == 1) 
+      if (res > 0) SF_tmp = 1; else SF_tmp = 0;
+    else SF_tmp = 0;
     S4_tmp = 0;
     S3_tmp = 0;
     S2_tmp = 0;
diff --git a/src/plugins/aorai/tests/ya/oracle/test_acces_params2.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_acces_params2.res.oracle
index f20db94ee5b3eb2af611286e49d3866b42e02735..af3a83362234cacdf672489228e7892abb9b8502 100644
--- a/src/plugins/aorai/tests/ya/oracle/test_acces_params2.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/test_acces_params2.res.oracle
@@ -82,7 +82,9 @@ int rr = 1;
     S6_tmp = 0;
     S5_tmp = 0;
     S4_tmp = 0;
-    if (S2 == 1 && r >= 0) S3_tmp = 1; else S3_tmp = 0;
+    if (S2 == 1) 
+      if (r >= 0) S3_tmp = 1; else S3_tmp = 0;
+    else S3_tmp = 0;
     S2_tmp = 0;
     S1_tmp = 0;
     S1 = S1_tmp;
@@ -155,7 +157,9 @@ int rr = 1;
     S7_tmp = 0;
     S6_tmp = 0;
     S5_tmp = 0;
-    if (S3 == 1 && res <= 5000) S4_tmp = 1; else S4_tmp = 0;
+    if (S3 == 1) 
+      if (res <= 5000) S4_tmp = 1; else S4_tmp = 0;
+    else S4_tmp = 0;
     S3_tmp = 0;
     S2_tmp = 0;
     S1_tmp = 0;
diff --git a/src/plugins/aorai/tests/ya/oracle/test_boucle_rechercheTableau.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_boucle_rechercheTableau.res.oracle
index d9e7db7f8036d21031746b26ee84b19aa5ffcf14..028e81110750d6e5129071ba1589b3f81fc73a1c 100644
--- a/src/plugins/aorai/tests/ya/oracle/test_boucle_rechercheTableau.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/test_boucle_rechercheTableau.res.oracle
@@ -98,9 +98,13 @@ enum aorai_OpStatusList {
     End_tmp = End;
     Idle_tmp = Idle;
     WillDoFoo_tmp = WillDoFoo;
-    if (Idle == 1 && res == -1) WillDoFoo_tmp = 1; else WillDoFoo_tmp = 0;
+    if (Idle == 1) 
+      if (res == -1) WillDoFoo_tmp = 1; else WillDoFoo_tmp = 0;
+    else WillDoFoo_tmp = 0;
     Idle_tmp = 0;
-    if (Idle == 1 && res != -1) End_tmp = 1; else End_tmp = 0;
+    if (Idle == 1) 
+      if (res != -1) End_tmp = 1; else End_tmp = 0;
+    else End_tmp = 0;
     End = End_tmp;
     Idle = Idle_tmp;
     WillDoFoo = WillDoFoo_tmp;
diff --git a/src/plugins/aorai/tests/ya/oracle/test_factorial.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_factorial.res.oracle
index ed5f20033adfc02c42e59041a6d3fc7548e8ef8d..b174e49f3f32ad748fe314886ba421d842fcdaaa 100644
--- a/src/plugins/aorai/tests/ya/oracle/test_factorial.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/test_factorial.res.oracle
@@ -216,7 +216,9 @@ int decode_int(char *s)
     S2_tmp = S2;
     main_0_tmp = main_0;
     main_0_tmp = 0;
-    if (S1 == 1 || S2 == 1) S2_tmp = 1; else S2_tmp = 0;
+    if (S1 == 1) S2_tmp = 1;
+    else 
+      if (S2 == 1) S2_tmp = 1; else S2_tmp = 0;
     S1_tmp = 0;
     S1 = S1_tmp;
     S2 = S2_tmp;
@@ -263,8 +265,12 @@ int decode_int(char *s)
     S2_tmp = S2;
     main_0_tmp = main_0;
     main_0_tmp = 0;
-    if (S1 == 1 || S2 == 1) S2_tmp = 1; else S2_tmp = 0;
-    if (S1 == 1 || S2 == 1) S1_tmp = 1; else S1_tmp = 0;
+    if (S1 == 1) S2_tmp = 1;
+    else 
+      if (S2 == 1) S2_tmp = 1; else S2_tmp = 0;
+    if (S1 == 1) S1_tmp = 1;
+    else 
+      if (S2 == 1) S1_tmp = 1; else S1_tmp = 0;
     S1 = S1_tmp;
     S2 = S2_tmp;
     main_0 = main_0_tmp;
diff --git a/src/plugins/aorai/tests/ya/oracle/test_recursion4.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_recursion4.res.oracle
index 3f9a007d77696b6178c88a55def1baf568004e5c..650a1625271f495e71a3d1411bb69d151e7a8410 100644
--- a/src/plugins/aorai/tests/ya/oracle/test_recursion4.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/test_recursion4.res.oracle
@@ -101,11 +101,25 @@ enum aorai_OpStatusList {
     End_tmp = End;
     Idle_tmp = Idle;
     WillDoFoo_tmp = WillDoFoo;
-    if (Idle == 1 && res == -1 || WillDoFoo == 1 && res == -1) WillDoFoo_tmp = 1;
-    else WillDoFoo_tmp = 0;
+    if (Idle == 1) {
+      if (res == -1) WillDoFoo_tmp = 1; else goto __aorai_label_0;
+    }
+    else {
+      __aorai_label_0: ;
+      if (WillDoFoo == 1) 
+        if (res == -1) WillDoFoo_tmp = 1; else WillDoFoo_tmp = 0;
+      else WillDoFoo_tmp = 0;
+    }
     Idle_tmp = 0;
-    if (End == 1 && res != -1 || Idle == 1 && res != -1) End_tmp = 1;
-    else End_tmp = 0;
+    if (End == 1) {
+      if (res != -1) End_tmp = 1; else goto __aorai_label;
+    }
+    else {
+      __aorai_label: ;
+      if (Idle == 1) 
+        if (res != -1) End_tmp = 1; else End_tmp = 0;
+      else End_tmp = 0;
+    }
     End = End_tmp;
     Idle = Idle_tmp;
     WillDoFoo = WillDoFoo_tmp;
diff --git a/src/plugins/aorai/tests/ya/oracle/test_recursion5.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_recursion5.res.oracle
index b3d197570e702e04d0d7730ca993dd6fa5d6faa1..c4af634f2defb5bcdfac58923933c684aba9f991 100644
--- a/src/plugins/aorai/tests/ya/oracle/test_recursion5.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/test_recursion5.res.oracle
@@ -124,10 +124,24 @@ enum aorai_OpStatusList {
     Idle_tmp = Idle;
     IgnoreFoo_tmp = IgnoreFoo;
     WillDoFoo_tmp = WillDoFoo;
-    if (Idle == 1 && res == -1 || WillDoFoo == 1 && res == -1) WillDoFoo_tmp = 1;
-    else WillDoFoo_tmp = 0;
-    if (Idle == 1 && res != -1 || IgnoreFoo == 1 && res != -1) IgnoreFoo_tmp = 1;
-    else IgnoreFoo_tmp = 0;
+    if (Idle == 1) {
+      if (res == -1) WillDoFoo_tmp = 1; else goto __aorai_label_0;
+    }
+    else {
+      __aorai_label_0: ;
+      if (WillDoFoo == 1) 
+        if (res == -1) WillDoFoo_tmp = 1; else WillDoFoo_tmp = 0;
+      else WillDoFoo_tmp = 0;
+    }
+    if (Idle == 1) {
+      if (res != -1) IgnoreFoo_tmp = 1; else goto __aorai_label;
+    }
+    else {
+      __aorai_label: ;
+      if (IgnoreFoo == 1) 
+        if (res != -1) IgnoreFoo_tmp = 1; else IgnoreFoo_tmp = 0;
+      else IgnoreFoo_tmp = 0;
+    }
     Idle_tmp = 0;
     End_tmp = 0;
     End = End_tmp;
@@ -281,11 +295,14 @@ int isPresentRec(int *t, int i, int max, int val)
     Idle_tmp = Idle;
     IgnoreFoo_tmp = IgnoreFoo;
     WillDoFoo_tmp = WillDoFoo;
-    if (WillDoFoo == 1 && res == -1) WillDoFoo_tmp = 1;
+    if (WillDoFoo == 1) 
+      if (res == -1) WillDoFoo_tmp = 1; else WillDoFoo_tmp = 0;
     else WillDoFoo_tmp = 0;
     IgnoreFoo_tmp = 0;
     Idle_tmp = 0;
-    if (IgnoreFoo == 1 && res != -1) End_tmp = 1; else End_tmp = 0;
+    if (IgnoreFoo == 1) 
+      if (res != -1) End_tmp = 1; else End_tmp = 0;
+    else End_tmp = 0;
     End = End_tmp;
     Idle = Idle_tmp;
     IgnoreFoo = IgnoreFoo_tmp;
diff --git a/src/plugins/aorai/tests/ya/oracle/test_struct.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_struct.res.oracle
index fa0bb669fc7a5d68255e8ce6fc8d1bd8aabd11f6..3ba01477c274e77bf5488bd24ffe34cfe08e8fb4 100644
--- a/src/plugins/aorai/tests/ya/oracle/test_struct.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/test_struct.res.oracle
@@ -47,7 +47,9 @@ int myAge = 0;
     S1_tmp = S1;
     main_0_tmp = main_0;
     main_0_tmp = 0;
-    if (S1 == 1 && nobody.Age == 1) S1_tmp = 1; else S1_tmp = 0;
+    if (S1 == 1) 
+      if (nobody.Age == 1) S1_tmp = 1; else S1_tmp = 0;
+    else S1_tmp = 0;
     S1 = S1_tmp;
     main_0 = main_0_tmp;
     return;
@@ -83,7 +85,9 @@ int myAge = 0;
     S1_tmp = S1;
     main_0_tmp = main_0;
     main_0_tmp = 0;
-    if (S1 == 1 && nobody.Age == 1) S1_tmp = 1; else S1_tmp = 0;
+    if (S1 == 1) 
+      if (nobody.Age == 1) S1_tmp = 1; else S1_tmp = 0;
+    else S1_tmp = 0;
     S1 = S1_tmp;
     main_0 = main_0_tmp;
     return;
@@ -136,7 +140,9 @@ void increment(void)
     S1_tmp = S1;
     main_0_tmp = main_0;
     main_0_tmp = 0;
-    if (main_0 == 1 && nobody.Age == 0) S1_tmp = 1; else S1_tmp = 0;
+    if (main_0 == 1) 
+      if (nobody.Age == 0) S1_tmp = 1; else S1_tmp = 0;
+    else S1_tmp = 0;
     S1 = S1_tmp;
     main_0 = main_0_tmp;
     return;
@@ -172,7 +178,9 @@ void increment(void)
     S1_tmp = S1;
     main_0_tmp = main_0;
     main_0_tmp = 0;
-    if (S1 == 1 && nobody.Age == 1) S1_tmp = 1; else S1_tmp = 0;
+    if (S1 == 1) 
+      if (nobody.Age == 1) S1_tmp = 1; else S1_tmp = 0;
+    else S1_tmp = 0;
     S1 = S1_tmp;
     main_0 = main_0_tmp;
     return;
diff --git a/src/plugins/aorai/tests/ya/oracle_prove/logical_operators.res.oracle b/src/plugins/aorai/tests/ya/oracle_prove/logical_operators.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..6168c618fe79e2e0da7ebe5b8b2167825f84ce8d
--- /dev/null
+++ b/src/plugins/aorai/tests/ya/oracle_prove/logical_operators.res.oracle
@@ -0,0 +1,3 @@
+[kernel] Parsing tests/ya/logical_operators.i (no preprocessing)
+[kernel] Parsing TMPDIR/aorai_logical_operators_0.i (no preprocessing)
+[wp] Warning: Missing RTE guards