def update(self, iterable={}, **kwargs):
        """
        Updates recursively a self with a given iterable.

        TODO: rewrite this ugly stuff
        """
        def _merge(a, *args):
            for key, value in itertools.chain(*args):
                if key in a and isinstance(value, (dict, Conf)):
                    value = _merge(a[key], value.items())
                a[key] = value
            return a

        # adopt iterable sequence to unified interface: (key, value)
        if isinstance(iterable, (dict, Conf)):
            iterable = iterable.items()

        # iterate and update values
        _merge(self._data, iterable, kwargs.items())
Updates recursively a self with a given iterable.

        TODO: rewrite this ugly stuff