    //@include lib_Class.js
    //@include lib_sol.common.Config.js
    //@include lib_sol.common.ix.DynKwlFindChildrenIterator.js
    //@include lib_sol.contract.mixins.Configuration.js
    //@include lib_sol.common.Injection.js

    sol.define("sol.contract.ix.dynkwl.Clauses", {
      extend: "sol.common.ix.DynKwlSearchIterator",
      mixins: ["sol.contract.mixins.Configuration", "sol.common.mixins.Inject"],

      inject: {
        clausesConfig: { config: "contract", prop: "clauses" }
      },

      tableTitle: "Contract clauses",
      tableHeaders: ["Name", null],
      tableKeyNames: ["IX_MAP_CLAUSE_NAME{i}", "IX_MAP_CLAUSE_ID{i}"],
      searchParams: [{ name: "IX_MAP_CLAUSE_NAME{i}", searchName: "NAME" }, { name: "CONTRACT_CATEGORY", searchName: "CONTRACT_CATEGORIES" }, { name: "CONTRACT_TYPE", searchName: "CONTRACT_TYPES" }],

      initialize: function (config) {
        var me = this;
        sol.create("sol.common.Injection").inject(me);
        me.$super("sol.common.ix.DynKwlSearchIterator", "initialize", [config]);
      },

      getRowData: function (sord) {
        var clauseId;
        clauseId = sol.common.SordUtils.getObjKeyValue(sord, "CLAUSE_ID");
        return [sord.name, clauseId];
      },

      /**
       * @private
       * Implements a find by type search that is filtered by ObjKeys.
       * Used for the 'DynKwlSearchIterator'.
       * @param {String[]} filterList
       * @return {de.elo.ix.client.FindInfo}
       */
      getFindInfo: function (filterList) {
        var me = this,
            findInfo, findByIndex, okeys, okey, i, param, filter;

        me.log.enter("getFindInfo");

        findInfo = new FindInfo();
        findByIndex = new FindByIndex();
        okeys = [];

        if (filterList && filterList.length > 0) {
          for (i = 0; i < filterList.length; i++) {
            param = me.searchParams[i];
            filter = filterList[i];
            if (param.name) {
              if (param.searchName == "NAME") {
                findByIndex.name = filter;
              } else {
                okey = new ObjKey();
                okey.name = param.searchName || param.name;
                filter = (filter) ? "\"" + filter + "\" or \"ALL\"" : "ALL";
                okey.data = [filter];
                okeys.push(okey);
              }
            }
          }
        }

        findByIndex.maskId = me.clausesConfig.maskName;
        findByIndex.objKeys = okeys;
        findInfo.findByIndex = findByIndex;

        me.log.exit("getFindInfo");
        return findInfo;
      }
    });

    function getDataIterator() {
      var iterator;
      iterator = sol.create("sol.contract.ix.dynkwl.Clauses", {});
      return new DynamicKeywordDataProvider(iterator);
    }