def generate_indices_staggered(func, dim, order, side=None, x0=None):
    """
    Indices for the finite-difference scheme on a staggered grid

    Parameters
    ----------
    func: Function
        Function that is differentiated
    dim: Dimension
        Dimensions w.r.t which the derivative is taken
    order: Int
        Order of the finite-difference scheme
    side: Side
        Side of the scheme, (centered, left, right)
    x0: Dict of {Dimension: Dimension or Expr or Number}
        Origin of the scheme, ie. `x`, `x + .5 * x.spacing`, ...

    Returns
    -------
    Ordered list of indices
    """
    diff = dim.spacing
    start = (x0 or {}).get(dim) or func.indices_ref[dim]
    try:
        ind0 = func.indices_ref[dim]
    except AttributeError:
        ind0 = start
    if start != ind0:
        ind = [start - diff/2 - i * diff for i in range(0, order//2)][::-1]
        ind += [start + diff/2 + i * diff for i in range(0, order//2)]
        if order < 2:
            ind = [start - diff/2, start + diff/2]
    else:
        ind = [start + i * diff for i in range(-order//2, order//2+1)]
        if order < 2:
            ind = [start, start - diff]

    return start, tuple(ind)