with fuller documentation and demo