refactor
added benchmark