-- modified for easy reuse