Major rewrite for version 1.0.0.