# Buggy code
def reindex_items(self, new_items, copy=True, fill_value=np.nan):
    """ """
    new_items = _ensure_index(new_items)
    data = self
    if not data.is_consolidated():
        data = data.consolidate()
        return data.reindex_items(new_items)

    # TODO: this part could be faster (!)
    new_items, indexer = self.items.reindex(new_items)

    # could have some pathological (MultiIndex) issues here
    new_blocks = []
    if indexer is None:
        for blk in self.blocks:
            if copy:
                new_blocks.append(blk.reindex_items_from(new_items))
            else:
                new_blocks.append(blk)
    else:
        for block in self.blocks:
            newb = block.reindex_items_from(new_items, copy=copy)
            if len(newb.items) > 0:
                new_blocks.append(newb)

        mask = indexer == -1
        if mask.any():
            extra_items = new_items[mask]
            na_block = self._make_na_block(
                extra_items, new_items, fill_value=fill_value
            )
            new_blocks.append(na_block)
            new_blocks = _consolidate(new_blocks, new_items)

    return BlockManager(new_blocks, [new_items] + self.axes[1:])


# Traceback (ValueError)
In [17]: date_range(datetime.datetime.today(), periods=10, freq='2h20m')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/home/chang/Dropbox/git/pandas/<ipython-input-17-ff4e03382573> in <module>()
----> 1 date_range(datetime.datetime.today(), periods=10, freq='2h20m')

/home/chang/Dropbox/git/pandas/pandas/tseries/index.pyc in date_range(start, end, periods, freq, tz, normalize)
1209     """
1210     return DatetimeIndex(start=start, end=end, periods=periods,
-> 1211                          freq=freq, tz=tz, normalize=normalize)
1212
1213

/home/chang/Dropbox/git/pandas/pandas/tseries/index.pyc in __new__(cls, data, freq, start, end, periods, copy, name, tz, verify_integrity, normalize, **kwds)
202
203         if data is None and offset is None:
--> 204             raise ValueError("Must provide freq argument if no data is "
205                              "supplied")
206

ValueError: Must provide freq argument if no data is supplied

# Fixed code
def reindex_items(self, new_items, copy=True, fill_value=np.nan):
    """ """
    new_items = _ensure_index(new_items)
    data = self
    if not data.is_consolidated():
        data = data.consolidate()
        return data.reindex_items(new_items)

    # TODO: this part could be faster (!)
    new_items, indexer = self.items.reindex(new_items)

    # could have some pathological (MultiIndex) issues here
    new_blocks = []
    if indexer is None:
        for blk in self.blocks:
            if copy:
                new_blocks.append(blk.reindex_items_from(new_items))
            else:
                blk.ref_items = new_items
                new_blocks.append(blk)
    else:
        for block in self.blocks:
            newb = block.reindex_items_from(new_items, copy=copy)
            if len(newb.items) > 0:
                new_blocks.append(newb)

        mask = indexer == -1
        if mask.any():
            extra_items = new_items[mask]
            na_block = self._make_na_block(
                extra_items, new_items, fill_value=fill_value
            )
            new_blocks.append(na_block)
            new_blocks = _consolidate(new_blocks, new_items)

    return BlockManager(new_blocks, [new_items] + self.axes[1:])