accepts types other then strings
refactoring
solve merge