diff --git a/CoAlgFormula.ml b/CoAlgFormula.ml
index cecfb1fe5c19444465ea5d023757f2af0fe03b3c..890e3d92f4bf310d9b0e93613049ed6c3b25f313 100644
--- a/CoAlgFormula.ml
+++ b/CoAlgFormula.ml
@@ -38,6 +38,8 @@ type formula =
   | ALLOWS   of int list * formula
   | MIN of int * string * formula
   | MAX of int * string * formula
+  | MORETHAN of int * string * formula (* diamond of GML *)
+  | MAXEXCEPT of int * string * formula (* box of GML *)
   | CHC of formula * formula
   | CHCN of formula * formula
   | FUS of bool * formula
@@ -74,7 +76,9 @@ let rec sizeFormula f =
   | ENFORCES (_, f1)
   | ALLOWS (_, f1) -> succ (sizeFormula f1)
   | MIN (_, _, f1)
-  | MAX (_, _, f1) -> succ (sizeFormula f1)
+  | MAX (_, _, f1)
+  | MORETHAN (_, _, f1)
+  | MAXEXCEPT (_, _, f1) -> succ (sizeFormula f1)
   | CHC (f1, f2)
   | CHCN (f1, f2) -> succ (sizeFormula f1 + sizeFormula f2)
   | FUS (_, f1) -> succ (sizeFormula f1)
@@ -174,6 +178,20 @@ let rec exportFormula_buffer sb f =
       Buffer.add_string sb s;
       Buffer.add_string sb "}";
       prio 4 f1
+  | MORETHAN (n, s, f1) ->
+      Buffer.add_string sb "{>";
+      Buffer.add_string sb (string_of_int n);
+      Buffer.add_string sb " ";
+      Buffer.add_string sb s;
+      Buffer.add_string sb "}";
+      prio 4 f1
+  | MAXEXCEPT (n, s, f1) ->
+      Buffer.add_string sb "{<=";
+      Buffer.add_string sb (string_of_int n);
+      Buffer.add_string sb " ~ ";
+      Buffer.add_string sb s;
+      Buffer.add_string sb "}";
+      prio 4 f1 (* actually is prio of ~ and not of <= *)
   | CHC (f1, f2) ->
       Buffer.add_string sb "(";
       exportFormula_buffer sb f1;
@@ -528,8 +546,10 @@ let rec nnfNeg f =
   | AX (s, f1) -> EX (s, nnfNeg f1)
   | ENFORCES (s, f1) -> ALLOWS (s, nnfNeg f1)
   | ALLOWS (s, f1) -> ENFORCES (s, nnfNeg f1)
-  | MIN (n, s, f1) -> if n = 0 then FALSE else MAX (n-1, s, nnf f1)
-  | MAX (n, s, f1) -> MIN (n+1, s, nnf f1)
+  | MIN (n, s, f1) -> if n = 0 then FALSE else MAXEXCEPT (n-1, s, nnfNeg f1)
+  | MAX (n, s, f1) -> MORETHAN (n, s, nnf f1)
+  | MORETHAN (n, s, f1) -> MAXEXCEPT (n, s, nnfNeg f1)
+  | MAXEXCEPT (n, s, f1) -> MORETHAN (n, s, nnfNeg f1)
   | CHC (f1, f2) -> CHCN (nnfNeg f1, nnfNeg f2)  
   | CHCN (f1, f2) -> CHC (nnfNeg f1, nnfNeg f2)  
   | FUS (first, f1) -> FUS (first, nnfNeg f1)
@@ -577,10 +597,16 @@ and nnf f =
       if n = 0 then TRUE
       else
         let ft = nnf f1 in
-        if ft == f1 then f else MIN (n, s, ft)
+        MORETHAN (n-1,s,f1)
   | MAX (n, s, f1) ->
+      let ft = nnfNeg f1 in
+      MAXEXCEPT (n,s, ft)
+  | MORETHAN (n,s,f1) ->
       let ft = nnf f1 in
-      if ft == f1 then f else MAX (n, s, ft)
+      if ft = f1 then f else MORETHAN (n,s,ft)
+  | MAXEXCEPT (n,s,f1) ->
+      let ft = nnf f1 in
+      if ft = f1 then f else MAXEXCEPT (n,s,ft)
   | CHC (f1, f2) ->
       let ft1 = nnf f1 in
       let ft2 = nnf f2 in
