Initial version
refactoring