initial
some refactoring