big changes, refactoring
merge