diff --git a/client/javascript/app/script_client.js b/client/javascript/app/script_client.js
index 02bda1b163d823f778c284e186dd91a290c803f2..d139ae71708f5b9e32a78dd8688c4a03a8a1c8f4 100644
--- a/client/javascript/app/script_client.js
+++ b/client/javascript/app/script_client.js
@@ -875,52 +875,53 @@ vitisApp.on('appInitCtrlLoaded', function () {
 
             if (typeof (sValue) !== "undefined" && (sValue.toString()) !== "") {
                 if (goog.isDefAndNotNull(oFormElement["comparator"])) {
-                    if (goog.isDefAndNotNull(oFormElement["comparator"]["formater"])) {
-                        sValue = oFormElement["comparator"]["formater"].replace(/<VALUE_TO_REPLACE>/g, sValue);
+                    var aOperators = [];
+                    for (var j = 0;j < oFormElement["comparator"].length;j++){
+                        if(goog.isObject(oFormElement["comparator"][j])){
+                            var oOperator = {};
+                            if (goog.isDefAndNotNull(oFormElement["comparator"][j]["formater"])) {
+                                sValue = oFormElement["comparator"][j]["formater"].replace(/<VALUE_TO_REPLACE>/g, sValue);
+                            }
+
+                            if(goog.isArray(oFormElement["comparator"][j]["compare_operator"])){
+                                oOperator["relation"] = (goog.isDefAndNotNull(oFormElement["comparator"][j]["relation"]) ? oFormElement["comparator"][j]["relation"] : "AND");
+                                oOperator["operators"] = [];
+                                for (var k = 0; k < oFormElement["comparator"][j]["compare_operator"].length; k++){
+                                    oOperator["operators"].push({
+                                        "column": (goog.isArray(oFormElement["comparator"][j]["column"]) ? oFormElement["comparator"][j]["column"][k] : oFormElement["name"]),
+                                        "compare_operator": oFormElement["comparator"][j]["compare_operator"][k],
+                                        "value": sValue
+                                    });
+                                }
+                            }else{
+                                oOperator["column"] = (goog.isDefAndNotNull(oFormElement["comparator"][j]["column"]) ? oFormElement["comparator"][j]["column"] : oFormElement["name"]);
+                                oOperator["compare_operator"] = oFormElement["comparator"][j]["compare_operator"];
+                                oOperator["value"] = sValue;
+                            }
+
+                            if(goog.isDefAndNotNull(oFormElement["comparator"][j]["compare_operator_options"])){
+                                oOperator["compare_operator_options"] = oFormElement["comparator"][j]["compare_operator_options"];
+                            }
+
+                            aOperators.push(oOperator);
+                        }else{
+                            // deprecated branch
+                            console.warn("This use of compare attribute is deprecated in json form")
+                            aOperators.push({
+                                "column": (goog.isDefAndNotNull(oFormElement["attrToCompare"]) ? oFormElement["attrToCompare"][j] : oFormElement["name"]),
+                                "compare_operator": oFormElement["comparator"][j],
+                                "value": sValue
+                            });
+                        }
                     }
-                    //
-                    for (var j = 0; j < oFormElement["comparator"].length; j++) {
+                    if(goog.isDefAndNotNull(oFormElement["comparator_relation"])){
                         oFilter["operators"].push({
-                            "column": (goog.isDefAndNotNull(oFormElement["attrToCompare"]) ? oFormElement["attrToCompare"][j] : oFormElement["name"]),
-                            "compare_operator": oFormElement["comparator"][j],
-                            "value": sValue
+                            "relation": oFormElement["comparator_relation"],
+                            "operators": aOperators
                         });
+                    }else{
+                        oFilter["operators"] = oFilter["operators"].concat(aOperators);
                     }
-                    /*
-                    oFormElement["comparator"]["value"] = sValue;
-                    oFilter["operators"].push(oFormElement["comparator"]);
-                    
-                     for (var j = 0; j < oFormElement["comparator"].length; j++) {
-                     var sFormElement = "";
-                     if (goog.isDefAndNotNull(oFormElement["attrToCompare"])) {
-                     sFormElement = (goog.isDefAndNotNull(oFormElement["attrToCompare"][j]) ? oFormElement["attrToCompare"][j] : oFormElement["name"]);
-                     } else {
-                     sFormElement = oFormElement["name"];
-                     }
-                     var bIsNotNumber = true;
-                     if (goog.isDefAndNotNull(oFormElement["NaNForced"])) {
-                     bIsNotNumber = (goog.isDefAndNotNull(oFormElement["NaNForced"][j]) ? oFormElement["NaNForced"][j] : isNaN(sValue));
-                     } else {
-                     bIsNotNumber = isNaN(sValue);
-                     }
-                     switch (oFormElement["comparator"][j]) {
-                     case 'LIKE' :
-                     oFilter.push('lower("' + sFormElement + '") LIKE lower(\'%' + sValue + '%\')');
-                     break;
-                     case 'SQL' :
-                     oFilter.push(sFormElement.replace(/<VALUE_TO_REPLACE>/g, sValue));
-                     break;
-                     // ajouter d'autre comparateur si besoin ex: BETWEEN ______ AND ______
-                     default:
-                     // = < <= > >= basique
-                     if (bIsNotNumber) {
-                     sValue = "'" + sValue + "'";
-                     }
-                     oFilter.push(sFormElement + oFormElement["comparator"][j] + sValue);
-                     break;
-                     }
-                     }
-                     */
                 } else {
                     if (oFormElement["type"] == "text") {
                         oFilter["operators"].push({