refactored to change name and prettify package structure