v01 improved; v04 improved; v18 corrections