updated lower function that uses zmv