    importPackage(Packages.de.elo.ix.client);
    importPackage(Packages.de.elo.ix.jscript);

    //@include lib_Class.js
    //@include lib_sol.common.Config.js
    //@include lib_sol.common.JsonUtils.js
    //@include lib_sol.common.SordUtils.js
    //@include lib_sol.common.IxUtils.js
    //@include lib_sol.common.WfUtils.js
    //@include lib_sol.common.CounterUtils.js
    //@include lib_sol.common.AclUtils.js
    //@include lib_sol.common.RepoUtils.js
    //@include lib_sol.common.Template.js
    //@include lib_sol.common.TranslateTerms.js
    //@include lib_sol.common.ix.RfUtils.js
    //@include lib_sol.common.ix.ActionBase.js
    //@include lib_sol.common.ix.FunctionBase.js
    //@include lib_sol.contact.Utils.js

    var logger = sol.create("sol.Logger", { scope: "sol.contact.ix.actions.CreateContactList" });

    /**
     * Creates a new contactlist.
     *
     * # Sequence
     *
     * - Copy the template structure
     * - Start the workflow defined by the mask
     *
     * # Configuration
     *
     * |Property|Description|
     * |:------|:------|
     * |contactlist.templateFolderId|Path or ID to the contactlist template folder|
     * |contactlist.createWorkflowNameTemplate|The template for the workflow name (in Handlebars syntax)|
     *
     * # Workflow name template
     * Usable variables in the template for the workflow name
     *
     * - wfPrefix {String}
     * - contactlistType {String}
     *
     * @author JHR, ELO Digital Office GmbH
     * @version 1.0
     *
     * @eloix
     *
     * @requires sol.common.Config
     * @requires sol.common.JsonUtils
     * @requires sol.common.SordUtils
     * @requires sol.common.IxUtils
     * @requires sol.common.CounterUtils
     * @requires sol.common.AclUtils
     * @requires sol.common.RepoUtils
     * @requires sol.common.Template
     * @requires sol.common.TranslateTerms
     * @requires sol.common.WfUtils
     * @requires sol.common.ix.RfUtils
     * @requires sol.common.ix.ActionBase
     * @requires sol.common.ix.FunctionBase
     * @requires sol.contact.Utils
     */
    sol.define("sol.contact.ix.actions.CreateContactList", {
      extend: "sol.common.ix.ActionBase",

      requiredConfig: ["ci", "user", "contactlistType"],

      /**
       * @cfg {de.elo.ix.client.ClientInfo} ci (required)
       */

      /**
       * @cfg {de.elo.ix.client.UserInfo} user (required)
       */

      /**
       * @cfg {String} contactlistType (required)
       * The contactlist template which should be copied
       */

      initialize: function (config) {
        var me = this;
        me.$super("sol.common.ix.ActionBase", "initialize", [config]);
        me.config = sol.contact.Utils.loadConfig();
      },

      getName: function () {
        return "CreateContactList";
      },

      process: function () {
        var me = this,
            name, objId, flowId;

        if (!me.parentId) {
          me.addErrorEvent("sol.contact.ix.actions.CreateContactList.error.target", null, null, me.ci);
          return;
        }
        name = me.buildElementName();
        objId = sol.common.IxUtils.execute("RF_sol_function_CopyFolderContents", {
          objId: me.parentId,
          source: me.getTemplateArcPath(me.contactlistType),
          copySourceAcl: false,
          inheritDestinationAcl: true,
          name: name,
          asAdmin: true,
          useQuickCopy: true,
          acl: {
            mode: "ADD",
            entries: [
              { userName: me.user.name, rights: { r: true, w: true, d: true, e: true, l: true } }
            ]
          }
        });

        flowId = me.startMaskStandardWorkflow(objId, { name: name, field: "STANDARD_WORKFLOW" });
        if (flowId) {
          me.addWfDialogEvent(flowId, { objId: objId, title: name, dialogId: me.getName() });

          me.addGotoIdEvent(objId, null, {
            type: "WF_STATUS",
            value: "CREATE",
            flowId: flowId
          });
        } else {
          me.addGotoIdEvent(objId);
        }
      },

      /**
       * @private
       * Retrieves the path of the contact list template.
       * @param {String} contactlistType
       * @return {String}
       */
      getTemplateArcPath: function (contactlistType) {
        return sol.common.RepoUtils.getObjIdFromRelativePath(this.config.contactlist.templateFolderId, "/" + contactlistType);
      },

      /**
       * @private
       * Creates the new contact list (temporary) name.
       * @return {String}
       */
      buildElementName: function () {
        var me = this;
        return sol.create("sol.common.Template", { source: me.config.contactlist.createWorkflowNameTemplate }).apply({ contactlistType: me.contactlistType });
      }

    });

    /**
     * @member sol.contact.ix.actions.CreateContactList
     * @method RF_sol_contact_action_CreateContactList
     * @static
     * @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName
     */
    function RF_sol_contact_action_CreateContactList(ec, configAny) {
      logger.enter("RF_sol_contact_action_CreateContactList", configAny);
      var rfUtils = sol.common.ix.RfUtils,
          config = rfUtils.parseAndCheckParams(ec, arguments.callee.name, configAny, "contactlistType"),
          createContactList, result;

      config.ci = ec.ci;
      config.user = ec.user;

      createContactList = sol.create("sol.contact.ix.actions.CreateContactList", config);
      result = createContactList.execute();
      logger.exit("RF_sol_contact_action_CreateContactList", result);
      return result;
    }