@@ -694,6 +720,12 @@ let rec simplify f =
           | FALSE -> FALSE
           | _ -> if ft == f1 then f else MIN (n, s, ft)
         end
+  | MORETHAN (n,s,f1) ->
+      let ft = simplify f1 in
+      if ft == f1 then f else MORETHAN (n,s,ft)
+  | MAXEXCEPT (n,s,f1) ->
+      let ft = simplify f1 in
+      if ft == f1 then f else MAXEXCEPT (n,s,ft)
   | MAX (n, s, f1) ->
       let ft = simplify f1 in
       begin
@@ -1157,8 +1189,8 @@ and hcFormula_node =
   | HCAX of string * hcFormula
   | HCENFORCES of int list * hcFormula
   | HCALLOWS of int list * hcFormula
-  | HCMIN of int * string * hcFormula
-  | HCMAX of int * string * hcFormula
+  | HCMORETHAN of int * string * hcFormula (* GML Diamond *)
+  | HCMAXEXCEPT of int * string * hcFormula (* GML Box *)
   | HCCHC of hcFormula * hcFormula
   | HCCHCN of hcFormula * hcFormula
   | HCFUS of bool * hcFormula
@@ -1181,8 +1213,8 @@ let equal_hcFormula_node f1 f2 =
   | HCAX (s1, f1), HCAX (s2, f2) -> compare s1 s2 = 0 && f1 == f2
   | HCENFORCES (s1, f1), HCALLOWS (s2, f2)
   | HCENFORCES (s1, f1), HCALLOWS (s2, f2) -> compare s1 s2 = 0 && f1 == f2
-  | HCMIN (n1, s1, f1), HCMIN (n2, s2, f2)
-  | HCMAX (n1, s1, f1), HCMAX (n2, s2, f2) ->
+  | HCMORETHAN (n1, s1, f1), HCMORETHAN (n2, s2, f2)
+  | HCMAXEXCEPT (n1, s1, f1), HCMAXEXCEPT (n2, s2, f2) ->
       n1 = n2 && compare s1 s2 = 0 && f1 == f2 
   | HCCHC (f1a, f1b), HCCHC (f2a, f2b) -> f1a == f2a && f1b == f2b
   | HCCHCN (f1a, f1b), HCCHCN (f2a, f2b) -> f1a == f2a && f1b == f2b
@@ -1201,8 +1233,8 @@ let equal_hcFormula_node f1 f2 =
   | HCAX _, _
   | HCENFORCES _, _
   | HCALLOWS   _, _
-  | HCMIN _, _
-  | HCMAX _, _
+  | HCMORETHAN _, _
+  | HCMAXEXCEPT _, _
   | HCCHC _, _
   | HCCHCN _, _
   | HCFUS _, _ -> false
@@ -1222,8 +1254,8 @@ let hash_hcFormula_node f =
   | HCAND (f1, f2) -> 19 * (19 * f1.HC.hkey + f2.HC.hkey) + 6
   | HCEX (s, f1) -> 19 * (19 * (Hashtbl.hash s) + f1.HC.hkey) + 3
   | HCAX (s, f1) -> 19 * (19 * (Hashtbl.hash s) + f1.HC.hkey) + 4
-  | HCMIN (n, s, f1) -> 19 * (19 * (19 * (Hashtbl.hash s) + n) + f1.HC.hkey) + 7
-  | HCMAX (n, s, f1) -> 19 * (19 * (19 * (Hashtbl.hash s) + n) + f1.HC.hkey) + 8
+  | HCMORETHAN (n, s, f1) -> 19 * (19 * (19 * (Hashtbl.hash s) + n) + f1.HC.hkey) + 7
+  | HCMAXEXCEPT (n, s, f1) -> 19 * (19 * (19 * (Hashtbl.hash s) + n) + f1.HC.hkey) + 8
   | HCCHC (f1, f2) -> 19 * (19 * f1.HC.hkey + f2.HC.hkey) + 9
   | HCCHCN (f1, f2) -> 19 * (19 * f1.HC.hkey + f2.HC.hkey) + 10
   | HCFUS (first, f1) -> 19 * (19 * (Hashtbl.hash first) + f1.HC.hkey) + 11
@@ -1247,8 +1279,8 @@ let toFml_hcFormula_node f =
   | HCAX (s, f1) -> AX (s, f1.HC.fml)
   | HCENFORCES (s, f1) -> ENFORCES (s, f1.HC.fml)
   | HCALLOWS (s, f1) -> ALLOWS (s, f1.HC.fml)
