function LeaderLineAttachment(conf, args) {
      var attachProps = {conf: conf, curStats: {}, aplStats: {}, boundTargets: []},
        attachOptions, shortOptions = {};

      // Parse arguments
      conf.argOptions.every(function(argOption) {
        if (args.length && (
              typeof argOption.type === 'string' ? typeof args[0] === argOption.type :
              typeof argOption.type === 'function' ? argOption.type(args[0]) : false
            )) {
          shortOptions[argOption.optionName] = args.shift();
          return true;
        } else {
          return false;
        }
      });
      attachOptions = args.length && isObject(args[0]) ? copyTree(args[0]) : {};
      Object.keys(shortOptions).forEach(
        function(optionName) { attachOptions[optionName] = shortOptions[optionName]; });

      if (conf.stats) {
        initStats(attachProps.curStats, conf.stats);
        initStats(attachProps.aplStats, conf.stats);
      }

      Object.defineProperty(this, '_id', {value: ++insAttachId});
      Object.defineProperty(this, 'isRemoved', {
        get: function() { return !insAttachProps[this._id]; }
      });
      attachProps._id = this._id;

      // isRemoved has to be set before this because init() might throw.
      if (!conf.init || conf.init(attachProps, attachOptions)) {
        insAttachProps[this._id] = attachProps;
      }
    }
@class
@param {AttachConf} conf - Target AttachConf.
@param {Array} args - Initial options.