copied in the v0.1 spec, needs reformatting/tidying up.