add changes from master, improve design, now a good usage example