-  | HCMIN (n, s, f1) -> MIN (n, s, f1.HC.fml)
-  | HCMAX (n, s, f1) -> MAX (n, s, f1.HC.fml)
+  | HCMORETHAN (n, s, f1) -> MORETHAN (n, s, f1.HC.fml)
+  | HCMAXEXCEPT (n, s, f1) -> MAXEXCEPT (n, s, f1.HC.fml)
   | HCCHC (f1, f2) -> CHC (f1.HC.fml, f2.HC.fml)
   | HCCHCN (f1, f2) -> CHCN (f1.HC.fml, f2.HC.fml)
   | HCFUS (first, f1) -> FUS (first, f1.HC.fml)
@@ -1270,10 +1302,8 @@ let negNde_hcFormula_node f =
   | HCAX (s, f2) -> HCEX (s, f2.HC.neg)
   | HCENFORCES (s, f2) -> HCALLOWS (s, f2.HC.neg)
   | HCALLOWS (s, f2) -> HCENFORCES (s, f2.HC.neg)
-  | HCMIN (n, s, f1) ->
-      assert (n > 0);      
-      HCMAX (n-1, s, f1)
-  | HCMAX (n, s, f1) -> HCMIN (n+1, s, f1)
+  | HCMORETHAN (n, s, f1) -> HCMAXEXCEPT (n, s, f1.HC.neg)
+  | HCMAXEXCEPT (n, s, f1) -> HCMORETHAN (n, s, f1.HC.neg)
   | HCCHC (f1, f2) -> HCCHCN (f1.HC.neg, f2.HC.neg)
   | HCCHCN (f1, f2) -> HCCHC (f1.HC.neg, f2.HC.neg)
   | HCFUS (first, f1) -> HCFUS (first, f1.HC.neg)
@@ -1316,6 +1346,8 @@ let rec hc_formula hcF f =
       HcFormula.hashcons hcF (HCAND (tf1, tf2))
   | NOT _
   | EQU _
+  | MIN _
+  | MAX _
   | IMP _ -> raise (CoAlgException "Formula is not in negation normal form.")
   | EX (s, f1) ->
       let tf1 = hc_formula hcF f1 in
@@ -1329,12 +1361,12 @@ let rec hc_formula hcF f =
   | ALLOWS (s, f1) ->
       let tf1 = hc_formula hcF f1 in
       HcFormula.hashcons hcF (HCALLOWS (s, tf1))
-  | MIN  (n, s, f1) ->
+  | MORETHAN  (n, s, f1) ->
       let tf1 = hc_formula hcF f1 in
-      HcFormula.hashcons hcF (HCMIN (n, s, tf1))
-  | MAX  (n, s, f1) ->
+      HcFormula.hashcons hcF (HCMORETHAN (n, s, tf1))
+  | MAXEXCEPT  (n, s, f1) ->
       let tf1 = hc_formula hcF f1 in
-      HcFormula.hashcons hcF (HCMAX (n, s, tf1))
+      HcFormula.hashcons hcF (HCMAXEXCEPT (n, s, tf1))
   | CHC (f1, f2) ->
       let tf1 = hc_formula hcF f1 in
       let tf2 = hc_formula hcF f2 in
diff --git a/CoAlgFormula.mli b/CoAlgFormula.mli
index bc4a9c40c0001438b09a48fd3871529262334417..69a7ecffa2f89f92c88f1b47f6337f036f0dfb27 100644
--- a/CoAlgFormula.mli
+++ b/CoAlgFormula.mli
@@ -24,6 +24,8 @@ type formula =
   | ALLOWS   of int list * formula
   | MIN of int * string * formula
   | MAX of int * string * formula
+  | MORETHAN of int * string * formula (* diamond of GML *)
+  | MAXEXCEPT of int * string * formula (* box of GML *)
   | CHC of formula * formula
   | CHCN of formula * formula
   | FUS of bool * formula
@@ -109,8 +111,8 @@ and hcFormula_node =
   | HCAX of string * hcFormula
   | HCENFORCES of int list * hcFormula
   | HCALLOWS of int list * hcFormula
-  | HCMIN of int * string * hcFormula
-  | HCMAX of int * string * hcFormula
+  | HCMORETHAN of int * string * hcFormula (* GML Diamond *)
+  | HCMAXEXCEPT of int * string * hcFormula (* GML Box *)
   | HCCHC of hcFormula * hcFormula
   | HCCHCN of hcFormula * hcFormula
   | HCFUS of bool * hcFormula
