requires may also be empty