def make_result(self, result_class, node=None, prev_node=None,
                    remember=True, key_chunks=None, notify=True, **kwargs):
        def canonicalize(node, **kwargs):
            return None if node is None else node.canonicalize(**kwargs)
        index = self.index
        result = result_class(canonicalize(node, **kwargs),
                              canonicalize(prev_node, **kwargs), index)
        if not remember:
            return result
        self.history[index] = result_class(
            canonicalize(node, include_nodes=False),
            canonicalize(prev_node, include_nodes=False), index)
        key_chunks = key_chunks or split_key(node.key)
        asymptotic_key_chunks = (key_chunks[:x + 1]
                                 for x in xrange(len(key_chunks)))
        event_keys = [(False, key_chunks)]
        for _key_chunks in asymptotic_key_chunks:
            exact = _key_chunks == key_chunks
            self.indices.setdefault(_key_chunks, []).append((index, exact))
            event_keys.append((True, _key_chunks))
        if notify:
            for event_key in event_keys:
                try:
                    event = self.events.pop(event_key)
                except KeyError:
                    pass
                else:
                    event.set()
        return result