refactor to core logic class
ignore