major rewrite; keymaps added; demos added