def append(self, other, ignore_meta_conflict=False, inplace=False,
               **kwargs):
        if not isinstance(other, IamDataFrame):
            other = IamDataFrame(other, **kwargs)
            ignore_meta_conflict = True
        if self.time_col is not other.time_col:
            raise ValueError('incompatible time format (years vs. datetime)!')
        ret = copy.deepcopy(self) if not inplace else self
        diff = other.meta.index.difference(ret.meta.index)
        intersect = other.meta.index.intersection(ret.meta.index)
        if not intersect.empty:
            if not ignore_meta_conflict:
                cols = [i for i in other.meta.columns if i in ret.meta.columns]
                if not ret.meta.loc[intersect, cols].equals(
                        other.meta.loc[intersect, cols]):
                    conflict_idx = (
                        pd.concat([ret.meta.loc[intersect, cols],
                                   other.meta.loc[intersect, cols]]
                                  ).drop_duplicates()
                        .index.drop_duplicates()
                    )
                    msg = 'conflict in `meta` for scenarios {}'.format(
                        [i for i in pd.DataFrame(index=conflict_idx).index])
                    raise ValueError(msg)
            cols = [i for i in other.meta.columns if i not in ret.meta.columns]
            _meta = other.meta.loc[intersect, cols]
            ret.meta = ret.meta.merge(_meta, how='outer',
                                      left_index=True, right_index=True)
        if not diff.empty:
            sort_kwarg = {} if int(pd.__version__.split('.')[1]) < 23 \
                else dict(sort=False)
            ret.meta = ret.meta.append(other.meta.loc[diff, :], **sort_kwarg)
        _data = ret.data.set_index(ret._LONG_IDX).append(
            other.data.set_index(other._LONG_IDX), verify_integrity=True)
        ret.extra_cols += [i for i in other.extra_cols
                           if i not in ret.extra_cols]
        ret._LONG_IDX = IAMC_IDX + [ret.time_col] + ret.extra_cols
        ret.data = sort_data(_data.reset_index(), ret._LONG_IDX)
        if not inplace:
            return ret