made final
some refactorings
some refactorings
some refactorings
some refactorings