not so generic
better templates
revised
updated to cover changes