Redesign and rewrite.
Merge pull request #10 from hybridgroup/rewrite

Rewrite