need an upper bound