further refactoring

--HG--
branch : hold-input
major refactoring

--HG--
branch : hold-input