diff --git a/CoAlgLogics.ml b/CoAlgLogics.ml
index be35511152fccf82e5fa94c5ffb8838cca9ca924..3a088a5c5bfcc862dd4a96da6e55451f648444ff 100644
--- a/CoAlgLogics.ml
+++ b/CoAlgLogics.ml
@@ -266,7 +266,11 @@ let mkRule_CL sort bs sl =
         AllInOne rules
 
 let mkRule_GML sort bs sl =
-    mkRule_MultiModalK sort bs sl
+  assert (List.length sl = 1);
+  let s1 = List.hd sl in (* [s1] = List.hd sl *)
+  let boxes = bsetFilter bs (fun f -> lfGetType sort f = MoreThanF) in
+  let diamonds = bsetFilter bs (fun f -> lfGetType sort f = MaxExceptF) in
+  mkRule_MultiModalK sort bs sl
 
 let mkRule_Choice sort bs sl =
   assert (List.length sl = 2);
diff --git a/CoAlgMisc.ml b/CoAlgMisc.ml
index beb4fbd45e6f84eac4f0efe0c15a0c5f0dbfe68a..30f92b0f40748ddbccb532c02948cf2924b786e1 100644
--- a/CoAlgMisc.ml
+++ b/CoAlgMisc.ml
@@ -85,8 +85,8 @@ type formulaType =
   | AxF  (* Universal / box *)
   | EnforcesF (* diamond of CL *)
   | AllowsF   (* box of CL *)
-  | MinF      (* at least n successors *)
-  | MaxF      (* at most  n successors *)
+  | MoreThanF (* more than n successors = diamond in gml *)
+  | MaxExceptF(* at most n exceptions = box in gml *)
   | ChcF (* Choice *)
   | FusF (* Fusion *)
 
@@ -566,8 +566,8 @@ let rec detClosure nomTbl hcF fset atset nomset s f =
         then raise (C.CoAlgException "[{Agents}]-formula is used in wrong sort.")
         else ();
         detClosure nomTbl hcF fset atset nomset (List.hd sortlst) f1
-    | C.HCMIN (_,_,f1)
-    | C.HCMAX (_,_,f1) ->
+    | C.HCMORETHAN (_,_,f1)
+    | C.HCMAXEXCEPT (_,_,f1) ->
         if func <> GML || List.length sortlst <> 1
         then raise (C.CoAlgException "[{>=,<=}]-formula is used in wrong sort.")
         else ();
@@ -656,8 +656,8 @@ let initTables nomTbl hcF htF htR s f n =
       !arrayType.(s).(n) <- AllowsF;
       !arrayDest1.(s).(n) <- C.HcFHt.find htF.(List.hd sortlst) f1;
       !arrayDestAg.(s).(n) <- Array.of_list aglist
-  | C.HCMIN (cnt,role,f1) ->
-      !arrayType.(s).(n) <- MinF;
+  | C.HCMORETHAN (cnt,role,f1) ->
+      !arrayType.(s).(n) <- MoreThanF;
       !arrayDest1.(s).(n) <- C.HcFHt.find htF.(List.hd sortlst) f1;
       !arrayDestNum.(s).(n) <- cnt;
       !arrayDest3.(s).(n) <-
@@ -666,8 +666,8 @@ let initTables nomTbl hcF htF htR s f n =
           let size = Hashtbl.length htR in
           Hashtbl.add htR role size;
           size
-  | C.HCMAX (cnt,role,f1) ->
-      !arrayType.(s).(n) <- MaxF;
+  | C.HCMAXEXCEPT (cnt,role,f1) ->
+      !arrayType.(s).(n) <- MaxExceptF;
       !arrayDest1.(s).(n) <- C.HcFHt.find htF.(List.hd sortlst) f1;
       !arrayDestNum.(s).(n) <- cnt;
       !arrayDest3.(s).(n) <-
diff --git a/CoAlgMisc.mli b/CoAlgMisc.mli
index 1c50e0c949e8d05f9629a7f2163cc10493f13baf..2c80349a9d14ac63b7e789051b54ef18c8703c93 100644
--- a/CoAlgMisc.mli
+++ b/CoAlgMisc.mli
@@ -29,8 +29,8 @@ type formulaType =
   | AxF
   | EnforcesF
   | AllowsF
-  | MinF
-  | MaxF
+  | MoreThanF
+  | MaxExceptF
   | ChcF
   | FusF