restructured and edited