strategy pattern
some refactorings
implemented Builder Idiom on Check