First version, still need to work on groups. 

This is just for dicussion, and maybe you would like to give some feedback.